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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2010, 22:50   #1
agronomchek
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 19
По умолчанию Ввод массива. Введенные значение не сохраняются.

Вот фрагмент программы. С клавиатуры должны вводиться кол-во элементов массива и сами элементы. Потом посредством указателей нужно размер и сам массив передать в главную функцию. Но при вводе значений элементов массива записи не происходит, сплошные нули... не могу понять из-за чего это...
Код:
void f1(float *a, int *m)
{
     int i, k;
     printf("\nPlease enter m - size of array: "); scanf("%d", m);
     k=*m;
     a=(float*)malloc(k*sizeof(float));
     if (!a) 
     {
               printf("\nRequire more memory!\n"); 
               system("pause");
               exit(1);
     }
     for (i=0; i<k; i++)
     {
         printf("\n Enter a[%d]= ",i);
         scanf("%f", (a+i));
     }
}

Последний раз редактировалось agronomchek; 27.08.2010 в 23:53.
agronomchek вне форума Ответить с цитированием
Старый 27.08.2010, 23:39   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

поробуй так
Код:
float* f1(float *a, int& m)
{
     int i, k;
     cout << "\nPlease enter m - size of array: " << endl;
     cin >> m;
     k = m;
     try { a = new float[k];}
     catch (...)
     {
               printf("\nRequire more memory!\n"); 
               system("pause");
               exit(1);
     }
     for (i=0; i<k; i++)
     {
         printf("\n Enter a[%d]= ",i);
         cin >> *(a + i);
     }
    return a;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.08.2010, 23:42   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Хотя в принципе тебе и возвращать ничего не надо массив полюбому изменится
так делаем процедуру
Код:
void f1(float *a, int& m)
{
     int i, k;
     cout << "\nPlease enter m - size of array: " << endl;
     cin >> m;
     k = m;
     try { a = new float[k];}
     catch (...)
     {
               printf("\nRequire more memory!\n"); 
               system("pause");
               exit(1);
     }
     for (i=0; i<k; i++)
     {
         printf("\n Enter a[%d]= ",i);
         cin >> *(a + i);
     }
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.08.2010, 23:43   #4
agronomchek
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 19
По умолчанию

эм...это Си? извините, я не уточнил. Это учебное задание на языке Си.
agronomchek вне форума Ответить с цитированием
Старый 27.08.2010, 23:52   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
void f1(float *a, int& m)
{
     int i, k;
     printf("\nPlease enter m - size of array: ");
     scanf("%d", &m);
     k = m;
     try { a = new float[k];}
     catch (...)
     {
               printf("\nRequire more memory!\n"); 
               system("pause");
               exit(1);
     }
     for (i=0; i<k; i++)
     {
         printf("\n Enter a[%d]= ",i);
         scanf("%f", *(a + i));
     }
}
а try и catch помоему и в с есть! Скомпиль, проверь, и отпишись
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 28.08.2010, 00:09   #6
agronomchek
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 19
По умолчанию

компилятор ругается на try и catch,
<"try" undeclared (first use in this function)> и так далее.
да и на подобное объявление параметров функции тоже огрызается.
agronomchek вне форума Ответить с цитированием
Старый 28.08.2010, 00:17   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну тогда можно вот так попробывать:
Код:
void f1(float *a, int& m)
{
     int i, k;
     printf("\nPlease enter m - size of array: ");
     scanf("%d", &m);
     k = m;
     if ((malloc(k*sizeof(float))) == NULL)
     {
               printf("\nRequire more memory!\n"); 
               system("pause");
               exit(1);
     }
     a = new float[k];
     for (i=0; i<k; i++)
     {
         printf("\n Enter a[%d]= ",i);
         scanf("%f", *(a + i));
     }
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 28.08.2010, 00:37   #8
agronomchek
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 19
По умолчанию

нет, это все еще какая-то дикая смесь языков...компилятор не узнает эти команды.
agronomchek вне форума Ответить с цитированием
Старый 28.08.2010, 01:10   #9
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

На С я не пишу, но попробую помочь =)
Код:
void f1(float *&a, int* m){
	int size = 0;
	printf("\nPlease enter m - size of array: ");
	scanf("%d", &size);
	
	a = (float*)(malloc(size*sizeof(float)));
	if (!a){
		printf("Error\n"); *m = 0; return;
	 }
	 
	 for (int i = 0; i < size; ++i){
		 printf("\n Enter a[%d]= ",i);
		 scanf("%f", &a[i]);
	 }
	 
	 *m = size;
}


int main(){
	float *Array = NULL; int size;
	f1(Array,&size);
	for(int i = 0; i < size; ++i)
		printf("%f ", Array[i]);
	return 0;
}
Можно попробовать еще вот такую реализацию:
Код:
float *f1(float *a, int* m){
	int size = 0;
	printf("\nPlease enter m - size of array: ");
	scanf("%d", &size);
	
	a = (float*)(malloc(size*sizeof(float)));
	if (a){
		 for (int i = 0; i < size; ++i){
		 printf("\n Enter a[%d]= ",i);
		 scanf("%f", &a[i]);
		 }
		 *m = size;
	}else{
		*m = 0;
	}
	return a;
}


int main(){
	float *Array = NULL; int size;
	Array = f1(Array,&size);
	for(int i = 0; i < size; ++i)
		printf("%f ", Array[i]);
	return 0;
}
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶

Последний раз редактировалось dxdy; 28.08.2010 в 01:16.
dxdy вне форума Ответить с цитированием
Старый 28.08.2010, 01:30   #10
agronomchek
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 19
По умолчанию

а вы компилировали у себя это?
потому что у меня выдает ошибку сегментации.
а то может у меня просто компилятор - дебил))
хотя... DevC++ вроде считается неплохим)
agronomchek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Введенные данные в DBGridEh не сохраняются prorock БД в Delphi 11 21.04.2011 14:35
Delphi7. Ввод массива. Olga67_net Помощь студентам 2 11.05.2010 14:45
Visual Prolog осуществляет ввод с клавиатуры номера элемента и выводит значение для последовательности Дмитрий_М Помощь студентам 0 29.12.2009 14:43
гибкий ввод массива Ananim-Pbl6ak Паскаль, Turbo Pascal, PascalABC.NET 3 14.05.2009 22:42
C++ Builder 6, ввод массива XyMan Помощь студентам 2 25.04.2009 19:18