|
Решение типовых задач на строковые массивыРассмотрим простейшие типовые задачи на строковые массивы. 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. |
Программа (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 Программы |
Предлагается два подхода к решению задачи, в зависимости от типа входных данных: |
|
|
Сообщение о результате выводится на экран |
Алгоритмы
Промежуточные данные:
В качестве счётчиков цикла используются переменные i, j
Р - разряд очередной цифры числа, N1 - хранит исходное число
Цифры числа N заносятся в массив Mb, затем переставляются в обратном порядке.
Формируется новое число N2, которое используется для сравнения с исходным
Промежуточные данные: 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. |
Условие задачи Алгоритмы