Значит так: мы создаем массив избыточной длины, куда потом будем записывать рандомные числа. Так же мы создаем массив-счетчик b (у него индексами являются сами числа, а элементами - количество этого числа в массиве А), куда будет присваиваться, сколько раз нам встречается то или иное число (перед этим мы массив обязательно обнулим). В конце мы смотрим максимальное число из массива-счетчика. Вуаля!
Вот пример программы на паскале ABC:
var a:array [1..1000000] of integer; b:array [1..10] of longint; c:integer; i,max,n:longint; begin write('Введите число элементов массива: '); readln(n); max:=0; for i:=1 to 10 do b[i]:=0; for i:=1 to n do begin a[i]:=random(10)+1; write(a[i],' '); b[a[i]]:=b[a[i]]+1 end; for i:=1 to 10 do if b[i]>max then begin c:=i; max:=b[i] end; writeln; writeln('Чаще всего в массиве встречается число ',c) end.
Первая программа предназначена ТОЛЬКО для Pascal.ABC, в другой среде она работать не будет. Она самая короткая и простая. Метод Split разбивает исходную строку на слова по символу пробела и формирует динамический массив. Что бы мы ни вводили, мы всегда будем получать в результате то, что требовалось. (понятно, что если слов будет меньше трех, будем получать то, что ввели).
var s: string; ms: array of string;
begin Write('Введите три слова через пробел: '); Readln(s); ms := s.Split(' '); Writeln(ms[0] + ' ' + ms[2] + ' ' + ms[1]) end.
Вторая программа реализуется в любой версии Pascal. Её недостаток в том, что она правильно работает только тогда, когда введена фраза из трех слов, разделенных пробелом. Это простейший линейный алгоритм.
var s, s1, s2, s3: string; n, p: integer;
begin Write('Введите три слова через пробел: '); Readln(s); n := Length(s); p := Pos(' ', s); s1 := Copy(s, 1, p - 1); s3 := Copy(s, p + 1, n - p); p := Pos(' ', s3); s2 := Copy(s3, 1, p - 1); n := Length(s3); s3 := Copy(s3, p + 1, n - p); Writeln(s1 + ' ' + s3 + ' ' + s2) end.
Третья программа также реализуема в любой версии Pascal и содержит "классический" работы со строкой, состоящий в последовательном анализе каждого символа. Имеет защиту на случай, если слов будет больше или меньше трех.
var s: string; ms: array[1..3] of string; i, n, p, j: integer;
begin Write('Введите три слова через пробел: '); Readln(s); { Алгоритм: Просматриваем все символы строки начиная с позиции p и при обнаружении пробела в позиции q заносим в массив очередное слово, копируя q-p символов, начиная с p. Затем заносим в p значение q+1 и продолжаем просмотр. При старте принимаем p=1 } p := 1; j := 0; n := Length(s); for i := 1 to n do if s[i] = ' ' then begin j := j + 1; if j <= 3 then begin{ если введено больше двух пробелов } ms[j] := Copy(s, p, i - p); p := i + 1 end end; if j < 3 then ms[3] := Copy(s, p, n - p + 1); Writeln(ms[1] + ' ' + ms[3] + ' ' + ms[2]) end.
Все три программы опробованы и результаты их работы одинаковы:
Введите три слова через пробел: Зебра полосатая лошадь Зебра лошадь полосатая
Вот пример программы на паскале ABC:
var a:array [1..1000000] of integer;
b:array [1..10] of longint;
c:integer;
i,max,n:longint;
begin
write('Введите число элементов массива: ');
readln(n);
max:=0;
for i:=1 to 10 do
b[i]:=0;
for i:=1 to n do begin
a[i]:=random(10)+1;
write(a[i],' ');
b[a[i]]:=b[a[i]]+1
end;
for i:=1 to 10 do if b[i]>max then
begin
c:=i;
max:=b[i]
end;
writeln;
writeln('Чаще всего в массиве встречается число ',c)
end.
var
s: string;
ms: array of string;
begin
Write('Введите три слова через пробел: ');
Readln(s);
ms := s.Split(' ');
Writeln(ms[0] + ' ' + ms[2] + ' ' + ms[1])
end.
Вторая программа реализуется в любой версии Pascal. Её недостаток в том, что она правильно работает только тогда, когда введена фраза из трех слов, разделенных пробелом. Это простейший линейный алгоритм.
var
s, s1, s2, s3: string;
n, p: integer;
begin
Write('Введите три слова через пробел: ');
Readln(s);
n := Length(s);
p := Pos(' ', s);
s1 := Copy(s, 1, p - 1);
s3 := Copy(s, p + 1, n - p);
p := Pos(' ', s3);
s2 := Copy(s3, 1, p - 1);
n := Length(s3);
s3 := Copy(s3, p + 1, n - p);
Writeln(s1 + ' ' + s3 + ' ' + s2)
end.
Третья программа также реализуема в любой версии Pascal и содержит "классический" работы со строкой, состоящий в последовательном анализе каждого символа. Имеет защиту на случай, если слов будет больше или меньше трех.
var
s: string;
ms: array[1..3] of string;
i, n, p, j: integer;
begin
Write('Введите три слова через пробел: ');
Readln(s);
{
Алгоритм: Просматриваем все символы строки начиная с позиции p
и при обнаружении пробела в позиции q заносим в массив очередное слово,
копируя q-p символов, начиная с p. Затем заносим в p значение q+1
и продолжаем просмотр. При старте принимаем p=1
}
p := 1; j := 0; n := Length(s);
for i := 1 to n do
if s[i] = ' ' then
begin
j := j + 1;
if j <= 3 then begin{ если введено больше двух пробелов }
ms[j] := Copy(s, p, i - p);
p := i + 1
end
end;
if j < 3 then ms[3] := Copy(s, p, n - p + 1);
Writeln(ms[1] + ' ' + ms[3] + ' ' + ms[2])
end.
Все три программы опробованы и результаты их работы одинаковы:
Введите три слова через пробел: Зебра полосатая лошадь
Зебра лошадь полосатая