Ввод и вывод двумерного(динамического) массива. (Не могу понять в чем дело.)

Модератор: Модераторы разделов

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение drBatty »

Iroln писал(а):
13.06.2008 01:47
Напишите кусок кода для динамического выделения памяти под массив размерностью n (ну то бишь больше двух).
array = alloc(n*n); //для матрицы n на n
и так ошибка на ошибке, пусть они в остальном коде будут, его вы хоть проверить сможете...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

drBatty писал(а):
01.11.2008 03:06
неверно. если памяти в первом malloc не хватит - программа рухнет после второго(даже если ему хватит, при попытке записать по адресу (NULL + i) <= NULL, а если в цикле - тоже рухнет.

C этим согласен. При повторном просмотре уже потом сам заметил, влом было править.

drBatty писал(а):
01.11.2008 03:06
Эх блин... Столько распинался... А вы так ничего не поняли... :cry: :frusty:
ну не вернётся память обратно!!! вернётся только массив из m указателей на указатели. А m массивов doublе так и останется висеть оторванным :( ладно было бы C++, мы бы деструктор к элементам array написали, он m раз выполнился и m массивов удалил... А так... Эх...

На счёт free тоже всё понятно. Память освободится только для массива указателей. Чтобы не было утечки памяти функцию free надо вызвать m раз для каждого указателя на массив из n элементов, для которого память выделилась в цикле.

A вообще функцию malloc не рекомендуют использовать.

array = alloc(n*n); //для матрицы n на n
и так ошибка на ошибке, пусть они в остальном коде будут, его вы хоть проверить сможете...

alloc нет в стандартной библиотеке. Эта функция совместима только с unix на сколько мне известно.
На счёт последнего предложения вообще ничего не понял :)
Тайною мир держится
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение drBatty »

Iroln писал(а):
02.11.2008 23:34
alloc нет в стандартной библиотеке
а что есть? 50-80% времени сишный кодер работает над выделением памяти, а у него на то одна функция, да и так - не рекомендуется... Или new/delete теперь и в си есть? да и потом не важно, alloc() - просто функция которая возвращает кусок памяти, как - вопрос десятый.

Iroln писал(а):
02.11.2008 23:34
На счёт последнего предложения вообще ничего не понял

Ваша программа будет работать, пока ей памяти хватит. пока вы её будете тестировать. а вот рухнет она в самый неудобный момент, и вам придётся приехать и разобраться... просто все сишные распределители памяти сложно тестировать, и по этому их нужно делать как можно более простыми и понятными.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

drBatty писал(а):
03.11.2008 02:46
Ваша программа будет работать, пока ей памяти хватит. пока вы её будете тестировать. а вот рухнет она в самый неудобный момент, и вам придётся приехать и разобраться... просто все сишные распределители памяти сложно тестировать, и по этому их нужно делать как можно более простыми и понятными.

Ой, да бросьте вы. :)
Это всего лишь учебный пример, так сказать алгоритм. В реальном проекте естественно всё значительно сложнее и требуется кропотливое тестирование.
Тайною мир держится
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение drBatty »

Iroln писал(а):
03.11.2008 14:35
Это всего лишь учебный пример, так сказать алгоритм.
да в том то и дело, что нет!
это выделение памяти, и необходимо указать, что память не всегда выделяется.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

Код: Выделить всё

// Ввод массива
    printf("Введите мaссив размерностью %d x %d (q-выход):\n", m, n);
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            status = scanf("%lf", &array[i][j]);
        }
        if (status!=1)
        {
            free(array);
            return 0;
        }
    }

да это глюконат, если он введёт a b с программа закончит работу, а если a b 3 программа будет работать дальше, зачем тогда вообще проверка
если 3 3 c неправильная комбинация, а a b 3 правильная, логика страдает
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

Folderx писал(а):
05.11.2008 13:06
да это глюконат, если он введёт a b с программа закончит работу, а если a b 3 программа будет работать дальше, зачем тогда вообще проверка
если 3 3 c неправильная комбинация, а a b 3 правильная, логика страдает

Программа закончит работу в любом случае, если первым считанным символом будет что-то отличное от числа, например b 2 3, а если мы введём 3 4 a, функция scanf считает только до пробела, то есть число 3 и программа продолжит работу. Что не так с логикой?
Тайною мир держится
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

а если мы введём 3 4 a, функция scanf считает только до пробела, то есть число 3 и программа продолжит работу.

не, это я пропёрся, мне показалось что она вместо символа сохранит ноль и посчитает что она сохранила, хотя на самом деле она встретив не число не произведёт сохранения, следовательно ничего не запишет (там останется то, что было в массиве изначально, и это нередко ноль)
но ты вот щас пишешь, что программа продолжит работу на 3 4 a, но ведь это не так
программа остановится на всех на a 2 3, нa 1 b 3, на 1 2 c, короче на самом первом встретившемся символе

Что не так с логикой?

всё таки, если у тебя 100x100 элементов, в одном ряде буква появляется, пускай первой, зачем ещё 99 раз пытаться её прочитать чтобы понять что пора программу завершать ?
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

Folderx писал(а):
08.11.2008 03:17
... но ты вот щас пишешь, что программа продолжит работу на 3 4 a, но ведь это не так
программа остановится на всех на a 2 3, нa 1 b 3, на 1 2 c, короче на самом первом встретившемся символе

Да нет. Если посмотреть спецификацию функции scanf, то станет ясно, как она работает. scanf считывает символы из потока ввода до первого символа пробела, табуляции, символа новой строки и т.д. для каждого адреса. Если адресов больше чем 1, то функция продолжит считывать во второй адрес после пробела, символа новой строки и т.д. (не буквенно-цифровые символы останавливают считывание данных в один адрес)
Функция scanf возвращает число успешно считанных данных в зависимости от спецификатора и количества адресов для хранения данных, которые мы передали в неё. Если считанный символ не соответствует спецификатору, scanf возвращает NULL. Поэтому a 2 3 остановит программу, а 1 b 3 запишет в переменную значение 1.

Folderx писал(а):
08.11.2008 03:17
Что не так с логикой?

всё таки, если у тебя 100x100 элементов, в одном ряде буква появляется, пускай первой, зачем ещё 99 раз пытаться её прочитать чтобы понять что пора программу завершать ?

Буква нигде не появится, как только будет считана буква, программа завершится (return 0; - это выход из функции, а не из цикла), освободив память (но там ошибка с функцией free, поэтому память освободится не полностью, но это уже другая история, по хорошему надо вызвать free m раз).
Тайною мир держится
Спасибо сказали:

JelF
Сообщения: 62
ОС: Debian

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение JelF »

Код: Выделить всё

#include <stdio.h>
int main(){
int N,M; //N- количество строк, M-количество стобцов.
printf("Введи количество строк матрицы A:");
scanf("%d",&N);
printf("Введи количество столбцов матрицы A:");
scanf("%d",&M);
int** A;
A= new int*[N];
//Ввод матрицы
int i,j;
for (i=0;i<N;i++)
{ A[i]=new int[M];
   for(j=0;j<M;j++)
    {
     scanf("%d",&A[i][j]);
    }
}
//Вывод введенной матрицы
printf("Введенная матрица:");
for (i=0;i<N;i++)
{
   A[i]=new int[M];
   for(j=0;j<M;j++)
    {
     printf("%d\t",&(A[i][j])); //Смотреть сюда
    }
  printf("\n");
}
delete []A;
return 0;
}


Банальнейшая ошибка, а вы тут в сторону резко ушли
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

scanf считывает символы из потока ввода до первого символа пробела, табуляции, символа новой строки и т.д. для каждого адреса.

и до первого несоответствия вводимого символа спецификации формата, начинающейся с %
то есть если ты ввёл a, а там %f, она не будет ждать что там после a, там может стоять пробел или число ей без разницы scanf выйдет ничего дальше не читая

Если адресов больше чем 1, то функция продолжит считывать во второй адрес

вот именно что нет
она выйдет на a, не рассматривая пробел там идёт после или не пробел, и остальные адресы не будут использованы (то есть старые значения по ним сохранятся)

(не буквенно-цифровые символы останавливают считывание данных в один адрес)

по всем остальным адресам, функция завершит работу не дочитывая символы из ввода (и соответственно не сохраняя ничего, т.к. сохранять то нечего)

Если считанный символ не соответствует спецификатору, scanf возвращает NULL.

не, функция возвращает ноль, а NULL это нулевой указатель, при ошибке чтения функция возвратит EOF
NULL возвратит функция типа strcpy, т.к. она возвращает char * (типа указателю указателевое)

Поэтому a 2 3 остановит программу, а 1 b 3 запишет в переменную значение 1.

я имею в виду когда сразу по три числа пишешь через пробел и программа их сохраняет
конечно, если вводить по одному и три раза нажимать энтер а не ввести три через пробел и один раз нажать энтер, то число 1 сохранится во втором случае, но зачем это надо, она же всё равно встречает b, ещё 300 раз его читает(показательный исходник прилагаю), потом выходит из этого чтения и раз такие дела, то завершает программу

Код: Выделить всё

#include <stdio.h>

main()
{
    int i;
    double n = 0.0;

    for (i = 0; i < 10; i++)
        scanf("%lf", &n);
    printf("%f\n", n);
    printf("%d\n", i);
    return 0;
}


вывод программы

Код: Выделить всё

[guest@localhost tmp]$ ./t
a
0.000000
10
[guest@localhost tmp]$ ./t
1 2 3 4 5 6 7 8 9 10.1
10.100000
10
[guest@localhost tmp]$


ещё добавлю
Буква нигде не появится, как только будет считана буква, программа завершится

я имею в виду когда мы ввели букву, цикл продолжает её читать и читать пока все свои итерации не исчерпает, потом проверяет результат последней (ну там было очередное чтение 300-ое этой буквы) и убеждаясь что scanf её не сохранил т.к. status == нулю, выполняет return 0 из программы, символизируя этим самым, что программа закончилась успешно
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

JeIF

Код: Выделить всё

printf("%d\t",&(A[i][j])); //Смотреть сюда

он как сохранял так и выводит, а зачем адресы выводить ?
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

Да, ноль, NULL - нулевой указатель, вы правы.

выполняет return 0 из программы, символизируя этим самым, что программа закончилась успешно

Не обязательно. exit(0) символизирует, что программа закончилась успешно.
Если мы прервали ввод данных, это не значит, что программа закончилась неудачно.

Вы привязались к какой-то ерунде. Это сделано лишь для того, чтобы можно было прервать программу не жёстко, а по человечески (пользователю надоело вводить значения в массив, он ввёл символ и вышел из программы и не важно, сколько раз там программа читает этот символ.)

Вообщем у вас талант ходить кругом да около...

Посмотрев ещё раз на код, я заметил, что проверка на статус оказалась вне внутреннего цикла. Теперь я понял, что вы имели ввиду.
Сразу об этом сказать никак нельзя было, надо было 5 постов о замечательной функции scanf написать? :)

Код: Выделить всё

  for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            status = scanf("%lf", &array[i][j]);

             if (status!=1)
             {
                  free(array);
                  return 0;
             }
        }
    }
Тайною мир держится
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

я там ошибся по поводу strcpy, т.к. она NULL не возвращает, хотя могла бы
но вот strstr отличный пример, она возвращает char *, но когда не находит подстроку возвращает NULL
они похожи 0 и NULL, но имеют разный тип (потому в любой операции будет происходить неявное приведение типа, что лишне)

Не обязательно. exit(0) символизирует, что программа закончилась успешно.

exit(0) это вызов функции exit, которая находится в стандартной библиотеке
здесь от "успешности" только 0, т.к. он возвращается в операционную среду, запустившую программу

Код: Выделить всё

[guest@localhost tmp]$ ls
1  code  for_funcs  music  save  test.c
[guest@localhost tmp]$ find . -name test.c
./test.c
[guest@localhost tmp]$ echo $?;
0
[guest@localhost tmp]$ find . -name none
[guest@localhost tmp]$ echo $?;
0
[guest@localhost tmp]$

здесь показан пример для чего нужно возвращать в операционную среду однозначное значение об успешном или неуспешном завершении программы
у grep это лучше получается

Код: Выделить всё

[guest@localhost tmp]$ echo abc | grep a
abc
[guest@localhost tmp]$ echo $?
0
[guest@localhost tmp]$ echo abc | grep d
[guest@localhost tmp]$ echo $?
1
[guest@localhost tmp]$


Вы привязались к какой-то ерунде.

вот из-за этой ерунды я grep в скриптах использую а find нет, хотя мог бы

Код: Выделить всё

free(array);

ага, повторяем ошибки, ладно это я спишу на то что ты/вы просто не дошёл до функций выделения и освобождения памяти, потому не знаешь как там надо сделать

Код: Выделить всё

int tmp;

    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            status = scanf("%lf", &array[i][j]);

             if (status!=1)
             {
                  for (tmp = 0; tmp < n; tmp++)
                    free(array[tmp]);
                  free(array);
                  return 0;
             }
        }
    }


Код: Выделить всё

int tmp;

for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            if (!scanf("%lf", &array[i][j])) {
                for (tmp = 0; tmp < n; tmp++)
                    free(array[tmp]);
                free(array);
                return 0;
            }
        }
    }


два варианта тебе посылаю, ещё обратил внимание что ты там то return 0 то exit(EXIT_FAILURE) используешь, в чём логика ?
я имею в виду почему не exit(EXIT_SUCCESS) вместо return 0, или не return 1 вместо exit(EXIT_FAILURE)

update:
всё таки сделаем как было вначале, т.к. отрицание не учитывает разницы между 1 и EOF

Код: Выделить всё

int tmp;

for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            if (scanf("%lf", &array[i][j]) != 1) {
                for (tmp = 0; tmp < n; tmp++)
                    free(array[tmp]);
                free(array);
                return 0;
            }
        }
    }

на всякий случай != 1, т.к. в будущем EOF может быть изменено на какое-нибудь большое положительное число, тогда условие <= 0 перестанет работать
Спасибо сказали:

JelF
Сообщения: 62
ОС: Debian

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение JelF »

Чтото я притормаживаю. Работал на Turbo C под дос, всегда printf требовал аргументов-указателей. В C++ я его почти не использовал, но когда использовал он всегда просил указателей.
Спасибо сказали:

Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Iroln »

Folderx
Такое ощущение, что ты читаешь только свои посты.

ага, повторяем ошибки, ладно это я спишу на то что ты/вы просто не дошёл до функций выделения и освобождения памяти, потому не знаешь как там надо сделать

Про free я же сразу написал, что там ОШИБКА. Я прекрасно про неё знаю. free надо вызвать m раз для каждого вектора из n элементов!
В пример закралась ошибка, так как, когда я его писал по запарке сделал возвращение памяти как для вектора. Потом было лень исправлять пример, вот и всё.

два варианта тебе посылаю, ещё обратил внимание что ты там то return 0 то exit(EXIT_FAILURE) используешь, в чём логика ?
я имею в виду почему не exit(EXIT_SUCCESS) вместо return 0, или не return 1 вместо exit(EXIT_FAILURE)

Если не хватило памяти, то это значит, что программа отработала неудачно, поэтому EXIT_FAILURE. EXIT_FAILURE, а не 1 для переносимости программы.\

В последнем примере у тебя всё так, но вот по поводу free меня терзают смутные сомнения :).
Ты освобождаешь ту память, в которую до этого записал значения, но ведь выделенная до этого память для каждого вектора из n элементов в каждом элементе вектора m не будет возвращена.
Может всё же надо делать так:

Код: Выделить всё

for (t=0; t<m; i++)
{
    free(array[t]); // Возвращаем память для каждого вектора из n элементов, т.к array[t] указатель на этот вектор
}
free(array); // Возвращаем память для вектора из m элементов
Тайною мир держится
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

JelF
Чтото я притормаживаю. Работал на Turbo C под дос, всегда printf требовал аргументов-указателей.

не, это вот с чем связано
когда scanf пытается сохранить введённое, она читает введённое и сохраняет в переменную; а как она сохранит в переменную, это же функция, переменная находится в main а функция пытается в эту переменную сохранить
в сишнике нельзя переменную передать в функцию, можно только копию её значения передать (передача по значению) или при приёме переменной сразу получить адрес (передача по ссылке)
то есть работа внутри функции scanf будет происходить с помощью адреса в любом случае
таким образом переменная, принадлежащая main, получит новое значение
а вот printf, читает переменные и, прочитав их, выводит на экран интерпретацию, но чтобы читать, достаточно в функцию printf передать копию значения переменной (передача по значению)
единственное когда в printf нужно передавать адрес это когда надо подсчитать количество выведенных символов к текущему моменту

Код: Выделить всё

int n;
printf("123%n", &n);

тогда в printf передаётся адрес переменной n и в ячейку с этим адресом сохраняется количесто выведенных символов до %n, т.е. 3

Iroln
Если не хватило памяти, то это значит, что программа отработала неудачно, поэтому EXIT_FAILURE. EXIT_FAILURE, а не 1 для переносимости программы.\

а return 0 тогда зачем ? ведь для переносимости программы нужно exit(EXIT_SUCCESS)

Может всё же надо делать так:

да, я там перепутал, показалось что ты два раза указатели выделял для строк и для столбцов
выделяется массив указателей на строки, в каждый из них записывается указатель на выделенный массив элементов, потому надо освободить каждый из массивов элементов (каждую строку), а потом массив указателей на строки

Код: Выделить всё

int tmp;

for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            printf("(%d,%d) ", i+1, j+1);
            if (scanf("%lf", &array[i][j]) != 1) {
                for (tmp = 0; tmp < m; tmp++)
                    free(array[tmp]);
                free(array);
                return 0;
            }
        }
    }

короче я думал наоборот, что столбцы это указатели, и первичный указатель второго порядка относится к ним
Спасибо сказали:

JelF
Сообщения: 62
ОС: Debian

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение JelF »

) а меня так научмлм
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

t.cpp

Код: Выделить всё

#include <cstdio>

main()
{
    void change(int *, int &);
    int n1, n2;

    n1 = n2 = 0;
    printf("%d %d\n", n1, n2);
    change(&n1, n2);
    printf("%d %d\n", n1, n2);
    return 0;
}

void change(int *a, int& b)
{
    *a = 2;
     b = 3;
}

для C++ работает для C нет, я вроде читал что там поддерживается передача по ссылке

тут вывод

Код: Выделить всё

[guest@localhost tmp]$ g++ t.cpp -o t
[guest@localhost tmp]$ ./t
0 0
2 3
[guest@localhost tmp]$

т.е. n2 меняется не смотря на то, что передаётся напрямую
Спасибо сказали:

JelF
Сообщения: 62
ОС: Debian

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение JelF »

на С надо указатели
Спасибо сказали:

Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение Folderx »

где-то читал вроде, что есть ещё, найти не могу, так что может и есть а может и нету
Спасибо сказали:

uRRRa
Сообщения: 1
ОС: Windows 7

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение uRRRa »

а почему не так?

Код: Выделить всё

int i,a,b,z,k;
printf("кол-во столбцов,кол-во строк\n");
scanf("%d,%d",&a,&b);
float **y=new float* [b];
    for(i=0;i<b;i++)
        y[i]=new float[a+b];
for(l=1,z=0;l<b+1;l++,z++)
    {
        printf("\n \t\t\t\tstroka %d\n",l);
    for(i=0,k=1;i<a,k<a+1;i++,k++)
    {printf("vvedite koef pri x%d \n",k);
    scanf("%f",&y[z][i]);
    }
for(k=0;k<b;k++)                        //вывод
    {
        printf("\n");
        for(i=0;i<a+b;i++)
        printf("%f ",y[k][i]);

вроде работает, но есть подозрения что имеются подводные камни...
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ввод и вывод двумерного(динамического) массива.

Сообщение drBatty »

uRRRa писал(а):
07.12.2011 13:32
вроде работает, но есть подозрения что имеются подводные камни...

1. код оформите в [тегах], читать невозможно
2.
uRRRa писал(а):
07.12.2011 13:32
y[i]=new float[a+b];

зачем a+b? почему не b?
3. вы думаете такого варианта не было чуть выше по теме?
4. вообще-то мы всё решили 3 года назад.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: