|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Неправильно работает код. Не могу найти ошибку. |
|
C/C++ - [решено] Неправильно работает код. Не могу найти ошибку.
|
Новый участник Сообщения: 18 |
Добрый вечер!
Программа, на си, должна показывать минимальное введенное значение и суммировать элементы которые находятся между первым и последним позитивным элементом( не включая их). Минимальное значение находит правильно, а вот когда первое введенное значение равно 0 то сумму пишет тоже равную нулю. Помогите найти ошибку пожалуйста. Среда Dev-C++ |
|
Отправлено: 22:53, 22-10-2012 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать bangybam,
Цитата bangybam:
Можно это расписать пооперационно? s = s + первый элемент меньше нуля ИЛИ 10ый элемент меньше нуля... дальше я не понимаю. Это во первых. Во вторых, что с инициализацией переменных? Чему равно начальное значение s? Ну и в третьих -- min значение ищется с ошибкой. (Т.е. работает не во всех случаях). |
|
------- Отправлено: 23:52, 22-10-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
|
|
Отправлено: 02:40, 23-10-2012 | #3 |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать первое ferget объяснила правильно, второе там s=0, а третье объясни в чем ошибка в min.
|
Последний раз редактировалось bangybam, 23-10-2012 в 16:51. Отправлено: 10:31, 23-10-2012 | #4 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Доброго вечера всем!
У меня возникла такая проблема. Подскажите пожалуйста, как на с++ сделать так, что при запуске программы, она ожидала ввода имя файла, и если имя файла неверное, то выдавала бы ошибку об этом, и выдавала бы ошибку при нажатии "Enter". Заранее спасибо! |
|
Отправлено: 21:18, 23-10-2012 | #5 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать bangybam, хорошо. С циклом мне понятно. Т.е. понятно, какое действие выполняется. Смысл действия -- остается загадкой.
По заданию -- "сумма между первым и последним положительным элементом". (позитивный элемент -- надо будет взять на заметку :) ) Как в это участвует условие положительности первого ИЛИ последнего элемента, не понятно. Цитата bangybam:
Откуда взялась эта константа, и почему есть уверенность, что это самое большое число? Ответ собственно очевиден -- в отладочных целях. Но работает предложенный алгоритм не во всех случаях. --- Rulan_IR, Введение в языки программирования C и C++. Автор: Ю.Л. Кетков Глава 10: Работа с файлами. |
|
------- Отправлено: 08:29, 24-10-2012 | #6 |
Пользователь Сообщения: 107
|
Цитата bangybam:
Цитата bangybam:
Тебе надо так: Цитата bangybam:
bool start=FALSE; // флаг, показывающий, попадался ли уже среди элементов массива положительный, т.е. стоит ли СЛЕДУЮЩИЙ положительный прибавлять int last=0; // сюда занесём ПОСЛЕДНИЙ ПОЛОЖИТЕЛЬНЫЙ элемент массива, чтобы потом его вычесть из суммы for (int i=0; i<10; i++) { if(a[i]>0) { if (start==FALSE) start=TRUE; //если встретили первый ПОЛОЖИТЕЛЬНЫЙ (это не обязательно a[0]) элемент массива, то меняем флаг, //чтобы в будущем знать, что как минимум 1 положительный уже был else { s=s+a[i]; // иначе, если start уже равно TRUE, т.е. уже положительный был, то встреченный нами положительный a[i] надо прибавить к сумме last = a[i]; } s = s - last; printf("%i\n",s); |
|||
Отправлено: 10:11, 24-10-2012 | #7 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать bangybam, уточните задание: известно ли сколько элементов будет, или их количество задается во время работы, или оно не известно, но ввод заканчивается по какому-либо признаку.
Sidewalker, у вас есть ошибки: - нет определения минимального значения; - неправильное количество скобок; - отрицательные элементы в сумму они не попадут; |
Отправлено: 14:27, 26-10-2012 | #8 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Вот, примерно, то что вам нужно было сделать. Я умеренно растянул задачу, для наглядности. При желании это все можно уместить в несколько строк.
#include <iostream> #include <stdlib.h> #include <time.h> //Если вам сложно решить какую любо задачу, не усложняйте ее еще больше, //применяйте метод "разделяй и властвуй". Для наглядности, //разделю весь процесс на отдельные части, так больше итераций, но проще понимать код //потом, при желании, можно обьеденить, но ваша задача - изучение //деректива препроцессора, укажем количество элементов массива #define N 10 using namespace std; int main () { srand ( time(NULL) ); //будущий массив int a[N]; //итератор int i; //заполнение массива случайными числами от 49 до -50 //можете заменить ручным вводом for(i=0;i<N;i++) a[i]=rand()%100-50; //выведем массив for(i=0;i<N;i++) cout<<a[i]<<" "; cout<<endl; //находжение минимального эллемента int min = a[0]; for(i=1;i<N;i++) if (min>a[i]) min=a[i]; //нахождение первого положительного cout << "Минимальный элемент: " << min << endl; i=0; while((a[i]<0)&&(i<N)) i++; if (i==N) //мы не нашли положительного элемента { cout<<"Положительные элементы отсутствуют.";//сообщили return(-1);//вышли с кодом ошибки } else{ int first = i; //нахождение последнего положительного элемента int last = i; for (i=first;i<N;i++) if (a[i]>0) last=i; //первый элемент тоже можно было найти таки мже способом: //полный перебор с конца до начала, последный в списке - был бы первым в массиве //просто показал оба способа //теперь у вас есть два номера: начало и конец сумируемой области cout<<"\nЭлементы между крайними положительными:\n"; int sum =0; for (i=first+1; i<last; i++) //от следующего за первым, до последнего не включаяя его { sum+=a[i]; cout<<a[i]<<" "; } //в случае если элемент один, то first == last и сумма будет равна 0: cout << "\nСумма элементов между крайними положительными("<<a[first]<<" и "<<a[last]<<"): "<<sum<<"\n"; } return(0); } |
Отправлено: 17:21, 26-10-2012 | #9 |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать Извините за долгое отсутствие.
Error спасибо за помощь. Программа работает правильно. |
Отправлено: 15:36, 30-10-2012 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
драйвер видеокарты не работает или работает неправильно | Kilimnik Pasha | Металлолом | 6 | 24-04-2012 19:58 | |
помогите найти ошибку | igor7 | Программирование в *nix | 1 | 07-02-2011 09:55 | |
CMD/BAT - Не могу найти ошибку | Dremuk | Скриптовые языки администрирования Windows | 1 | 28-01-2010 15:35 | |
Разное - Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе | yulia_hoi | Программирование и базы данных | 6 | 08-01-2010 14:50 | |
JavaScript, не могу найти ошибку | modem | Вебмастеру | 3 | 01-03-2005 15:08 |
|