Перейти до змісту
  • "Великий брат" не стежить за тобою.
  • Помогите с задачей на паскале(ошибка в коде)


    Рекомендовані повідомлення

    В заданной символьной строке проверить одинаково ли количество слов с символами "*" и "#".

    У меня считает количество этих символов в этой строке, но если, например, в слове два символа "*", то посчитает как два слова

    Вот, обьясни где ошибка :

    Program string;

    Var s:string;

    i,z,r:integer;

    Begin

    write('Введите строку: ');

    readln(s);

    i:=0;

    While i<Length(s) do

    Begin

    inc(i);

    if not(s in [' ',',']) then

    Begin

    if s='*' then

    z:=z+1

    else

    Begin

    if s='#' then

    r:=r+1;

    End;

    End;

    End;

    Write('Количество слов с * :',z);

    Writeln;

    Write('Количество слов с # :',r);

    End.

    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    ОФФТОП :: Помечено автором как несоответствующее данной теме

    Используй http://pastebin.com/ , чтобы нормально можно было читать код. Может, я и помогу тогда).

    vk

    fb

     

    190px-BlackFlagSymbol.svg.png

    Посилання на коментар
    Поділитись на інші сайти

    ОФФТОП :: Помечено автором как несоответствующее данной теме

    Используй http://pastebin.com/ , чтобы нормально можно было читать код. Может, я и помогу тогда).

     

    Пожалуйста :
    Змінено користувачем cresp
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Поправил код, в чем проблема ?

    http://pastebin.com/GnRZmLaJ

    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Поправил код, в чем проблема ?

    Ты считаешь количество символов "*" и "#" в введённой строке. А не количество слов с этими символами. Проблема в этом.

     

    Простейший и наглядный способ:

    1. разбей в одном цикле строку на массив слов s2

    2. во втором цикле - подсчёт z и r среди слов в массиве s2

    Змінено користувачем Mikele
    Посилання на коментар
    Поділитись на інші сайти

    Ты считаешь количество символов "*" и "#" в введённой строке. А не количество слов с этими символами. Проблема в этом.

     

    Простейший и наглядный способ:

    1. разбей в одном цикле строку на массив слов s2

    2. во втором цикле - подсчёт z и r среди слов в массиве s2

    Я пытался дойти до конца каждого слова, потом проверить - если количество "*" > 0, то другую переменную увеличиваю на один.

    Но почему-то всегда ноль выбивает

    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Поправил код, в чем проблема ?

    http://pastebin.com/GnRZmLaJ

    if (s in [' ',',']) then begin

    if z>0 then

    begin

    z1:=z1+1;

    z := 0;

    end;

    if r>0 then

    begin

    r1:=r1+1;

    r := 0;

    end;

    end;

    так должно сработать. Змінено користувачем Mikele
    Посилання на коментар
    Поділитись на інші сайти

    так должно сработать.

    Уже мысли возникают, что паскаль тупит. Не знаю, это не срабатывает
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Уже мысли возникают, что паскаль тупит. Не знаю, это не срабатывает

    Строчка:

    if not(s[i] in [' ',',']) then
    не нужна (если s это пробел или запятая, то не может быть "*" или "#") :)

     

    Обе переменные z1 и r1 равны нулю? :)

    Проверь код, может где-то вместо z и r обнуляешь z1 и r1

    Посилання на коментар
    Поділитись на інші сайти

    Строчка:

    if not(s[i] in [' ',',']) then
    не нужна (если s это пробел или запятая, то не может быть "*" или "#") :)

     

    Обе переменные z1 и r1 равны нулю? :)

    Проверь код, может где-то вместо z и r обнуляешь z1 и r1

    Уже забабахал, сейчас код скину)
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Уже забабахал, сейчас код скину)

    дебагером пользоваться не умеешь?
    Посилання на коментар
    Поділитись на інші сайти

    дебагером пользоваться не умеешь?

    А зачем он тут нужен ?
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    А зачем он тут нужен ?

    Это отладчик. Чтобы программу отладить и выяснить почему у тебя там нули выдаёт :)
    Посилання на коментар
    Поділитись на інші сайти

    Это отладчик. Чтобы программу отладить и выяснить почему у тебя там нули выдаёт :)

    А вспомнил. Пошаговый просмотр программы ?)
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    да

    В Visual Studio(C#) шарю, в паскале не использовал.

    Program zadacha2;Var s:string;    i,z,r,z1,r1:integer;Beginz1:=0;r1:=0;z:=0;r:=0;write('Введите строку(Вконце нужно поставить точку) : ');readln(s);i:=0;for i:=1 to Length(s) doBeginif not(s[i] in [' ',',','.',';',':','!','?']) then Begin if s[i]='*' then  z:=z+1; if s[i]='#' then r:=r+1;EndelseBegin if z>0 then begin z1:=z1+1; End; if r>0 then  begin r1:=r1+1; End;r:=0;z:=0;End;End;Write('Количество слов с * :', z1);Writeln;Write('Количество слов с # :', r1);Writeln;if z1=r1 thenWrite('Количество одинаковоe')elseWrite('HET');End.
    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    Не вижу в чём тут проблема(((

    Попробуй под отладчиком проверить.

    Посилання на коментар
    Поділитись на інші сайти

    Не вижу в чём тут проблема(((

    Попробуй под отладчиком проверить.

    Она уже правильно работает.

    Почему 0 выбивало ?

    А все просто. Слово заканчивается, дальше идет пробел или запятая и т.д. Когда я дохожу до разделительного знака(или пробела), то смотрю есть ли у меня символы в слове. Если да - то переменную увеличиваю на один. Беда была в том, что я задавал слово, но в конце не было знака, вот оно и не считало

    Человек, который придумает, как бить людей в лицо через Интернет, заработает миллионы.
    Посилання на коментар
    Поділитись на інші сайти

    ×
    ×
    • Створити...

    Важлива інформація

    Використовуючи цей сайт, Ви погоджуєтеся з нашими Умови використання, Політика конфіденційності, Правила, Ми розмістили cookie-файлы на ваш пристрій, щоб допомогти зробити цей сайт кращим. Ви можете змінити налаштування cookie-файлів, або продовжити без зміни налаштувань..