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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2011, 20:54   #1
seneka123
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 2
По умолчанию почему плюсует???

var
s: string;
c,a: char;
k,l,b:integer;
begin
a:='a';
b:=0;
repeat
writeln('vvedite stroku'); readln(s);
l:=length(s);
for k:=1 to l do begin
c:=s[k];
if c=a then b:=b+1;
end;
writeln(b);
until l=0;
end.

почему в этом примере старый результат плюсуется к новому?т.е. ввожу слово "pascal"выводит результат "2" потом ввожу "karandash" а результат получается уже 5 а не 3 как должно было быть...в чем мой прокол???
seneka123 вне форума Ответить с цитированием
Старый 22.01.2011, 21:09   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

вы сначала напишите условие задачи, пожалуйста.

Я Так полагаю, эта программа считывает количество символов 'a' в слове, которое вы ввели.

Проблема заключается вот в чём:

repeat
writeln('vvedite stroku'); readln(s);
l:=length(s);
for k:=1 to l do begin
c:=s[k];
if c=a then b:=b+1;
end;
writeln(b);
until l=0;

Вот вы ввели строку, у вас начался цикл по ней:
repeat
writeln('vvedite stroku'); readln(s);
l:=length(s);
for k:=1 to l do begin

Если символ равен букве 'a', то переменную b увеличиваем на 1.

c:=s[k];
if c=a then b:=b+1;
end;

Отображаем число b на экране.
writeln(b);

Идём снова на начало внешнего цикла, просим строку, вводим считаем, прибавляем количество к переменной b. НО ПЕРЕМЕННАЯ b ХРАНИТ СТАРОЕ ЗНАЧЕНИЕ! ВЫ ЕГО НЕ СБРОСИЛИ

Чтобы исправить ситуацию и программа заработала, сбрасывайте переменную b (делайте это конструкцией b:=0) перед тем, как показать её на экране, либо же сбрасывайте её в начале каждой новой итерации цикла repeat

Последний раз редактировалось Вадим Мошев; 22.01.2011 в 21:19.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.01.2011, 21:20   #3
filvika
Пользователь
 
Аватар для filvika
 
Регистрация: 25.08.2010
Сообщений: 25
По умолчанию

переменную b обнуляй в цикле
Код:
    repeat
        b := 0;
        ...
filvika вне форума Ответить с цитированием
Старый 22.01.2011, 21:37   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Кстати, позволю себе дать некоторые советы:
1. Для того чтобы увеличить на некоторое значение переменную ЦЕЛОГО ТИПА, лучше использовать процедуру "инкремент". Синтаксис обращения к ней такой: INC(a, i). Здесь a - переменная целого типа (integer), которая будет увеличиваться каждый раз при обращении к процедуре INC. Второй параметр i (тоже integer) - необязательный. Это число, НА КОТОРОЕ БУДЕТ УВЕЛИЧИВАТЬСЯ первый параметр процедуры. Если Вы его не зададите, то есть напишите INC(a), то в таком случае здесь будет предполагаться, что он АВТОМАТИЧЕСКИМ РАВЕН 1.

Таким образом, конструкция a:=a+i равносильна записи INC(a, i). Если же вы напишите INC(a), то это будет одно и то же, что и a:=a+1

Если вы хотите убавлять значение переменной a, вместо INC пишите DEC (это декремент). Правило обращения к этой процедуре то же самое.

2.
Давайте обратимся к вашему коду:
Код:
or k:=1 to l do begin
c:=s[k];
if c=a then b:=b+1;
замечу, что условие можно, можно было записать вот так:
Код:
if s[k]=a then INC(b);
то есть вы экономите переменную c, её в этом случае можно вообще не использовать
Вадим Мошев вне форума Ответить с цитированием
Старый 22.01.2011, 21:39   #5
seneka123
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 2
По умолчанию

спасибо!!!работает)))
seneka123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему 0? Nikita++ Помощь студентам 4 20.10.2010 19:39
Не создаётся БД почему ? NecRoMat PHP 10 16.04.2010 23:51
Почему? logok Общие вопросы C/C++ 2 12.04.2010 21:59
Почему? Sota О форуме и сайтах клуба 4 26.07.2007 16:26