| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
да, это проблема не терминала. В xterm и sakura всё точно так же. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
даже не знаю, в какой раздел это писать, поэтому напишу сюда. Поставил себе zsh, настроил (конфиг тут http://paste.org.ru/?28t97z ). При изменении размера терминала (urxvt) само консольное приложение размера не меняет, соответственно если терминал уменьшить, то всё съезжает и приходится перезагружать программу. Пробовал собирать свежие zsh и ncurses, но это не помогло. В frugalware всё нормально работает. В какую сторону ковырять даже не знаю. При использовании bash тоже всё нормально. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
в сторону SICP надо идти :) или же в сторону соответствующего ВУЗа. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
cucullus, если статичный то понятно. А вот насчёт динамического были сомнения. Ладно, буду иметь ввиду. Спасибо :) |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
eXire, 0o спасибо! Блин, я долго над этим голову ломал. Спасибо огромное. /me полгода ничего на C не писал, вот оно и забылось. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
cucullusа разве в двумерном массиве элементы подряд идут? Тоесть разве между строками нет промежутков? |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
overmind88не совсем. Код перед тобой. Программа перемешивает элементы одномерного массива и переносит их в двумерный. Только получается это почему-то очень криво. Переносится только каждый третий элемент (для случая 3x3, видимо каждый элемент кратный w). Единственное, что сейчас приходит в голову - грехи компилятора, но в MSVS у знакомых такая же фигня получается. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
cucullusдругого способа перенести данные из одной области памяти в другую мне в голову не пришло. Можно было бы конечно что-то вроде *one++=*two++; но одно другого не лучше. Но не в этом суть. Там почему-то коряво переносятся данные из двумерного массива в одномерный. Почему - я так и не смог понять. Собственно, в этом и вопрос. |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
ребята, огромная просьба откомпилировать следующий код и выложить сюда то, что он выдаёт, а также версию компилятора и ОС. Сразу говорю: программировать я пока только учусь, но по-моему что-то тут не так.#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void xchg(void *one, void *two, size_t size){
void *tmp = malloc(size);
memcpy(tmp,one,size);
memcpy(one,two,size);
memcpy(two,tmp,size);
free(tmp);
}
void shuffle(void *ptr, size_t size, int num){
int i;
void *dst;
void *wrk;
void *tmp = malloc(size);
wrk = ptr;
srand((unsigned int)time(NULL));
for(i=0;i<num;i++){
dst = ptr + (rand() % num)*size;
xchg(wrk,dst,size);
wrk+=size;
}
free(tmp);
}
int main(){
int **twodim;
int *onedim;
int i,j;
int w=3,h=3;
twodim=calloc(h,sizeof(int*));
for(i=0;i<h;i++)
twodim[i]=calloc(w,sizeof(int));
onedim = calloc(h*w,sizeof(int));
for(i=0;i<h*w;i++)
onedim[i]=i;
shuffle(onedim,sizeof(int),w*h);
for(j=0;j<h;j++)
for(i=0;i<w;i++){
twodim[i,j]=onedim[j*w+i];
printf("%d ",twodim[i,j]);
}
puts("\n");
for(j=0;j<h;j++)
for(i=0;i<w;i++)
printf("%d ",twodim[i,j]);
puts("\n");
for(j=0;j<h;j++){
for(i=0;i<w;i++){
printf("%d ",twodim[i,j]);
}
putchar('\n');
}
free(onedim);
free(twodim);
return 0;
} |
| amoralyrr |
|
|
Темы:
3
Сообщения:
24
Участник с: 23 марта 2008
|
The_Arch_Way изменять не нужно и смысла нет. Проще уж тогда форкнуть дистрибутив. Хотя опять же смотря что не нравится. Мне например в нём нравится всё. |