Как найти два наибольших числа паскаль

RGBGP

0 / 0 / 0

Регистрация: 20.10.2014

Сообщений: 3

1

20.10.2014, 16:56. Показов 7132. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Дано: Ряд целых чисел,где каждый член>=2, найти 2 наибольших элемента
Текст программы:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 Var p,i,max1,max2,x:integer;
 Begin
  write('введите кол-во чисел в последовательности-');
  readln(p);
  readln(x);
  max1:=x;
  readln(x);
  max2:=x;
   for i:=1 to p-2 do begin
                          readln(x);
                          if (x>max2) and (x<max1) then max2:=x;
                          if x>max2
                          then max1:=x;
                      
                    end;
  writeln(max1,' ',max2);
  End.

Что нужно изменить,чтобы программа работала не только для возрастающей последовательности?



0



Платежеспособный зверь

8818 / 4245 / 1618

Регистрация: 28.10.2009

Сообщений: 11,385

20.10.2014, 17:24

2

А что, она не работает разве?



0



0 / 0 / 0

Регистрация: 20.10.2014

Сообщений: 3

20.10.2014, 18:19

 [ТС]

3

Нет. в последовательности цифр 1 3 4 79 0, он выдаст 79 и 3



0



кот Бегемот

Платежеспособный зверь

8818 / 4245 / 1618

Регистрация: 28.10.2009

Сообщений: 11,385

20.10.2014, 19:14

4

Вы не опустили бывший максимум на 2 место

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Var p,i,max1,max2,x:integer;
 Begin
  write('введите кол-во чисел в последовательности-');
  readln(p);
  max1:=-maxint;
  max2:=-maxint;
   for i:=1 to p do 
   begin
    readln(x);
   if (x>max1) and (x>max2) then 
   begin
   max2:=max1;
   max1:=x;
   end
   else
   if x>max2 then max2:=x
   end;
  writeln(max1,' ',max2);
  End.



0



0 / 0 / 0

Регистрация: 20.10.2014

Сообщений: 3

20.10.2014, 19:48

 [ТС]

5

а можно ли решить эту задачу без int?



0



2509 / 1130 / 582

Регистрация: 07.06.2014

Сообщений: 3,286

21.10.2014, 00:41

6

Цитата
Сообщение от RGBGP
Посмотреть сообщение

а можно ли решить эту задачу без int?

простите, без какого int ?



0



Платежеспособный зверь

8818 / 4245 / 1618

Регистрация: 28.10.2009

Сообщений: 11,385

21.10.2014, 10:41

7

Видимо, Вы имели ввиду Maxint. Это сделано, чтобы в качестве начальных значений задать заведомо маленькие числа, такие, что все числа последовательности будут больше.
Можете брать в качестве начальных первые два числа последовательности, но это усложняет решение



0



Паскаль. В линейном массиве найти два максимальных элемента.



Профи

(638),
закрыт



11 лет назад

Дополнен 11 лет назад

заполнение массива случайными числами

Дополнен 11 лет назад

нужна программа, я одно максимальное число нашла, а как найти сразу два максимальных элемента???

Руслан Синкевич

Профи

(787)


11 лет назад

Самый простой вариант – сделать второй проход, запомнив индекс максимального элемента, который был установлен в предыдущем проходе. При втором проходе просто пропустить его, выполнив проверку (к примеру if not i=2 then if a(i) > max then max:=a(i) )

var
max1, ind, max2, i : integer;
a : array [1..100] of integer;
begin
randomize;
for i:=1 to 100 do
a(i) := random(200);
max1 := a(i);
for i:=2 to 100 do
if a(i) > max1 then begin max1 := a(i); ind = i; end;
max2 := a(i);
for i:=2 to 100 do
if (a(i) > max2) and (i <> ind) then max2 := a(i);
writeln(‘max1=’, max1, ‘ max2=’, max2);
end.

Примерно так. Писал по памяти, нет под рукой компилятора. (i) замените на квадратные скобки.

dosmot dosmot

Мастер

(1739)


11 лет назад

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

****** ******

Ученик

(199)


6 лет назад

код С#
________
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] initArr = new int[10000];
for (int i = 0; i < initArr.Length; i++)
{
initArr[i] = rnd.Next(-1000, 1000);
}

var outArr = Sort(initArr, 10);
}

private static int[] Sort(int[] array, int count)
{
int[] outArr = new int[count];
for (int i = 0; i < outArr.Length; i++)
{
int[] sorted = new int[count];
for (int j = 0; j < array.Length; j++)
{
if (!sorted.Contains(array[j]) && array[j] == array.Max())
{
outArr[i] = array[j];
array[j] = 0;
}
}
}

return (int[]) outArr.Reverse();
}
}
}

Выбирает из массива А массив максимальных чисел Б. В массиве А числа могут повторяться и поэтмоу также считаются максимальными. Требует доработки, т. к. 5 элементов из 10000 массива выберет за 6 сек. А если надо будет выбрать 1000?? Прикрути linq и возможно будет тебе праздник, но не факт, скорее всего еще медленее станет работать

Формулировка задачи:

Дано: Ряд целых чисел,где каждый член>=2, найти 2 наибольших элемента
Текст программы:

 Var p,i,max1,max2,x:integer;
 Begin
  write('введите кол-во чисел в последовательности-');
  readln(p);
  readln(x);
  max1:=x;
  readln(x);
  max2:=x;
   for i:=1 to p-2 do begin
                          readln(x);
                          if (x>max2) and (x<max1) then max2:=x;
                          if x>max2
                          then max1:=x;
                      
                    end;
  writeln(max1,' ',max2);
  End.

Что нужно изменить,чтобы программа работала не только для возрастающей последовательности?

Код к задаче: «Найти 2 наибольших числа»

textual

Var p,i,max1,max2,x:integer;
 Begin
  write('введите кол-во чисел в последовательности-');
  readln(p);
  max1:=-maxint;
  max2:=-maxint;
   for i:=1 to p do 
   begin
    readln(x);
   if (x>max1) and (x>max2) then 
   begin
   max2:=max1;
   max1:=x;
   end
   else
   if x>max2 then max2:=x
   end;
  writeln(max1,' ',max2);
  End.

Полезно ли:

12   голосов , оценка 4.250 из 5

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

Аналогичные функции можно написать для поиска минимального из чисел. Для этого достаточно сменить знак сравнения в функции с двумя аргументами(в первой из рассмотренных).

Для реализации сначала нужно написать функцию, которая находит максимальное из двух чисел.

Функция определения максимального из двух чисел

function Max(x1, x2 : integer) : integer;
begin
  if x1 > x2 then
    Max := x1
  else
    Max := x2;
end; 

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

Функция поиска наибольшего из трех чисел

function Max(x1, x2, x3 : integer) : integer;
begin
  Max := Max(Max(x1, x2), x3);
end;

А что если нужно сравнить четыре, пять и больше чисел, и найти максимальное из них?

Без проблем, мы можем писать столько перегруженных функций, сколько нам нужно.

Максимум из четырех чисел

function Max(x1, x2, x3, x4 : integer) : integer;
begin
  Max := Max(Max(x1, x2, x3), x4);
end; 

Эта функция использует вызов двух предыдущих.

Программа для поиска и вывода максимальных чисел

все приведенные выше функции должны быть размещены в том же порядке над телом основной программы

В зависимости от количества аргументов, компилятор выбирает какую из функций вызывать.

begin
  writeln(Max(1, 4));
  writeln(Max(9, 2, 7));
  writeln(Max(8, 3, 6, 5));
  readln;
end. 

Если предполагается сравнивать много чисел, то лучше всего представить их в виде массива, и искать минимальный или максимальный элемент в массиве.

Смотрите также:

if1-15

Всем привет! Сегодня мы начнем долгожданный разбор задач по программированию if1-15, а также вспомним и научимся применять различные процедуры. В решениях к некоторым задачам Вам встретится возможно неизвестная прежде процедура Inc. Пояснения к ней и к другим процедурам можно найти в этой статье.

If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.

Program If_1;

var
  a: integer;

begin
  readln(a);
  if a > 0 then Inc(a);
  write(a);
end.

If2. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае вычесть из него 2. Вывести полученное число.

Program If_2;

var
  a: integer;

begin
  readln(a);
  if a > 0 then Inc(a) else a -= 2;
  write(a);
end.

If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.

Program If_3;

var
  a: integer;

begin
  readln(a);
  if a >= 0 then 
    if a = 0 then a := 10 else Inc(a)
   else a -= 2;
  write(a);
end.

If4°. Даны три целых числа. Найти количество положительных чисел в исходном наборе.

Program If_4;

var
  a, b, c, plus: integer;

begin
  write('Введите три целых числа: ');
  readln(a, b, c);
  if a > 0 then Inc(plus); 
  if b > 0 then Inc(plus); 
  if c > 0 then Inc(plus); 
  writeln('Количество положительных чисел: ', plus);
end.

If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.

Program If_5;

var
  a, b, c, plus, minus: integer;

begin
  write('Введите три целых числа: ');
  readln(a, b, c);
  if a > 0 then Inc(plus) else Inc(minus);
  if b > 0 then Inc(plus) else Inc(minus);
  if c > 0 then Inc(plus) else Inc(minus);
  writeln('Количество положительных чисел - ', plus);
  writeln('Количество отрицательных чисел - ', minus);
end.

If6°. Даны два числа. Вывести большее из них.

Program If_6;

var
  a, b: integer;

begin
  write('Введите числа: ');
  readln(a, b);
  if a > b then writeln(a) else writeln(b);
end.

If7. Даны два числа. Вывести порядковый номер меньшего из них.

Program If_7;

var
  a, b: integer;

begin
  write('Введите числа: ');
  readln(a, b);
  if a < b then writeln(1) else writeln(2);
end.

If8°. Даны два числа. Вывести вначале большее, а затем меньшее из них.

Program If_8;

var
  a, b: integer;

begin
  write('Введите числа: ');
  readln(a, b);
  if a > b then writeln(a,' ', b) else writeln(b,' ', a);
end.

If9. Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее. Вывести новые значения переменных A и B.

Program If_9;

var
  a, b: integer;

begin
  write('Введите A: ');
  readln(a);
  write('Введите B: ');
  readln(b);
  if a > b then writeln('A = ', a,';  B = ', b) else writeln('A = ', b,';  B = ', a);
end.

If10. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

Program If_10;

var
  a, b: integer;

begin
  write('Введите A: ');
  readln(a);
  write('Введите B: ');
  readln(b);
  if a <> b then writeln('A = ', a+b,';  B = ', a+b) else writeln('A = ',0,';  B = ',0);
end.

If11. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

Program If_11;

var
  a, b: integer;

begin
  write('Введите A: ');
  readln(a);
  write('Введите B: ');
  readln(b);
  if a = b then writeln('A = ',0,';  B = ',0) else
    if a > b then writeln('A = ', a,';  B = ', a) else writeln('A = ', b,';  B = ', b);
end.

If12°. Даны три числа. Найти наименьшее из них.

Program If_12;

var
  a, b, c: integer;

begin
  write('Введите три числа: ');
  readln(a, b, c);
  if (a <  b) and (a < c) then writeln(a) else 
    if b < c then writeln(b) else writeln(c);
end.

If13. Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).

if13

Небольшое пояснение
Program If_13;

var
 a, b, c, srednee:integer;

begin
 write('Введите три числа: ');
 readln(a, b, c);
 if (a > c) and (a > b) then
  if c > b then srednee := c
  else srednee := b;
 if (b > a) and (b > c) then
  if a > c then srednee := a
  else srednee := c;
 if (c > a) and (c > b) then
  if a > b then srednee := a
  else srednee := b;
 writeln('Среднее: ', srednee);
end.

If14. Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.

if14

Пояснение
Program If_14;

var
 a, b, c, min, max :integer;

begin
 write('Введите три числа: ');
 readln(a, b, c);
 if (a > c) and (a > b) then max := a
   else if b > c then max := b
     else max := c;
 if (a < c) and (a < b) then min := a
   else if b < c then min := b
     else min := c;
 writeln('Наименьшее число: ', min);
 writeln('Наибольшее число: ', max);
end.

If15. Даны три числа. Найти сумму двух наибольших из них.

Program If_15;

var
 a, b, c :integer;

begin
 write('Введите три числа: ');
 readln(a, b, c);
 if (a < b) and (a < c) then writeln(b+c)
   else if b < c then writeln(a+c)
     else writeln(a+b);
end.

Фух! На сегодня все! Если у вас возникли какие-либо вопросы не стесняйтесь, оставляйте все свои вопросы в комментариях под статьей! И не забывайте кликать по кнопочкам и рассказывать о нас своим друзьям.

Добавить комментарий