Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"Второй максимум" массива(паскаль), помогите разобрать программу

35K
06 июня 2008 года
kristinchik
7 / / 06.06.2008
Объясните procedure mas2max, как она работает?
Код:
uses crt;
const N=5;
type mas=array[1..N] of integer;
var A:mas;

procedure mas_w(var A:mas);
var i:1..N;
begin
for i:=1 to N do
    begin
    write ('A[',I,']=');
    readln (A);
    end;
end;

procedure mas2max(A:mas);
var y,k:integer;
i:1..N;
begin
y:=1;
k:=1;
for i:=2 to N do
   if (A>A[y]) then y:=i;

if (y=1) then k:=2;
for i:=2 to N do
        if (A>A[k]) and (y<>i) then
         k:=i;
writeln (a[k]);
end;

begin
clrscr;
mas_w(A);
mas2max(A);

readln
end.
1.9K
08 июня 2008 года
max_dark
256 / / 11.11.2005
Код:
procedure mas2max(A:mas);
    var
        y,k:integer; { Номера максимальных элементов: y - 1-й, k - 2-й }
        i:1..N;      { Счетчик }
begin
    y:=1;
    k:=1;
    { В данном цикле ищется индекс(номер) максимального элемента массива }
    for i:=2 to N do
        if (A>A[y]) then { Если текущий элемент больше максимального, }
            y:=i; { то запоминаем его номер }
    { Теперь A[y] - максимальный элемент }

    if (y=1) then { если максимальный элемент является первым элементом массива, то }
        k:=2; { считаем, что второй максимум находится на второй позиции }

    { В данном цикле ищется индекс второго максимума массива }
    for i:=2 to N do
        if (A>A[k]) and (y<>i) then { Если текущий элемент больше второго максимума и номер первого максимума не равен номеру текущего элемента, то }
            k:=i; { запоминаем его }

    { Теперь в A[k] находится второй максимум. Выводим его }
    writeln (a[k]);
end;
50K
01 апреля 2010 года
postal2
1 / / 31.05.2009
Ну и не работает процедурка, введите что-то вроде 5 5 5 5 1 4 5 2 1 4
8.4K
01 апреля 2010 года
z0rch
275 / / 02.09.2008
ну учитывая что константа N=5, то ввести мы можем только первые 5 цифр - и все работает верно =)
но и с N=10 тоже все верно считается ;)

а если вам нужно вычислить второй максимальный элемент, который не равен первому, то надо бы добавить одно условие:
 
Код:
for i:=2 to N do
  if (A>A[k]) and (y<>i) and (a[y]<>a) then
    k:=i;

но при этом я не вижу логики в строке:
 
Код:
if (y=1) then k:=2;

значит наверное я неправильно понял вашу задачу =)
392
03 апреля 2010 года
cronya
421 / / 03.01.2009
Код:
#include<iostream>
#include<cstdlib>
using namespace std;
#define SIZE 10
int main(int argc, char *argv[])
{
int *mas=(int *)malloc(SIZE);
for(int idx=0;idx<SIZE;idx++)
mas[idx]=rand()%100;
cout<<"Array:"<<endl;
for(int idx=0;idx<SIZE;idx++)
cout<<mas[idx]<<" ";
int max1=0, max2=0;
for(int idx=0;idx<SIZE;idx++)
if(mas[idx]>mas[max1])max1=idx;//ищем 1-й максимальный  во всем массиве и запоминаем его индекс
cout<<"\nПервый максимум массива - "<<mas[max1]<<endl;
for(int idx=0;idx<SIZE;idx++)
if((mas[idx]>mas[max2])&&(mas[idx]<mas[max1]))max2=idx;//ищем 2-й максимальный  во всем массиве следующим образом(ищиться максималный в массиве, потом проверяем если он меньше 1 максимального, значит это 2 максимум массива)
cout<<"Второй максимум массива - "<<mas[max2]<<endl;
cout<<endl;
free(mas);
return 0;
}

Проще некуда, хотя тут вариант на си написан, думаю отличий не будет так как алгоритм 1 и тот же :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог