Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2018, 13:32   #1
love26
Новичок
Джуниор
 
Регистрация: 19.04.2018
Сообщений: 4
По умолчанию задание по основам программирования! - Pascal ABC - Дана строка S. Выяснить есть ли в ней цифры

Дана строка S. Выяснить есть ли в ней цифры. Если есть, то вывести эти цифры на экран, а также их количество. Если нет- то вывести сообщение об этом. Кроме того в полученной строке найти количество нечетных цифр, вывести эти цифры на экран и их количество, а если нечетных цифр нет - то вывести сообщение об этом. Выход из программы по нажатию клавиши Esc.


Код:
uses crt;

const s:string='0123456789';
var a,b,x,s1,s2:string;

i,j,d,p,code,l:integer;

begin

repeat

clrscr;

d:=0; l:=0;

writeln('введи строку из цифр и букв');

readln(a);

x:=' ';

for i:=1 to length(a) do

begin

b:=copy(a,i,1);

for j:=1 to length(s) do

if b=s[j] then begin inc(d); x:=x+b; end;

end;

writeln;

if d=0 then writeln('в строке нет цифр')

else

begin

write('цифры введенной строки..'); writeln(x);

writeln('их количество ...',d);

writeln;

s2:=' ';

for i:=1 to length(x) do

begin

val(x[i],p,code);

if odd(p) then begin inc(l); str(p,s1); s2:=s2+s1; end;

end;

writeln;

if l=0 then writeln('среди чисел нет нечетных') else

begin

write('нечетные цифры..'); writeln(s2);

writeln('количество нечетных цифр...',l);

end;

end;

writeln;

writeln(' для выхода клавиша ESC, для продолжения ENTER');

until readkey=#27;

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 19.04.2018 в 13:41.
love26 вне форума Ответить с цитированием
Старый 19.04.2018, 13:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вместо
Цитата:
Сообщение от love26 Посмотреть сообщение
Код:
if odd(p) then begin inc(l); str(p,s1); s2:=s2+s1; end;
проще написать
Код:
if odd(p) then begin inc(l); s2:=s2+x[i]; end;
есть и ещё небольшие замечания (например, вопрос, почему не используете функцию Pos() ? )

но в целом код выглядит рабочим.

в чём вопрос то?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 13:56   #3
love26
Новичок
Джуниор
 
Регистрация: 19.04.2018
Сообщений: 4
По умолчанию

не работает почему то((
love26 вне форума Ответить с цитированием
Старый 19.04.2018, 14:17   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от love26 Посмотреть сообщение
не работает почему то((
а какой у Вас Pascal ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 14:18   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
program HelloWorld;
uses crt;
const oddD = '013579';
        evenD = '2468';
var s:string;
    digits:string;
    i,j:byte;
    oddCount, evenCount, digitCount :byte;
begin
repeat 
    writeln('Input Line:');
    readln(s);
    writeln(s);
    digits:=oddD+evenD;
    oddCount:=0;evenCount:=0;digitCount:=0;
    for i:=1 to length(digits) do
    begin
        if pos(digits[i],s)>0 then
        begin
            if i <= length(oddD) then inc(oddCount)
            else inc(evenCount);
            digitCount:=0;
            for j:=1 to length(s) do if s[j]=digits[i] then inc(digitCount);
            writeln(digits[i],': ',digitCount);
        end;
    end;
    if evenCount+oddCount > 0 then
    begin
        writeln('even : ',evenCount);
        writeln('odd : ',oddCount);
        writeln('digits : ',evenCount+oddCount);
    end
    else
        writeln('no digits');
until readkey=#27;
end.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.04.2018, 14:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Александр, "0" - это не нечётное число!
WriteLn( odd(0)) -> False



Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
until readkey=#27;
я почему про версию Pascal ABC спросил.
дело в том, что мой Pascal ABC v 3.0.1.35 пролетает readkey не задерживаясь.

Последний раз редактировалось Serge_Bliznykov; 19.04.2018 в 14:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 14:33   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

readkey самая малая проблема должна быть.
я код на http://rextester.com/l/pascal_online_compiler писал, а строки repeat..until на форуме дописал Попробовал авторское решение, имхо, отработало как надо
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задание по основам программирования! - Pascal ABC - В одной строке ввести фамилию, имя, отчество. Вывести на экран фамилию и инициалы. love26 Паскаль, Turbo Pascal, PascalABC.NET 1 19.04.2018 14:35
С++ Выяснить, есть ли в записи натурального числа N две одинаковые цифры. Anya She Помощь студентам 4 21.12.2012 16:04
Дана строка. Преобразовать в ней все строчные буквы в прописные. Ginger_93 Помощь студентам 2 22.03.2012 15:17
Дана строка текста.Определить какой из символов в ней больше . А или О? Райзат Фриланс 23 26.07.2010 21:20
Дана строка S. Преобразовать строку, заменив в ней каждое многоточие одной точкой.Строки в C++ slog Помощь студентам 9 16.12.2008 20:14