Страница: 1 |
Страница: 1 |
Вопрос: ДИНАМИЧЕСКИЙ ДВУМЕРНЫЙ МАССИВ
Добавлено: 15.01.07 17:55
Автор вопроса: Цивильный
Привет, друзья. Подскажите пожалуйста, что не правильно в этой программе. Требуется создать динамический массив 15*15.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <alloc.h>
//------------------------------------------------------
double A(int i, int j)
{
double a;
i++;
j++;
if(i>j) a=i-2*j; else if(i==j) a=i*j; else a=3*i+j;
return a;
}
//-------------------------------------------------------
void main (void)
{
int **N;
double Ar[15][15];
double B[15];
double max;
clrscr();
do
{
printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
int **Ar=(int**)malloc(N*N*sizeof(float));
scanf("%u", &N);
}
while(N>15 || N<1);
for(int i=0; i<N; i++)
for(int j=0; j<N; j++) Ar[i][j]=A(i,j);
for(i=0; i<N; i++)
{
for(int j=0; j<N; j++) printf("%7.2lf", Ar[i][j]);
printf("\n");
}
printf("-------------------------------------------\n");
for(int j=0; j<N; j++)
{
B[j]=0.0;
for(int i=0; i<N; i++) B[j]+=(Ar[i][j]);
printf("%7.2lf", B[j]);
}
max=B[0];
for(i=1; i<N; i++) if(max<B[i]) max=B[i];
printf("\nMax sum is %7.2lf\n", max);
printf("\nPress any key to exit...");
getch();
}
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 15.01.07 20:58
int **Ar=(int**)malloc(N*N*sizeof(float)); и причём тут оно?
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 16.01.07 10:55
Не совсем понятна логика построения программы. Зачем масив объявляется как статический? Почему не объявить его как поинтер и создавать, скажем, через new. Если нужно вывести хвосты на VB - лучше юзать SAFEARRAY. А вообще STL тебе жизнь упростит...
Номер ответа: 3
Автор ответа:
Цивильный
Вопросов: 33
Ответов: 15
Профиль | | #3
Добавлено: 16.01.07 16:47
Это язык СИ
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 16.01.07 23:53
И более того задание стоит ужасно...
int **iArray = new int *[n]; // ** - указатель на указатель
for(int i=0;i<m;i++) iArray[i]=new int[m];
годится?
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 17.01.07 16:32
В простом Си нету new
Стандарт не гарантирует, что sizeof(float) = sizeof(int), хотя это и так на vc2005.
Ошибок у тебя тут море, например, N объявлено как int **, а должно быть int; i используется внутри цикла без объявления (некоторые говнокомпиляторы это пропускают, но по стандарту так делать нельзя).
Номер ответа: 6
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #6
Добавлено: 17.01.07 17:22
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 18.01.07 05:05
Считается вот это
{
и это
Номер ответа: 8
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #8
Добавлено: 18.01.07 14:12
Всё правильно, это же объявление i тип int.
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 18.01.07 17:08
Я непонятно что-то написал? Объявление переменной int i действительно только внутри цикла по стандарту.
cout << i; // А это - ошибка
То, что такой код компилируется в VC6, является грубейшим нарушением стандарта. К чести МС, в 2002 они это уже исправили.
Писать вот так:
...
for(i = ...)
НЕЛЬЗЯ
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 18.01.07 17:42
Гм... Проверил - и правда компилится. Бред какой-то
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 19.01.07 05:31
Microsoft, фигли