Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный динамический массив, помощь 
:(
    Опции темы
civilis1982
Дата 19.1.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Код

Привет, ребят. Посмотрите пожалуйста что тут не так? 
В программе необходимо описать динамический массив вещественных чисел размером N*N, затем запросить и ввести с клавиатуры натуральное значение N<15 (необходимо повторять ввод до тех пор, пока не будет введено корректное значение).
         После этого следует заполнить массив согласно условию, описанному у меня в функции double A (int i, int j).
Затем найти сумму каждого столбца. Среди полученных сумм найти максимальное значение.
 Вроде все правильно, но при компиляции в строке:  for (int j=0, j<N, j++) Ar[i][j]=A(i, j);  ошибка  invalid indirection. Как это исправить? 
Вот код программы:

#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;
 double *B;
 double max;
 clrscr();
    do
     {
       printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
       scanf("%u", &N);
       Ar=(double*)malloc(N*N*sizeof(double));
       B=(double*)malloc(N*N*sizeof(double));
     }
    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]);
        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]);
       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();
 free(Ar);
 free(B);
}
 
 smile 
PM MAIL   Вверх
W0LF
Дата 19.1.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: нет
Всего: 20



double *Ar - это одномерный масив

Добавлено @ 19:32 
Если хошь двумерный, то так - 
Код

double ** Ar;

Ar = new double*[n];
for (int i=0; i<n; i++){
 Ar[i] = new double[n];
}


В итоге получим массив размером nxn
Вот тебе четырехмерный - 
Код

void function(int****& mas, int size){
    mas = new int***[size];
    for(int i=0;i<size;i++){
        mas[i] = new int**[size];
        for(int j=0;j<size;j++){
          mas[i][j] = new int*[size];
          for(int k=0;k<size;k++){
            mas[i][j][k] = new int[size];
          }
        }

    }
    mas[0][1][2][3] = 5;
};




--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
civilis1982
Дата 19.1.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Это BC 3.1    Без всяких там "new"
PM MAIL   Вверх
FelikZ
  Дата 19.1.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Попробуй заменить:
Код

void main (void)
{
 int N;
 double *Ar;
 double *B;
 double max;
 clrscr();
    do
     {
       printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
       scanf("%u", &N);
       Ar=(double*)malloc(N*N*sizeof(double));
       B=(double*)malloc(N*N*sizeof(double));
     }

На:
Код

 int N;
 double **Ar;
 double **B;
 double max;
 clrscr();
    do
     {
       printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
       scanf("%u", &N);
       Ar=(double*)malloc(N*sizeof(double));
       B=(double*)malloc(N*sizeof(double));
       for(int i=0;i<N;i++)
       {
          Ar[i] = (double*)malloc(N*sizeof(double));
          B[i] = (double*)malloc(N*sizeof(double));
       }
     }



--------------------
user posted image
PM WWW ICQ Skype   Вверх
civilis1982
Дата 19.1.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



[/code]
Вроде исправил но в строке    " for(int i=0; i<N; i++) B[j]+=Ar[i]; "   ошибка    "illegal use of floating point"  Как это исправить, подскажите пожалуйста?

#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;
 double *B;
 double max;
 clrscr();
    do
     {
        printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
        scanf("%u", &N);
        Ar=(double**)malloc(N*sizeof(double*));
        for (int i=0;i<N;i++)
        {
         Ar[i]=(double*)malloc(N*sizeof(double));
        }
        B=(double*)malloc(N*sizeof(double));
     }
    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]);
        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];
        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();
 free(Ar);
 free(B);
}
[code]
PM MAIL   Вверх
FelikZ
Дата 19.1.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



double *B;
на:
double **B;


--------------------
user posted image
PM WWW ICQ Skype   Вверх
civilis1982
Дата 19.1.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Код

Нахрена, если "B" одномерный массив
ну исправил, нихрена не пашет.

#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;
 double **B;
 double max;
 clrscr();
    do
     {
        printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
        scanf("%u", &N);
        Ar=(double**)malloc(N*sizeof(double));
        B=(double**)malloc(N*sizeof(double));
        for (int i=0;i<N;i++)
        {
         Ar[i]=(double*)malloc(N*sizeof(double));
         B[i]=(double*)malloc(N*sizeof(double));
        }
     }
    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]);
        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];
        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();
 free(Ar);
 free(B);
}

PM MAIL   Вверх
FelikZ
Дата 19.1.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Окей, убери звезду и замени:
Код

for(int j=0; j<N; j++)
     {
        B[j]=0.0;
        for(int i=0; i<N; i++) B[j]+=Ar[i];
        printf("%7.2lf", B[j]);
     }

На:
for(int j=0; j<N; j++)
     {
        B[j]=0.0;
        for(int i=0; i<N; i++) B[j]+=Ar[j][i];
        printf("%7.2lf", B[j]);
     }

Это сообщение отредактировал(а) FelikZ - 19.1.2007, 20:17


--------------------
user posted image
PM WWW ICQ Skype   Вверх
Dov
Дата 19.1.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Держи.
Код
#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;
    double*  B;
    double   max;
    int      i, j;
    clrscr();

    do
    {
        printf("\nProgram makes array N*N (0<N<=15).\nEnter N:\n");
        scanf("%u", &N);
    }while(N > 15 || N < 1);

    Ar = (double**)malloc(N * sizeof(double*));
    B  = (double*)malloc(N * sizeof(double));
    for(i = 0; i < N; i++)
        Ar[i] = (double*)malloc(N * sizeof(double));

    for(i = 0; i < N; i++)
        for(j = 0; j < N; j++)
            Ar[i][j] = A(i, j);

    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
            printf("%7.2lf", Ar[i][j]);
        printf("\n");
    }

    printf("-------------------------------------------\n");
    for(j = 0; j < N; j++)
    {
        B[j] = 0.0;
        for(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();

    for(i = 0; i < N; i++)
        free(Ar[i]);
    free(Ar);
    free(B);
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Rockie
Дата 19.1.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(civilis1982 @  19.1.2007,  19:43 Найти цитируемый пост)
Это BC 3.1    Без всяких там "new"

Вот в следующий раз указывай это в посте. и в названии темы  smile 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Цивильный
Дата 20.1.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Спасибо!!!
PM MAIL   Вверх
Ustus
Дата 22.1.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.1.2007

Репутация: нет
Всего: 2



Цитата(Rockie @  19.1.2007,  22:05 Найти цитируемый пост)
Это BC 3.1    Без всяких там "new"

А куда это вдруг делся new из BC 3.1???
PM MAIL   Вверх
Rockie
Дата 22.1.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Ustus, за этим вопросом к автару поста =)




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0912 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.