Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Обработка строк и символов (http://www.tehnari.ru/f41/t30948/)

Sergei47 08.12.2009 18:17

Обработка строк и символов
 
язык Паскаль
1.Дана строка, слова в которой разделены хотя бы одним пробелом. Найти первое и последние вхождение (номер позиции в строке символа " * " Если такого символа нет вообще, выдать сообщение)

2.Приняв способ изображения рационального числа в виде записи с двумя полями.
числ, знам: integer;
Написать программу, позволяющая во первых, определить есть ли среди 50 рациональных чисел равные и во-вторых, вычислить наибольшее из данных рациональных чисел (числа не обязательно имеют несократимую форму).

Vladimir_S 08.12.2009 22:11

Цитата:

Сообщение от Sergei47 (Сообщение 268358)
язык Паскаль
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.


Sergei47 09.12.2009 08:45

Спасибо большое..


Часовой пояс GMT +4, время: 07:36.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.