Pascal Имеется массив, состоящий из 30-ти произвольных чисел. Необходимо написаться программу, которая выводит номер минимального числа среди отрицательных чисел.
Этой программе все равно, сколько слов во фразе и какой они длины. А заодно, ей все равно, сколько между словами пробелов...
// PascalABC.NET 3.1, сборка 1230 от 27.04.2016 procedure Times(a:array of string; pic:string; var n:integer); begin n:=a.Where(s->s=pic).Count end;
begin var s:=ReadlnString('>').ToWords; var k:integer; var w:='ЗНАЧИТ'; Times(s,w,k); Println(k,'-',w); w:='ВОТ'; Times(s,w,k); Println(k,'-',w); w:='АВТОМОБИЛЬ'; Times(s,w,k); Println(k,'-',w); end.
Тестовое решение > ВОТ ЗНАЧИТ КАКОЕ ДЕЛО БЫЛО ЕХАЛ ПО ДОРОГЕ АВТОМОБИЛЬ И ВОТ СТОИТ ЧЕЛОВЕК И ДУМАЕТ А ЧТО ЗНАЧИТ СЛОВО АВТОМОБИЛЬ А СЛОВО АВТОМОБИЛЬ ЭТО ОТ ГРЕЧЕСКОГО АУТОС (САМ) И ЛАТИНСКОГО МОБИЛИС (ПОДВИЖНЫЙ) ВОТ ТАКОЕ ЭТО СЛОВО 2 - ЗНАЧИТ 3 - ВОТ 3 - АВТОМОБИЛЬ
В программе предполагается, что слова отделяются друг от друга одним пробелом, знаков препинания нет. const m=3; var s:string; sl:array[1..m] of string=('ЗНАЧИТ', 'ВОТ', 'АВТОМОБИЛЬ'); n:array[1..m] of integer; i:integer; procedure pr(s1,s2:string; var k:integer); var l,p:integer; begin s1:=' '+s1+' '; l:=length(s2); k:=0; p:=pos(s2,s1); while p>0 do begin if (s1[p-1]=' ')and(s1[p+l]=' ') then k:=k+1; delete(s1,1,p+l); p:=pos(s2,s1); end; end; begin writeln('Введите текст:'); readln(s); for i:=1 to m do begin pr(s,sl[i],n[i]); writeln(sl[i],' - ',n[i]); end; end.
Пример (слов меньше 40): Введите текст: ЗНАЧИТ ТАК ВОТ АВТОМОБИЛЬ РАЗ ВОТ АВТОМОБИЛЬ ДВА ВОТ АВТОМОБИЛЬ ТРИ ЗНАЧИТ - 1 ВОТ - 3 АВТОМОБИЛЬ - 3
program mas_no_min_iz_otr;
const n=30;
var
a:array[1..n]of integer;
i,m,k:integer;
begin
for i:=1 to n do
begin
a[i]:=random(101)-50;
writeln(i:3,' ',a[i]:3);
end;
m:=0;
k:=0;
for i:=1 to n do
if a[i]<m then
begin
m:=a[i];
k:=i;
end;
writeln;
if k=0 then
write('Отрицательный нет')
else
write('Номер наименьшего отрицательного》',k)
end.