RGBGP 0 / 0 / 0 Регистрация: 20.10.2014 Сообщений: 3 |
||||
1 |
||||
20.10.2014, 16:56. Показов 7132. Ответов 6 Метки нет (Все метки)
Дано: Ряд целых чисел,где каждый член>=2, найти 2 наибольших элемента
Что нужно изменить,чтобы программа работала не только для возрастающей последовательности?
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 место
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 |
а можно ли решить эту задачу без 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, а также вспомним и научимся применять различные процедуры. В решениях к некоторым задачам Вам встретится возможно неизвестная прежде процедура 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. Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).
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. Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.
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.
Фух! На сегодня все! Если у вас возникли какие-либо вопросы не стесняйтесь, оставляйте все свои вопросы в комментариях под статьей! И не забывайте кликать по кнопочкам и рассказывать о нас своим друзьям.