Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2014, 22:37   #1
2107
 
Регистрация: 26.01.2014
Сообщений: 7
По умолчанию Найти номер первого экстремального числа из набора.

Добрый день! Помогите разобраться в задаче. Минимальный элемент и его позицию в списке находит нормально, а максимальный не ищет

Дано целое число N и набор из N целых чисел. Найти номер первого экстремального (то есть минимального или максимального) элемента из данного набора.

Код:
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;

 
int main ()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    int a;            
    int max,min;      
    int pos, pos2;     
    int i=0;         

    ifstream infile ("file.txt");     
    
    max=min = a;
    
    cout << "Набор чисел: ";
    
    while ( infile >> a )
    {     
          i++;
          
          cout << a << " ";
          
          if ( a > max )
          {
             max=a;
             pos=i;
          }
          
          if (a < min)
          {
             min = a;
             pos2=i;
          }
    }
    
    infile.close();
    
    cout << endl << "Номер первого экстремального элемента: ";
    if (pos < pos2)
    {
          cout << pos << endl;
    }
    else
    {
          cout << pos2 << endl;
    }
    
    
    system ("pause");
    return 0;
}

Последний раз редактировалось Stilet; 26.01.2014 в 23:03.
2107 вне форума Ответить с цитированием
Старый 26.01.2014, 23:00   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Код:
    int a;               
    max=min = a;
Подсказать чему равно "a" (а так же "min" и "max")?

Подсказываю - заранее предугадать нельзя, ибо хрен его знает, что в той области памяти было, пока вы ее не выделили под эту переменную. То, что у вас нашло минимальный правильно - случайность, при следующем прогоне может получиться наоборот.

Всегда инициализируйте переменные перед использованием. В задаче поиска минимального или максимального элемента можно приравнять "a" первому (а в принципе вообще любому) элементу из списка, но не приравнивайте его нулю - в списке может не оказаться элементов больше (меньше) нуля и вы получите в качестве ответа этот ноль

p.s.

К стати, system("pause") - тоже не очень хорошая практика (ИМХО).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 26.01.2014 в 23:07.
ROD вне форума Ответить с цитированием
Старый 26.01.2014, 23:32   #3
2107
 
Регистрация: 26.01.2014
Сообщений: 7
По умолчанию

Написал опять вот так:

infile >> a;
max = min = a;

и заработало все, а раньше не работало почему-то ))

спасибо, ROD. И еще такой вопрос, когда считываешь число из массива, предыдущее число будет "a[i - 1]", а след. "a[i + 1]". Есть ли подобный способ записывать пред. и след. числа, когда считываешь не из массива, а из файла?
2107 вне форума Ответить с цитированием
Старый 26.01.2014, 23:37   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

А Вы ради интереса закомментируйте infile >> a; и выведите значение a.
Самым простым способом будет считывание в буфер 3 чисел и работа с ними, а затем дочитывание из файла и замена значений в буфере.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.01.2014, 23:43   #5
2107
 
Регистрация: 26.01.2014
Сообщений: 7
По умолчанию

BDA, спасибо, а пример как считывать не приведете?
2107 вне форума Ответить с цитированием
Старый 27.01.2014, 00:42   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Без учета того, что в файле может не быть 3 чисел.
Код:
int a[3];
infile >> a[0] >> a[1];
while (infile >> a[2]) {
  //тут нужные действия

  //сдвигаем элементы в буфере, выталкивая последний
  a[0] = a[1];
  a[1] = a[2];
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.01.2014, 21:48   #7
2107
 
Регистрация: 26.01.2014
Сообщений: 7
По умолчанию

Препод запретил массивы использовать.
Как вот эту задачу можно решить без использования массивов?

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


Код:
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);   
  
  ifstream infile("FILE.txt"); 
        
  int a[3];  // Числа из файла
  
  cout << "Различные элементы набора: ";
 
  infile >> a[0] >> a[1];
  while (infile >> a[2])
  {
        if ((!(a[1]==a[0])) && (!(a[1]==a[2])))
        {  
              cout << a[1] << " ";
        }
        
        a[0] = a[1];
        a[1] = a[2];
  }
  
  cout << endl;
  
  infile.close();
        
  system("Pause");
  return 0;
}
2107 вне форума Ответить с цитированием
Старый 30.01.2014, 21:54   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Что-то Вы перемудрили в этой задачке.
Код:
int a, b, n;
infile >> n;
if (n) {
    infile >> a;
    cout << a;
}
for (int i = 1; i < n; ++i) {
    infile >> b;
    if (a != b) {
        cout << " " << b;
        a = b;
    }
}
UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 30.01.2014 в 22:13.
BDA вне форума Ответить с цитированием
Старый 30.01.2014, 22:00   #9
2107
 
Регистрация: 26.01.2014
Сообщений: 7
По умолчанию

работает. спасибо огромное, BDA!
2107 вне форума Ответить с цитированием
Старый 30.01.2014, 22:19   #10
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от 2107 Посмотреть сообщение
Препод запретил массивы использовать.
Как вот эту задачу можно решить без использования массивов?
Я бы, чисто чтобы поиздеваться над таким преподом, решил ее с помощью списков (однонаправленного вполне хватит) или контейнеров.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 30.01.2014 в 22:23.
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана последовательность из n действительных чисел. Найти номер первого минимального элемента. d_dima Помощь студентам 2 19.03.2013 10:48
найти числа, которые состоят из цифр первого числа Camelot_2012 Общие вопросы C/C++ 0 05.12.2012 05:03
найти номер первого отрицательного элемента массива Al'f!ra Паскаль, Turbo Pascal, PascalABC.NET 1 22.05.2012 22:06
Ввести два вещественных числа, найти частное от деления первого на второе и вывести его с тремя Томат Помощь студентам 1 23.04.2012 23:23
Даны числа A,B,C обозначающие дату.Найти номер этого дня от начала года. naty7773 Помощь студентам 5 13.01.2012 13:35