Цитата:
Сообщение от Sergei47
язык Паскаль
1.Дана строка, слова в которой разделены хотя бы одним пробелом. Найти первое и последние вхождение (номер позиции в строке символа " * " Если такого символа нет вообще, выдать сообщение)
|
Не понял, при чем тут разделение слов пробелами, но как-то так:
Код:
VAR
S:STRING;
i,Imin,Imax:INTEGER;
b:BOOLEAN;
BEGIN
WriteLn('Enter the string:');
ReadLn(S);
i:=0;
Imin:=0;
Imax:=0;
b:=FALSE;
REPEAT
INC(i);
IF (S[i]='*') AND (b=FALSE) THEN
BEGIN
Imin:=i;
b:=TRUE;
END;
IF (S[i]='*') AND (i>Imin) AND b THEN
Imax:=i;
UNTIL i=Length(S);
IF (Imin>0) AND (Imax>0) THEN
WriteLn('The first "*" position is ',Imin,'; the last "*" position is ',Imax)
ELSE
IF (Imin>0) AND (Imax=0) THEN
WriteLn('The only "*" position is ',Imin)
ELSE
WriteLn('There is no "*" in the string');
ReadLn;
END.
Цитата:
2.Приняв способ изображения рационального числа в виде записи с двумя полями.
числ, знам: integer;
Написать программу, позволяющая во первых, определить есть ли среди 50 рациональных чисел равные и во-вторых, вычислить наибольшее из данных рациональных чисел (числа не обязательно имеют несократимую форму).
|
Код:
TYPE
Rat=RECORD
Nom:BYTE;
Denom:BYTE;
END;
VAR
Num:ARRAY[1..50] of RAT;
i,j,Imax:INTEGER;
MAX:REAL;
BEGIN
Randomize;
FOR i:=1 TO 50 DO
WITH Num[i] DO
BEGIN
Nom:=Random(30);
Denom:=Random(29)+1;
END;
MAX:=-1.0;
FOR i:=1 TO 50 DO
WITH Num[i] DO
IF Nom/Denom>MAX THEN
BEGIN
MAX:=Nom/Denom;
Imax:=i;
END;
FOR i:=0 TO 4 DO
BEGIN
FOR j:=1 TO 10 DO
Write(Num[10*i+j].Nom:2,'/',Num[10*i+j].Denom:2,' ');
Writeln;
END;
WriteLn('The largest value is ',Num[Imax].Nom:2,'/',Num[Imax].Denom:2);
FOR i:=1 TO 50 DO
FOR j:=i+1 TO 50 DO
IF ROUND(Num[i].Nom/Num[i].Denom*1000000)=
ROUND(Num[j].Nom/Num[j].Denom*1000000) THEN
WriteLn('Number ',i,' is equal to number ',j);
ReadLn;
END.