Другие языки программирования и технологии

Подскажите, как написать следующую программу в C++:

Даны n целых чисел. Найти второе меньшее из них.
При вводе неправильных данных, программа должна оповещать об ошибке и позволить повторный ввод.
А не правильные данные это какие?
=============================
#include <iostream>

using namespace std;

int main()
{

int n;

cout << "Enter number of elements of array: ";
cin >> n;

int *ar = new int[n];

int min, second_min;
for(int i(0); i < n; i++)
{

cin >> ar[i];
if (i == 0) {min = ar[0], second_min = ar[0];}
if (i == 1) second_min = ar[1];
if(ar[i] < min) {second_min = min; min = ar[i];}
if(ar[i] > min && ar[i] < second_min) second_min = ar[i];
}

cout << endl;
cout << "second_min = " << second_min << endl;
cout << "min = " << min << endl;

system("pause >> void");
return 0;
}
Richi Kosta
Richi Kosta
5 430
Лучший ответ
Самый простой и быстрый способ:
1. Считываешь первых 2 числа.
2. Переменной min1 присваиваешь значение меньшего из них, min2 - большего.
3. В цикле от 3 до n проверяешь 2 условия:
а) если число меньше min1, то min2=min1;min1=a;
б) если число меньше min2 и больше min1, то min2=a
3. Выводишь min2
n = 1 - тривиально не судьба
n = 2 - просто сравнить и вывести большее или сказать что все равны

n > 2 - интереснее:
1. перенести arr[0], arr[1] во временные переменные A, B.
2. отсортировать A, B по возрастанию
3. для i=2…n проверить одно из:
--- если arr[i] < A сдвинуть B = A, A = arr[i]
--- если arr[i] > A и (arr[i] < B или A == B) заменить B = arr[i]
4. проверить что A < B:
--- если < - вывести B
--- иначе, сказать что все равны

ЗЫ
Сори. Опечатка. Случай n=2 перекрывается n>2, так как цикл 3 ни разу не выполнится.
|_
|Dim(@)N| _
11 112
перебираешь все значения и сохраняешь на каждом шаге 2 минимальных из уже пройденных
дальше выбираешь наибольший из них
если чисел больше 3, бери массив и сортируй
На Паскале
Var a,i, min1,min2,n,t:integer;
Begin
Writeln('Vvedite n');
Readln(n);
Writeln('Vvedite 1 chislo');
Read(min1);
Writeln('Vvedite 2 chislo');
Read(min2);
if min1>min2 then
begin
t:=min1;
min1:=min2;
min2:=t;
end;
for i:=3 to n do
begin
Writeln('Vvedite ', i,' chislo');
Readln(a);
if a<min1 then
begin
min2:=min1;
min1:=a;
end;
if (a<min2) and (a>min1) then min2:=a;
end;
Writeln(min2);
End.