IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача со строками.
piplkall
сообщение 1.07.2005 20:27
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Написал программу со следующим условием - 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Guest
сообщение 2.07.2005 9:52
Сообщение #2


Гость






Ну, во-первых,
chr(ord('A')-Ord('0')-1)

так или иначе будет еще при компиляции преобразовано к 49 (для ДОС-кодировки, но ведь есть и другие !!!).
А во вторых, я же привел пример, как задание конкретных значений может сослужить очень плохую службу... Или нужно обязательно столкнуться с этим, НАЙТИ эту ошибку самому, и только потом понять, что это не совсем корректный способ?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"