Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > наибольшее четное без массива


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


Автор: Crafty 16.4.2013, 19:58
Цитата(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 отформатируй нормально код

Автор: Silent 17.4.2013, 07:37
Код

#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;
}

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

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

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

Автор: Silent 18.4.2013, 08:52
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;
}

Автор: kolesnle 21.4.2013, 10:30
Код

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;
  }



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)