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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный массив. Совпадение строки и столбца, и сумма строки с отрицательным элементом 
V
    Опции темы
krot100500
Дата 4.1.2012, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



урра мне дали еще времени)ЗЫ я увидел свои ошибки)
вот исправил ошибки) сделал так что функции комп и сум работали с массивом)
мояя ошибка была как раз в том что надо-было указать в параметрах не цикл а указатель на функцию ввода массива, и соответственно слегка подправить эти функции 
Код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#define SIZE 3
int** input()
{
    int **a;
    int i,j;
    a=(int**)malloc(SIZE*sizeof(int*));
    for(i=0; i<SIZE; ++i)
    {
       a[i]=(int*)malloc(SIZE*sizeof(int));
    }
    printf("vvedite element matrici\n");
    for(i=0; i<SIZE; ++i)
    {
    for(j=0; j<SIZE; ++j)
    {
        printf("a[%d][%d]=",i+1,j+1);
        scanf("%d",&a[i][j]);
    }
    }
    return a;
}
void comp(int **a)
{int j,i, raz=0;
 for( i=0;i<SIZE;++i)
 {for (j=0;j<SIZE;++j)
  {if (a[i][j]!=a[j][i]);
   else raz+=1;
    if (raz==SIZE)
    printf("sovpadeni'a v %d stroke i stolbce\n",i+1);
    }
    raz=0;
    }}
void sum(int **a)
{   int i,j, result=0, fex=0;
    for (i=0;i<SIZE;++i)
    {for (j=0;j<SIZE;++j)
    {result+=a[i][j];
     if (a[i][j]<0) fex=1;
    }
    if (fex==1) printf("otricatel'ni element est' v stroke %d summa elementov= %d\n",i+1,result);
    result=0;fex=0;
    }}
   void out(int **a)
{
    int i,j;
    printf("matrica\n");
    for(i=0; i<SIZE; ++i)
    {
    for(j=0; j<SIZE; ++j)
        printf("%8d",a[i][j]);
    printf("\n");
    }
}
int main()
{
    clrscr();
    int **a= input();
    out(a);
    comp(a);
    sum(a);
    int i;
    for(i=0; i<SIZE; ++i)
    {
      free(a[i]);
    }
    free(a);
    getch();
    return 0;
}


ЗЫ Кернигана и Ричи прочитал всего, но непонял)
Понял тока когда прочитал Шилдта и потыкался в тексте проги)

PM MAIL   Вверх
voral
Дата 4.1.2012, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

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



В строках 30 и 31. Что за наворот:
Код

if (a[i][j]!=a[j][i]);
   else raz+=1;

Возможно будет короче:
Код

if (a[i][j]==a[j][i])
   raz+=1;


Цитата(krot100500 @  4.1.2012,  16:43 Найти цитируемый пост)
ЗЫ Кернигана и Ричи прочитал всего, но непонял)

Так надо не на скорость и объем читать. Пока что то не понял не читаешь следующую главу. А разбираешься/читаешь непонятную до просветления.

PM MAIL WWW   Вверх
krot100500
Дата 4.1.2012, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



тоже вариант)но я как востпринял так и написал)
ЗЫ теперь похоже на истину?
и кстате спомощью ф-ии
Код

a=(int**)malloc(SIZE*sizeof(int*));

мы выделяем память под указатели на элементы массива так?
а
Код

a[i]=(int*)malloc(SIZE*sizeof(int));

выделяет память под сами элементы массива?

Добавлено через 1 минуту и 20 секунд
Цитата(voral @  4.1.2012,  17:14 Найти цитируемый пост)
Так надо не на скорость и объем читать. Пока что то не понял не читаешь следующую главу. А разбираешься/читаешь непонятную до просветления.

мне просто более понятно языком Шилдт'a *)
PM MAIL   Вверх
voral
Дата 9.1.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

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



Цитата(krot100500 @  4.1.2012,  21:43 Найти цитируемый пост)
и кстате спомощью ф-ии
Выделить всёкод C++
....
мы выделяем память под указатели на элементы массива так?
....
выделяет память под сами элементы массива?


Как ни странно в обоих случаях выделяем память под элементы массива. 
Но!
В первом случае элементы массива - это указатели на одномерные массивы.
Во втором случае - это значения типа int. 
 
По сути дела "двумерный" массив используемый в коде представляет из себя SIZE массивов элементов типа int (имеющих SIZE элементов). Плюс один массив элементов типа int* т.е. указателей  на те самые массивы int (имеющий SIZE элементов).


Естественно элементы массива о котором говориться непосредственно в задаче (т.е. не "вспомогательный" массив) хранятся только в памяти выделемой строкой которая приведена во второй цитате.

PM MAIL WWW   Вверх
krot100500
Дата 11.1.2012, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня вот и возникал вопрос) зачем нам нужна динамика если известно количество элементов*)
PM MAIL   Вверх
voral
Дата 11.1.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

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



все зависит от задачи.
PM MAIL WWW   Вверх
krot100500
Дата 11.1.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну так мы используем динамику когда, как правило неизвестно кол-во элементов) а тут задано что 8 на 8 ) и соответсвенно будет выделяться памяти под 64элемента типа инт

Добавлено через 5 минут и 15 секунд
*изначально неизвестно, и задается уже во время запуска.
PM MAIL   Вверх
voral
Дата 11.1.2012, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

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



учебные задачи не в счет ;)
Точнее смотря, что изучаете разбирая данную задачу. Если динамические массивы сгодится, если циклы то можно и избавиться от динамического выделения.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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