Форум программистов, компьютерный форум CyberForum.ru

Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном массиве - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Заполнить нулями элементы квадратной матрицы, расположенными по её периметру http://www.cyberforum.ru/cpp-beginners/thread587172.html
Заполнить нулями элементы квадратной матрицы, расположенными по её периметру. Нужно написать, используя функции. Кто может помочь?
C++ Базовый контейнер по умолчанию Собственно, в чем смысл указывания базового контейнера по умолчанию для контейнеров STL? В чем будет отличия этого объявленияpriority_queue<int, deque<int>, greater<int> > numbersот етого priority_queue<int, vector<int>, greater<int> > numbers http://www.cyberforum.ru/cpp-beginners/thread587164.html
C++ протестировать методы класса
У меня есть класс "вектор". В нём добавила метод, который вычисляет длину вектора и перегрузила функции +,-,=. Нужно протестировать все методы класса. Помогите, пожалуйста, я не совсем понимаю как это сделать #include <iostream>; using namespace std; #pragma once template<typename T> class vector { private: T *_vector; size_t _size;
C++ Дано вещественное число А
Дано вещественное число А. Найти среди чисел 1, 1+1/2, 1+1/2+1/3+... первое число, большее А Плиз помогите катастрофически не успеваю...
C++ Организовать ввод трех чисел, первое из которых является наибольшим общим делителем двух последних http://www.cyberforum.ru/cpp-beginners/thread587148.html
1)Организовать ввод трех чисел, первое из которых является наибольшим общим делителем двух последних. 2)У заданного натурального числа найти среднее арифметическое его цифр. В с++ Помогите пожалуйста :wall:
C++ Дайте пожалуйста ссылку на сайт с командами Помогите вспомнить на сайт с командами и функциями для С++, точно не помню на кажется эта страница была на сайте Microsoft, но что то не нашел её там подробнее

Показать сообщение отдельно
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
27.05.2012, 09:18  [ТС]     Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном массиве
MrGluck, мне бы хотелось узнать где ошибка в моей программе, а не узнать новый алгоритм?! Вы не поищите? Есть подобный на Паскале, он работает:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
program mass;
uses crt;
var Mass: array [1..100] of integer;
    i, N, j, Min, Max: integer;
 Flag, FlagOk: boolean;
begin
 
 clrscr;
 writeln('Введите размер массива');
 readln(N);
 
 for i:=1 to N do
 begin
  write('[', i,']= ');
  readln(Mass[i]);
 end;
 
 writeln;
 writeln('Данный одномерный массив чисел');
 for i:= 1 to N do
  write(Mass[i],' ');
 
 Flag := false;
 Min:= 1;
 Max:= 1;
 for i:=2 to N do
 begin
  if Mass[i] < Mass[Min] then  Min:=i;
  if Mass[i] > Mass[Max] then  Max:=i;
 end;
 writeln;
 writeln;
 writeln('Минимальный элемент массива: ', Mass[Min]);
 writeln('Максимальный элемент массива: ', Mass[Max]);
 Flag := false;
 writeln;
 
 for i:= Mass[Min]+1 to Mass[Max]-1 do
 begin
  FlagOk := true;
  for j:=1 to N do
   if Mass[j]=i then
   begin
    FlagOk := false;
    break;
   end;
   if (Flag = false) and (FlagOk) then
   begin
    Flag := true;
    writeln('Целые числа между мин. и макс. элементами, которых нет в массиве: ');
   end;
   if FlagOk then
    write(i,' ');
 end;
  if Flag = false then
   writeln('Целых чисел между элементами массива нет');
   readln; 
end.

Добавлено через 13 часов 1 минуту
Нашел причину по которой вторая часть программы не работала. "=" - это не проверка на равенство, а присваивание в Сpp, равенство - "==". Это я после Паскаля еще путаюсь, исправил. Еще в "for(j=1; j<N; j++)" букву N заменил на 2, чтобы найденые числа не повторялись N раз. НО, когда я ввожу в массив 1, 3, 5, 7, 9 среди чисел не найденных в массиве оказывается 7, т.е. 2, 4, 5, 6, 7, что является ошибкой. А когда 1, 2, 3, 4, 5, то вылазит 3 - тоже ошибка. Почему?
Вот новый код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h> 
#include <conio.h> 
 
const int N = 5;
int main()
{     
 int 
 mass[N]={1, 3, 5, 7, 9}; 
 int i, j, min, max; 
 bool FlagOk, Flag;
 
  printf("\n Ishodniy massiv: "); 
  for (int i=0; i<N; i++)
  { printf("%d. ", mass[i]); } 
 
  Flag=false; // Устанавливаем флаг на ложь.
  min=0; max=0; // Обнуляем минимальное и максимальное значения.
 
  /* Нахождение минимального и максимального элементов */
  for(i=1; i<N; i++)
   { if(mass[i] < mass[min])  // Если следущий элемент меньше минимального, то...
      { min=i; } // назначаем его минимальным.
     if(mass[i] > mass[max])  // Если следущий элемент больше максимального, то...   
      { max=i; } // назначаем его минимальным.
   }
  printf("\n \n Min element = %d.", mass[min]); // Выводим минимальный элемент.
  printf("\n \n Max element = %d.", mass[max]); // Выводим максимальный элемент.
 
  /* Поиск целых чисел между мин. и макс. элементами, которых нет в массиве */
  Flag=false; // Отмечаем, что искомые числа пока не найдены.
  for (i=mass[min]+1; i<mass[max]-1; i++) /*  Т.к. мин. и макс. элементы по условию 
                                              не должны принадлежать промежутку, 
                                              то и цикл начинается с числа больше 
                                              минимального на 1 и заканчивается 
                                              числом меньшим максимального на 1.
                                           */
   { FlagOk=true; // Предполагать, что текущее целое число будет одним из искомых.
     for(j=1; j<2; j++)
      { if (mass[j]==i) /*  Проверяеть есть ли среди элементов данного массива элемент, 
                           равный предполагаемому. Если равный есть, то... 
                       */
       { FlagOk = false; // значит, что число не является искомым и...
         break; } // цикл проверки данного числа прекратить и перейти к следующему числу.         
       if ((Flag==false) && (FlagOk)) /* Если же равный элемент в массиве не был найден, 
                                          и такой элемент оказался первым найденным, тогда...
                                       */                                       
        { Flag = true; // Отмечается, что хотя бы одно число уже найдено.
        printf("\n \n Celye chisla meghdu min & max elem. kotoryh net v massive: \n "); } /* Ввыести
                                 целые числа между мин. и макс элементами, которых нет в массиве. */                                         
       if (FlagOk) // Если же равный элемент не был найден в данном массива, тогда...
        { printf(" %d.", i); } // вывести это число.
      }
   }
   if (Flag==false) // Если же ни одного искомого числа не было найдено, тогда...   
    { printf("\n \n Celye chisel megdu min. & max. elem. massiva net"); } /* вывести
                     сообщение, что чисел между мин. и макс.  элементами массива нет. */
  
 getch();
 return 0;
}
Добавлено через 2 часа 4 минуты
Неужели никто не знает? О_о
 
Текущее время: 03:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru