Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2008, 17:39   #1
Crasty
Пользователь
 
Регистрация: 01.11.2008
Сообщений: 35
По умолчанию объявление массива

Можно ли на С объявить массив если заранее не знаешь его размерность?
(Допустим я хочу написать программу в которой я задаю с клавиатуры размер и значения массива и вывожу их на экран.)
Crasty вне форума Ответить с цитированием
Старый 01.11.2008, 18:13   #2
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Для двумерного:
Код:
int mas[100][100];
int n,m;                                                             
cout<<"Vvedite kol-vo strok: "<<endl;                                       
cin>>n;                                                                                          
cout<<"Vvedie kol-vo stolbtsov: "<<endl;                                  
cin>>m;                                                                                     
cout<<"Vvedite matricu: "<<endl;                                              
for (i=0; i<n; i++)                                                                 
for (j=0; j<m; j++)                                                              
cin>>mas[i][j];
Для одномерного:
Код:
int n; 
int mas[100];  
cout<<"Vvedite razmer massiva: "<<endl;  
cin>>n;   
cout<<"Vvedite elementi massiva: "<<endl;  
for (i=0; i<n; i++)  
cin>>mas[i];
Жека:) вне форума Ответить с цитированием
Старый 02.11.2008, 08:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Жека, совсем не то, о чём спрашивал автор темы.. ;-(
ну, введу я в Вашу программку 1000... и что будет с программой?!
автор спрашивал про динамические массивы, память под которые выделяется только в процессе работы программы!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.11.2008, 20:06   #4
Crasty
Пользователь
 
Регистрация: 01.11.2008
Сообщений: 35
Хорошо

#include<stdio.h>
#include<conio.h>
main()
{
char ch;
int size, i, j, a, b;
int *L;
printf("введите количество строк и столбцов\n");
scanf("%d %d", &a, &b);
size=a*b;
L=malloc(size*sizeof(int));
printf("введите элемнты\n");
for(i=0; i<a; i++)
{
for(j=0; j<b; j++)
scanf("%d", (L+(i+j)));
}
for(i=o; i<a; i++)
{
for(j=0; j<b; j++)
printf("L[%d][%d]=%d\n", i, j, *(L+(i+j)));
}
printf("выход q\n");
for(;
{
ch=getchar();
if(ch!='q')
printf("введите q\n");
else break;
}
}
Больщое спасибо за то что вы откликнулись.
Это программа которую я написал перед тем как разместить на вашем форуме свой вопрос. Она действительно способна создать и заполнить две произвольные матрицы, но к сожалению она не сможет перемножить их (приведенный пример первая часть).
Так как я не имею возможности динамически распределить её элементы ввиде отдельных столбцов и (или) строк, чтобы потом перемножить их по мат. правилам(строка на столбец).
Возможно мне следует выбрать другой подход???
Crasty вне форума Ответить с цитированием
Старый 03.11.2008, 20:36   #5
Crasty
Пользователь
 
Регистрация: 01.11.2008
Сообщений: 35
По умолчанию

Прошу прощения, но я ещё раз протестировал свою программу и обнаружил, что она не правильно считывает вводимые значения. Если задать одну строку и n-е кол-во столбцов, то всё вроде бы впорядке, но
если задать больше одной строки начинает глючить. Не знаю почему?
Crasty вне форума Ответить с цитированием
Старый 03.11.2008, 20:47   #6
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Цитата:
Код:
L=malloc(size*sizeof(int));
Абсолютно неверно, malloc по умолчанию возвращает void!
Нужно писать так
Код:
L=(int*)malloc(size*sizeof(int))
Цитата:
Так как я не имею возможности динамически распределить её элементы ввиде отдельных столбцов и (или) строк
Почемуже неможно, можно:
Код:
int **l;
l=(int**)malloc(sizeof(int)*n);
for(int i=0;i<n;i+=1)
l[i]=(int*)malloc(sizeof(int)*m)
где n-количество строк, m-количество столбцов, причем есть возможность создавать массивы где в каждой строке может быть разное количество елементов.
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 03.11.2008, 21:17   #7
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Цитата:
Прошу прощения, но я ещё раз протестировал свою программу и обнаружил, что она не правильно считывает вводимые значения. Если задать одну строку и n-е кол-во столбцов, то всё вроде бы впорядке, но
если задать больше одной строки начинает глючить. Не знаю почему?
Программа вобще не должна запускатся, куча ошыбок!
Код:
L=malloc(size*sizeof(int));
1 ошыбка, я писал выше как нужно правильно писать
Код:
for(i=o; i<a; i++)
Без коментариев, сдесь не сложно догадатся что не так написано!
Код:
for(;;
Без коментариев
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 05.11.2008, 17:18   #8
Crasty
Пользователь
 
Регистрация: 01.11.2008
Сообщений: 35
По умолчанию

Спасибо за исчерпывающий ответ. Все предельно ясно и понятно, а вот на счёт оператора for(;;- он должен выглядеть вот так for(;. И вообще я сам толком не понимая как он работает. Списал его из учебника.
Crasty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объявление множества BESS Общие вопросы Delphi 7 07.08.2008 15:24
Можно ли собственными силами установить на сайт форму добавить объявление? oio1 Помощь студентам 1 23.04.2008 08:02
Объявление собственной глобальной процедуры Gorin Общие вопросы Delphi 11 06.11.2007 17:49
Как изменить цвет шрифта кнопки + объявление OnClick Yury Общие вопросы Delphi 7 04.05.2007 04:55