Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Наибольшее четное без массива

Ответить
Настройки темы
C/C++ - Наибольшее четное без массива

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


С клавиатуры вводится последовательность целых чисел. Определить наибольшее среди четных чисел. Признак конца ввода - 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]

Отправлено: 20:18, 16-04-2013

 

Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


lerenia, ошибка в том, что Вы берете из потока ввода нуль и не завершаете цикл, а продолжаете его. Нужно добавить код:
Код: Выделить весь код
if (k == 0){
    break;
}
Догадайтесь, куда?

Отправлено: 21:24, 16-04-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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();
}
Если предложите более разумный код, буду благодарна))

Отправлено: 14:05, 17-04-2013 | #3


Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


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", ¤t);     
        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;
}

Последний раз редактировалось deviance, 17-04-2013 в 15:19.


Отправлено: 15:13, 17-04-2013 | #4


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:18, 18-04-2013 | #5


Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:27, 18-04-2013 | #6


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:27, 19-04-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Наибольшее четное без массива

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Samsung получил наибольшее количество мобильных патентов в 2012 году OSZone News Новости информационных технологий 0 29-03-2013 20:30
2008 - Создание Raid массива без потери данных NikiWin Windows Server 2008/2008 R2 7 24-02-2011 07:58
Вторничный патч Microsoft за август 2010: наибольшее количество бюллетеней в истории! OSZone News Новости и события Microsoft 0 06-08-2010 01:30
[решено] Ширина линии в GIMP - четное количество пикселей Vadikan Цифровое изображение 4 03-07-2009 11:10
ребут компьютера без причины, без Bsod, без ошибок не ламер Непонятные проблемы с Железом 17 23-04-2008 13:59




 
Переход