PDA

Показать полную графическую версию : Наибольшее четное без массива


lerenia
16-04-2013, 20:18
С клавиатуры вводится последовательность целых чисел. Определить наибольшее среди четных чисел. Признак конца ввода - 0

Среди положительных чисел у меня все нормально, а вот если вводить: 3,7,-4,-2 0 выводится 0(( а должно вывестись -2

# include <math.h>
int main()
{
setlocale(LC_CTYPE, "");
int k,l,max;
l=0;
printf("Введите цифры");
while (k!=0)
{
scanf("%i", &k);

if ((k%2)==0)
{ l=1;
max=k;
if (l)
{
if (max<k)
{ max=k; }
}}
}

printf("Максимальное четное число=%i",max);

getch();
}

deviance
16-04-2013, 21:24
lerenia, ошибка в том, что Вы берете из потока ввода нуль и не завершаете цикл, а продолжаете его. Нужно добавить код:
if (k == 0){
break;
}

Догадайтесь, куда?

lerenia
17-04-2013, 14:05
deviance, промучаясь вчера еще часик я все таки добилась чего хотела) и кстати без break; не люблю его использовать так как всегда путаюсь с ним в цикле)
вообщем я решила проблему так:

#include <stdio.h>
#include <conio.h>
# include <locale.h>
# include <math.h>
int main()
{
setlocale(LC_CTYPE, "");
int k,l,max;
printf ("Введите цифры:\n");
scanf("%i",&k);
l=0;
while (k!=0)
{
if ((k%2)==0)
{
l=1;
if (l==1)
{
max=k;
l++;
}
else
{
if (k>max) max=k;
}
}
scanf("%i",&k);
}
if (l=0)
printf("Не введено ни одного чётного числа.\n");
else
printf("Максимальное четное число=%i",max);

getch();
}


Если предложите более разумный код, буду благодарна))

deviance
17-04-2013, 15:13
lerenia, Ошибка 1:

if (l=0)
printf("Не введено ни одного чётного числа.\n");Выполняется не сравнение, а присваивание. Сообщение "Не введено ни одного чётного числа" не будет показано никогда.

Ошибка 2:

if ((k%2)==0)
{
l=1;
if (l==1)
{
max=k;
l++;
}
}При таком алгоритме наибольшим четным всегда будет последнее четное. Проверить можно на тестовых данных: -2 -990 0Под катом одно из решений:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <limits.h>

int main()
{
int max = INT_MIN;
int current = 0;
const int term_value = 0;
int at_least_one_even_got = 0;

setlocale(LC_ALL, "");
printf("Введите цифры (по одной в строке):\n");

do {
scanf("%i", &current);
if ( current == term_value){
break;
} else if (current % 2 == 0 && max < current){
at_least_one_even_got = 1;
max = current;
}
} while (1);

if (at_least_one_even_got == 0){
printf("Не введено ни одного чётного числа\n",max);
} else {
printf("Максимальное четное число: %i\n",max);
}
system("pause");
return 0;
}

lerenia
18-04-2013, 18:18
deviance, решение внушительно) если честно половину из него не поняла) вроде бы задачка простенькая и такое громоздкое решение) что ж пойду разбираться

deviance
18-04-2013, 18:27
lerenia, у меня 33 строки, а у Вас - 35. У кого внушительнее?

lerenia
19-04-2013, 18:27
deviance,
я не про количество строк, а про саму логику) но я уже разобралась)




© OSzone.net 2001-2012