UCOZ Реклама

 

Решение типовых задач на строковые массивы

Рассмотрим простейшие типовые задачи на строковые массивы.

1)      Поиск максимального и минимального элементов массива.

Задача. Вводится с клавиатуры текст в виде массива слов. Определить слово максимальной длины.

 

Программа (QBasic).

Программа (Pascal).

INPUT "Сколько слов"; n

DIM mas(n) AS STRING

FOR i = 1 TO n

    PRINT "Введите след. слово ";

    INPUT mas(i)

NEXT i

max$ = "": nm = 0

FOR i = 1 TO n

  IF LEN(mas(i)) > nm THEN

    max$ = mas(i)

    nm = LEN(mas(i))

  END IF

NEXT

PRINT "Слово максимальной длины - "; max$, nm

Var i,n,nm:integer;

    max: string;

    mas: array[1..100] of string;

Begin

Write ('Сколько слов?');

readln( n);

FOR i := 1 TO n Do Begin

    Write ('Введите след. слово ');

    Readln (mas);

End;

max:= ''; nm := 0;

FOR i := 1 TO n do

  IF Length(mas) > nm THEN Begin

    max := mas;

    nm := Length(mas);

  END;

Writeln ('Слово максимальной длины - ', max)

END.

 

2)        Определение некоторых слов в тексте по условиям.

Задача. Вводится с клавиатуры массив слов. Определить, сколько слов начинается на определенную букву.

 

Программа (QBasic).

Программа (Pascal).

INPUT "Сколько слов"; n

DIM mas(n) AS STRING

FOR i = 1 TO n

    PRINT "Введите след. слово ";

    INPUT mas(i)

NEXT i

    INPUT "Буква "; b$

k = 0

FOR i = 1 TO n

  IF LEFT$(mas(i), 1) = b$ THEN k = k + 1

NEXT

PRINT "Слов на букву "; b$; k

Var i,n,k:integer;

    b: string;

    mas:array[1..100] of string;

Begin

Write('Сколько слов'); Readln(n);

FOR i := 1 TO n do begin

    Write ('Введите след. слово '); Readln (mas)

end;

    Write ('Введите букву '); Readln (b);

k := 0;

FOR i := 1 TO n do

  IF mas[1] = b THEN k := k + 1;

Writeln ('Слов на букву ', b,' - ', k);

End.

 

Задача. Вводится с клавиатуры массив слов. Определить, есть ли слова-палиндромы в данном наборе слов, и, если есть, то вывести эти слова.

 

Программа (QBasic).

Программа (Pascal).

INPUT "Сколько слов"; n

DIM mas(n) AS STRING

FOR i = 1 TO n

   PRINT "Введите след. слово ";

   INPUT mas(i)

NEXT i

 

k = 0

FOR i = 1 TO n

  sl$ = ""

  FOR j = 1 TO LEN(mas(i))

    b$ = MID$(mas(i), j, 1)

    sl$ = b$ + sl$

  NEXT j

  IF sl$ = mas(i) THEN k = k + 1: PRINT mas(i)

NEXT

 

PRINT "Слов-палиндромов "; k

Var

 s:array[1..100] of String;

  s1,s2:String[1];

  n,i,j,m,kp:Integer;

  pr:boolean;

Begin

 Write('Enter number: '); ReadLn(n);

  For i:=1 To n Do begin

  Write('Word - '); Readln(s);

  end;

  For i:=1 To n Do

  Begin

    pr:=false;

    m:=length(s) div 2;

    For j:=1 to m do begin

      s1:=s[j];

      s2:=s[Length(s)+1-j];

      If s1<>s2 Then begin pr:=true;Break; End;

    End;

    If not(pr) then begin inc(kp); Writeln(s); End;

  end;

  Writeln(kp,' words-palindromov');

END.

Задача 2.  Определить, является ли натуральное число палиндромом

   

Алгоритм 1 

Алгоритм 2

Программы

Предлагается два подхода к решению задачи, в зависимости от типа входных данных:
  •  С клавиатуры задаётся значение переменной натурального типа N
  • Вводится значение символической переменной S
Сообщение о результате выводится на экран

Алгоритмы

Алгоритм 1

Промежуточные данные:

В качестве счётчиков цикла используются переменные i, j

Р - разряд очередной цифры числа,  N1 - хранит исходное число  

Цифры числа N заносятся в массив Mb, затем переставляются в обратном порядке.

Формируется новое число N2, которое используется для сравнения с исходным

Алгоритм 2

Промежуточные данные: sw - буферная переменная

Символы строки размещаются в обратном порядке в строке s1, которая сравнивается с исходной  строкой s

 Условие задачи

Программы

QBASIC

Способ 1

Способ 2

DEFLNG I-N, P
DIM Mb(10000) AS LONG
CLS
INPUT "Задайте натуральное число"; N
N1 = N
i = 1
DO                            
 Mb(i) = N - INT(N / 10) * 10 
 N = N \ 10
 i = i + 1
LOOP UNTIL N <= 0
 N2 = 0: P = 1
FOR j = i - 1 TO 1 STEP -1     
  N2 = N2 + Mb(j) * P: P = P * 10
NEXT j
IF N2 = N1 THEN                
   PRINT "ЭТО ЧИСЛО - ПАЛИНДРОМ"
           ELSE
   PRINT N1; "ЭТО ЧИСЛО - НЕ ПАЛИНДРОМ"
END IF
END
DEFLNG I-N
DEFSTR S
DIM mb(10000) AS LONG
CLS
INPUT "Задайте натуральное число"; s
s1 = s
FOR i = 1 TO LEN(s) / 2    'перевернули строку
   sw = MID$(s1, i, 1)
   MID$(s1, i, 1) = MID$(s1, LEN(s) - i + 1)
   MID$(s1, LEN(s) - i + 1) = sw
NEXT i
IF s = s1 THEN
   PRINT "ЭТО ЧИСЛО - ПАЛИНДРОМ"
          ELSE
   PRINT "ЭТО ЧИСЛО - НЕ ПАЛИНДРОМ"
END IF
END

Условие задачи     Алгоритмы

PASCAL

Способ 1

Способ 2

 program ZADANIE2;
uses crt;
var N,N1,N2: longint;
    Mb: array [0..10000] of integer;
    i,j,p: integer;
begin
  clrscr;
  Write('Задайте натуральное число');
  Readln(N);
  N1:=N; i:=1;
  repeat
     Mb:=N mod 10;
     N:=N div 10;
     i:=i+1
  until N<=0;
  N2:=0;p:=1;
  for j:= i-1 downto 1 do begin
     N2:=N2+Mb[j]*p; p:=p*10
  end;
  if N2=N1 then
	Writeln('Это число-палиндром')
           else
	Writeln('Это число-НЕ палиндром');
  Readln
end.
program ZADANIE2;
uses crt;
var s,s1: string;
    sw:char;
    i: integer;
begin
  Clrscr;
  Write('Задайте натуральное число');
  Readln(s);
  s1:=s;
  for i:=1 to Length(s) div 2 do begin
      sw:=s;
      s:=s[length(s)-i+1];
      s[length(s)-i+1]:=sw
  end;
  if s=s1 then
	Writeln('Это число-палиндром')
           else
	Writeln('Это число-НЕ палиндром');
  Readln
end.

Условие задачи     Алгоритмы

 

<< Возврат в начало

 

 

Hosted by uCoz