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

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

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

> Задача со строками.
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Значит, смотри что я сделал (вроде работает, проверь на своих тестах):
var
zadanie3: string; { тебе же надо обрабатывать только одну строку... }

{ соответственно определение str2 можешь убрать,
и эта программа будет компилироваться и в TP тоже }
...
(*Zadanie 3*)
zadanie3 := str[num[num1]];
for i := 1 to length(zadanie3) do
if zadanie3[i] in p then
zadanie3[i] := chr( ord(zadanie3[i]) - (chr(ord('A')-Ord('0')-1)) );

writeln('result #3: ', zadanie3);


И еще. Я компилил не на Дельфи, а на FPC поэтому увидел еще кое-что:
(*Zadanie 2*)
h:=32768;


Не делай так... Твоя программа - пример, когда на другом компиляторе это приведет к неверным вычислениям. При использовании FPC я получил во втором задании h = -32767, и соответственно пустую строку в результате. Но как только ты сделаешь так:
(*Zadanie 2*)
h:=maxInt;

это будет правильно работать при использовании любого компилятора...
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 5.11.2025 16:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name