Уважаемый Yurror, компилить придется в дев-с++ ибо нет времени с никсами разбираться в части Компиляции
...
что скажете?
Скажу, что вы ошиблись форумом =) Слегка. Здесь в основном компилят под Линукс. Ну с кем не бывает.
Скажу, что не стоило вам браться за работу которую не осилите.
Не надо было отбивать хлеб у толковыхх студентов кторые могут
такие задачки нерадивым двоешникам за сходную цену качественно и быстро сделать.
Скажу что проблемы у вас начиная со строчки using namespase std;
Скажу что main() это тоже не правильно
Скажу что float vvod вообще нифига не символьный тип чтобы в нем хранить результат getch()
Скажу что дальше еще смешнее =) просто бред.
Языки Си и С++ гораздо строже относятся к типизации чем php.
Хотя они и строже, но содержат автоматическое преобразование типов,
которое в данной программе играет с вами злейшую шутку =)
А еще вы не в состоянии корректно сформулировать ТЗ на разработку.
Собственно программа более чем недописана. Я бы даже сказал что это не программа, а случайный набор символов.
Дубль два: вы бы почитали что-нибудь по Си/С++ (только не в перемешку).
Выше лирика. К практике.
#include <stdio.h>
// OK, пусть будет язык Си
using namespase std; // это из языка С++, выкидываем.
//Странно что ошибку не выдало. наверное спасла организация заголовочников которые пишутся универсальными для Си/С++
// дальше надо написать
int main()
{
return 0;
}
// и подумать как должна строиться программа.
Вопервых, надо со стандартного ввода считать числа с плавающей точкой и запомнить в динамическом массиве (как я понял из ТЗ).
для чтения чисел с плавающей точкой из стандартного ввода используется функция scanf("%f", &value), где "%f" это формат ввода, value - это переменная типа float и &value передаё адрес этой переменной в функцию scanf. Как читаются числа со стандартного ввода вроде бы разобрались.
(Если по ТЗ scanf использовать запрещено, то это отдельная тема и вы точно не успели сделать работу =) )
Во вторых, надо хранить числа в динамической памяти. Есть два решения.
а) сначала спрашивать сколько чисел пользователь хочет ввести и заранее выделять нужное количество памяти
б) не спрашивать а читать до конца ввода (конца файла) и выделять память по мере надобности.
Подпункт б несколько сложнее и вариантов реализации очень много. так что рассмотрим пункт (а) как стандарт для студенческих поделок.
Для управления выделением памяти используются функции malloc/free (есть еще куча ф-ций, но эти самые популярные, опять же для студенческих поделок). Память перед использованием выделяется и инициализируется (второе не обязательно, но студентам я рекомендую). После использования освобождается.
Итак действия программы во время работы
1) спросить пользователя сколько чисел хотим обрабатывать
2) прочитать нужное количество чисел
3) вывести нужное количество чисел
пример
/* для подключения функций malloc()/free() и макроопределений EXIT_SUCCESS/EXIT_FAILURE */
#include <stdlib.h>
/* для подключения функций scanf()/printf() */
#include <stdio.h>
int main()
{
/* переменная "беззнаковое целое n" будет содержать количество обрабатываемых чисел */
unsigned int n;
/* переменная "беззнаковое целое i" будет счетчиком итераций (повторений цикла) */
unsigned int i;
/* переменная "указатель на дробное число" будет указывать на начало динамичкски выделеной памяти для n дробных чисел */
float *array;
/* обнулим n перед началом работы */
n = 0;
/* выводим на консоль приглашение пользователя к вводу */
printf("Введите количество обрабатываемых чисел: ");
/* считываем число с консоли */
scanf("%d", &n);
/* проверяем не обдурил ли нас пользователь */
if (n == 0) {
/* сообщаем что "ждедаи не пройдут" */
printf("Ошибка: Пользователь, видимо не желает вводить числа
");
/* выходим из программы с кодом завершения EXIT_FAILURE */
return EXIT_FAILURE;
}
/* Иначе работа продолжается и мы просим ОС выделить нам кусочек памяти */
/* Функция malloc() хочет чтобы ей передали размер требуемого блока в байтах */
/* так как float занимает больше байта и его размер зависит от приходи копилятора */
/* нам придётся расчитать нужное в данный момент количество байтов по формуле */
/* n*sizeof(float), где n - это количество чисел, а sizeof(float) - размер одного числа */
/* Функция malloc() возвращает указатель на void а нам нужен указатель на float */
/* поэтому между знаком = (присвоить) и именем функции мы даём копилятору подсказку */
/* о том как надо обращаться с выделенным кусочком памяти */
array = (float*)malloc(n*sizeof(float));
/* Проверяем что нам действительно выделили запрашиваемый кусочек */
if (array == NULL) {
/* Если не выделили, тогда сообщаем об ошибке выделения памяти */
printf("Ошибка: Программе не удалось выделить память для работы
");
/* и выходим из программы с кодом завершения EXIT_FAILURE */
return EXIT_FAILURE;
}
/* Иначе работы продолжается и мы в цикле вызываем функцию чтения */
/* числа с плавающей точкой, передаевая ей каждый раз новую ячейку памяти */
/* для сохранения в неё считанного числа */
for (i = 0; i < n; ++i)
scanf("%f", &array[i]);
/* Для контроля корректности ввода распечатаем числа полученые от пользователя */
/* Сначала выведем текстовое описание того что же выводит программа */
printf("Введены числа: ");
/* затем в цикле выведем числа обратно на консоль */
/* для этого вызывается фунция печати и ей каждый раз передается новое число из памяти */
for (i = 0; i < n; ++i)
printf("%f ", array[i]);
/* в конце строки печается переход на новую строку */
printf("
");
/* и освобождаем выделенную память */
free(array);
/* выходим из программы с кодом завержения EXIT_SUCCESS */
return EXIT_SUCCESS;
}
Пользователь решил продолжить мысль 02 Марта 2010, 07:17:44:
Решение задачи без коментариев
#include <stdlib.h>
#include <stdio.h>
void push_back(float **array, unsigned int *index, float value) {
unsigned int idx = *index;
*index += 1;
*array = (float *)realloc(*array, *index * sizeof(float));
(*array)[idx] = value;
}
void print_array(float *array, unsigned int index) {
unsigned int i;
for (i = 0; i < index; ++i)
printf("%f ", array[i]);
printf("\n");
}
int main()
{
unsigned int i1, i2;
float *a1, *a2;
i1 = 0;
i2 = 0;
a1 = NULL;
a2 = NULL;
while (!feof(stdin)) {
float value;
scanf("%f", &value);
if (value <= 1)
push_back(&a1, &i1, value);
else
push_back(&a2, &i2, value);
}
printf("A1: ");
print_array(a1, i1);
printf("A2: ");
print_array(a2, i2);
free(a1);
free(a2);
return EXIT_SUCCESS;
}