Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Наибольшее четное без массива (http://forum.oszone.net/showthread.php?t=258773)

lerenia 16-04-2013 20:18 2133958

Наибольшее четное без массива
 
С клавиатуры вводится последовательность целых чисел. Определить наибольшее среди четных чисел. Признак конца ввода - 0

Среди положительных чисел у меня все нормально, а вот если вводить: 3,7,-4,-2 0 выводится 0(( а должно вывестись -2
[code=cpp]
# 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();
}

[/code]

deviance 16-04-2013 21:24 2134019

lerenia, ошибка в том, что Вы берете из потока ввода нуль и не завершаете цикл, а продолжаете его. Нужно добавить код:
Код:

if (k == 0){
    break;
}

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

lerenia 17-04-2013 14:05 2134414

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 2134463

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 2135271

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

deviance 18-04-2013 18:27 2135280

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

lerenia 19-04-2013 18:27 2136004

deviance,
я не про количество строк, а про саму логику) но я уже разобралась)


Время: 06:38.

Время: 06:38.
© OSzone.net 2001-