![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
piplkall |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Написал программу со следующим условием - 1)выделить из каждой строки и напечатать подстроки разделённые одной или несколькими цифрами. 2)среди выделенных подстрок найти подстроку содержащюю минимальное число латинских букв. 3)преобразовать исходную строку, которой принадлежит найденная подстрока, следующим образом: заменить цифры на латинские буквы с соответствующим номером в алфавите ('0'->'A', '1'->'B', '2'->'c'). Но есть проблема, 3 задание не работает и я никак не могу понять почему. Помогите пожалуйста.
Код var str, str1, str2: array [1..100] of string; num: array [1..100] of integer; i, j, t, k, n, m, h, num1, l: integer; p: set of char; begin (*Vvod*) write ('Vvedite kollichestvo strok: '); readln (k); for i:=1 to k do begin write ('Vvedite ',i, ' stroky: '); readln (str[i]); end; p:=['1','2','3','4','5','6','7','8','9','0']; (*Telo*) n:=0; for i:=1 to k do begin t:=0; for j:=1 to length (str[i]) do begin if (str[i][j] in p) then begin if (j-t)>1 then begin inc (n); str1[n]:=copy(str[i], t+1, j-t-1); num[n]:=i; end; t:=j; end; end; end; (*Vuvod*) for i:=1 to n do begin writeln ('Rezyltat: ', str1[i]); writeln ('Num: ', num[i]); end; (*Zadanie 2*) h:=32768; for i:=1 to n do begin m:=0; for j:=1 to length (str1[i]) do begin if (str1[i][j]>'a') AND (str1[i][j]<'z') then begin inc(m); end; end; if h>m then begin h:=m; num1:=i; end; end; (*Vuvod 2*) writeln ('Rezyltat 2: Chislo latinskih simvolov: ' , h, ' Num: ', num1, ' Str: ', str1[num1]); (*Zadanie 3*) l:=0; for i:=1 to length (str[num[num1]]) do begin str2[i]:=str[num[num1]]; end; for i:=1 to n do begin if str2[i]='1' then begin str2[i]:='A'; end; if str2[i]='2' then begin str2[i]:='B'; end; if str2[i]='3' then begin str2[i]:='C'; end; if str2[i]='4' then begin str2[i]:='D'; end; if str2[i]='5' then begin str2[i]:='E'; end; if str2[i]='6' then begin str2[i]:='F'; end; if str2[i]='7' then begin str2[i]:='G'; end; if str2[i]='8' then begin str2[i]:='H'; end; if str2[i]='9' then begin str2[i]:='I'; end; end; for i:=1 to n do begin writeln ('Rezyltat 3: ', str2[i]); end; end. |
![]() ![]() |
Guest |
![]()
Сообщение
#2
|
Гость ![]() |
Ну, во-первых,
chr(ord('A')-Ord('0')-1) так или иначе будет еще при компиляции преобразовано к 49 (для ДОС-кодировки, но ведь есть и другие !!!). А во вторых, я же привел пример, как задание конкретных значений может сослужить очень плохую службу... Или нужно обязательно столкнуться с этим, НАЙТИ эту ошибку самому, и только потом понять, что это не совсем корректный способ? |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:27 |