Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наибольшее четное без массива 
:(
    Опции темы
lerenia
Дата 16.4.2013, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.4.2013

Репутация: нет
Всего: нет



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


PM MAIL   Вверх
Crafty
Дата 16.4.2013, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Цитата(lerenia @  16.4.2013,  19:14 Найти цитируемый пост)
Среди положительных чисел у меня все нормально

Не работает, допустим [2, 4, 10, 8] считает что 8 самое большое.
k - неинециализирована и содержит мусор, а ты ее сравниваешь,
условие цикла правильнее будет сделать таким
Код

while (scanf("%i", &k) != EOF)


Что это?
Код

if ((k%2)==0)
      { l=1;
      max=k;  // тут max всегда равно k
     if (l)  // тут l всегда единица, т.е. true, зачем тогда сравнивать?
     {
      if (max<k)
          { max=k; }
     }}


PS отформатируй нормально код

Это сообщение отредактировал(а) Crafty - 16.4.2013, 20:01
PM MAIL   Вверх
Silent
Дата 17.4.2013, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Код

#include <stdio.h>
#include <conio.h>

int main()
{    
    int k = -1, max = 0;
    printf("Введите цифры");
    while (k != 0)
    { 
        scanf("%d", &k);
        if (k != 0)
            max = ((k % 2 == 0) && (max < k)) ? k : max;
    }    
    if (max != 0)
        printf("Максимальное четное число=%i",max);
    else
        printf("четных чисел в последовательности не обнаружено!");
    
    getch();
    return 0;
}

PM MAIL   Вверх
feodorv
Дата 17.4.2013, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Silent, боюсь, та же ситуация: 
Цитата(lerenia @  16.4.2013,  20:14 Найти цитируемый пост)
Среди положительных чисел у меня все нормально, а вот если вводить: 3,7,-4,-2 0 выводится 0(( а должно вывестись -2

Правится просто:
Код

            max = (k % 2 == 0 && (max < k || max == 0)) ? k : max;



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Silent
Дата 18.4.2013, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



feodorv, не обратил внимание на отрицательные числа, виноват. В моем коде можно исправить не эту строку, а всего лишь инициализирвоать max минимальным значением.
Код

#include <stdio.h>
#include <conio.h>
#include <limits.h>

int main()
{    
    int k = -1, max = INT_MIN;
    printf("Введите цифры");
    while (k != 0)
    { 
        scanf("%d", &k);
        if (k != 0)
            max = ((k % 2 == 0) && (max < k)) ? k : max;
    }    
    if (max != INT_MIN)
        printf("Максимальное четное число=%i",max);
    else
        printf("четных чисел в последовательности не обнаружено!");
    
    getch();
    return 0;
}

PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 10:30 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Код

template <typename T>
  void qSort(T* A, size_t low, size_t high) 
  {
      int i = low;                
      int j = high;
      T x = A[(low+high)/2];  // x - опорный элемент посредине между low и high
      do {
          while(A[i] < x) ++i;  // поиск элемента для переноса в старшую часть
          while(A[j] > x) --j;  // поиск элемента для переноса в младшую часть
          if(i <= j){           
              // обмен элементов местами:
              T temp = A[i];
              A[i] = A[j];
              A[j] = temp;
              // переход к следующим элементам:
              i++; 
              j--;
          }
      } while(i < j);
      if(low < j) qSort<T>(A, low, j);
      if(i < high) qSort<T>(A, i, high);
  }

  int evenMax(int* arry, size_t size)
  {
      int* arrcpy = new int[size];
      memcpy(arrcpy, arry, size);
      qSort<int>(arrcpy, 0, size);
      int numEven=0;
      for (; numEven <= (size+1); numEven++){
          if (numEven == (size+1)) 
              break;
          if (arry[numEven]/2 == (int)arry[numEven]/2)
              break;
      }
      delete[] arrcpy;
      return numEven;
  }



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1455 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.