
Помогите, Информатика Создается программа на Pascal которая с помощью циклов выводит сдачу от
числа s Но числа не выводятся, где ошибка Программа - program a_4; var s, k500, k100, k50, k10, k5, k1: integer; begin write ('А сколько у вас сдачи?'); write ('Введите >>'); readln (s); while s>=500 do begin k500:= k500+1 end; while s>=100 do begin k100:=k100+1 end; while s>=50 do begin k50:=k50+1 end; while s>=10 do begin k10:= k10+1 end; while s>=5 do begin k5:= k5+1 end; while s>= 1 do begin k1:= k1+1 end; writeln ('Итак, вот ваша сдача'); writeln ('Купюр номиналом 500', k500); writeln ('Купюр номиналом 100', k100); writeln ('Купюр номиналом 50', k50); writeln ('Монет номиналом 10', k10); writeln ('Монет номиналом 5', k5); writeln ('Монет номиналом 1', k1); end.

Ответы на вопрос

В чём ошибка
Ошибка была в том, что циклы выполнялись бесконечно т.к. их условие было всегда истинно. Исправить ошибку можно вычитанием из сдачи значения купюры.
Правильный вариант программы:
program a_4;
var s, k500, k100, k50, k10, k5, k1: integer;
begin
write ('А сколько у вас сдачи? ');
write ('Введите >> ');
readln (s);
while s>=500 do
begin
k500:= k500+1;
s:= s-500;
end;
while s>=100 do
begin
k100:=k100+1;
s:= s-100;
end;
while s>=50 do
begin
k50:=k50+1;
s:= s-50;
end;
while s>=10 do
begin
k10:= k10+1;
s:= s-10;
end;
while s>=5 do
begin
k5:= k5+1;
s:= s-5;
end;
while s>= 1 do
begin
k1:= k1+1;
s:= s-1;
end;
writeln ('Итак, вот ваша сдача');
writeln ('Купюр номиналом 500 ', k500);
writeln ('Купюр номиналом 100 ', k100);
writeln ('Купюр номиналом 50 ', k50);
writeln ('Монет номиналом 10 ', k10);
writeln ('Монет номиналом 5 ', k5);
writeln ('Монет номиналом 1 ', k1);
end.
Выполнено в PascalABC.NET



Программа содержит ошибку в том, что она неправильно использует циклы для подсчета количества купюр и монет для сдачи. Вместо использования циклов, она просто увеличивает значения переменных до тех пор, пока условия истинны, что приводит к зацикливанию. Давайте исправим эту ошибку и переделаем программу:
pascalprogram a_4; var s, k500, k100, k50, k10, k5, k1: integer; begin write('А сколько у вас сдачи? '); readln(s); k500 := 0; // Инициализируем значения всех переменных k100 := 0; k50 := 0; k10 := 0; k5 := 0; k1 := 0; while s >= 500 do begin k500 := k500 + 1; s := s - 500; end; while s >= 100 do begin k100 := k100 + 1; s := s - 100; end; while s >= 50 do begin k50 := k50 + 1; s := s - 50; end; while s >= 10 do begin k10 := k10 + 1; s := s - 10; end; while s >= 5 do begin k5 := k5 + 1; s := s - 5; end; while s >= 1 do begin k1 := k1 + 1; s := s - 1; end; writeln('Итак, вот ваша сдача'); writeln('Купюр номиналом 500: ', k500); writeln('Купюр номиналом 100: ', k100); writeln('Купюр номиналом 50: ', k50); writeln('Монет номиналом 10: ', k10); writeln('Монет номиналом 5: ', k5); writeln('Монет номиналом 1: ', k1); end.
В этой исправленной версии используется цикл while
, чтобы итеративно вычислить количество купюр и монет для сдачи. Каждый раз, когда мы добавляем купюру или монету к сдаче, мы также уменьшаем значение переменной s
, чтобы следующая итерация цикла проверяла оставшуюся сумму. Таким образом, программа должна правильно вычислить количество купюр и монет для сдачи от заданного числа s
.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili