Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 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
И более того задание стоит ужасно...
Требуется создать динамический массив 15*15.


  int n=15; int m=15;
  int **iArray = new int *[n];  // ** - указатель на указатель
  for(int i=0;i<m;i++) iArray[i]=new int[m];


годится? :)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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
i используется внутри цикла без объявления
а что, это не считается?
...or(int i=0;i<...

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 18.01.07 05:05
Считается вот это
for(i=0; i<N; i++)
{

и это
for(i=1; i<N; i++) if(max<B[i];) max=B[i];

Ответить

Номер ответа: 8
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #8
Добавлено: 18.01.07 14:12
...or(int i=0;i<...

Всё правильно, это же объявление i тип int.

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #9
Добавлено: 18.01.07 17:08
Я непонятно что-то написал? Объявление переменной int i действительно только внутри цикла по стандарту.
for(int i = 1; i < 5; i++) cout << i << endl; // Нормально
cout << i; // А это - ошибка

То, что такой код компилируется в VC6, является грубейшим нарушением стандарта. К чести МС, в 2002 они это уже исправили.
Писать вот так:
for(int i = ...)
...
for(i = ...)

НЕЛЬЗЯ

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 18.01.07 17:42
Гм... Проверил - и правда компилится. Бред какой-то :)

Ответить

Номер ответа: 11
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #11
Добавлено: 19.01.07 05:31
Microsoft, фигли :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам