Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число
x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Паскаль |
Си |
var x, cnt: integer;
begin
(*)
(1) readln(x);
(2) cnt := 0;
(3) while x > 0 do begin
(4) cnt := cnt + 1;
(5) x := x mod 2;
(6) end;
(7) writeln (cnt)
end.
|
#include<stdio.h>
main(){
int x, cnt;
(*)
(1) scanf("%d",&x);
(2) cnt = 0;
(3) while (x > 0) {
(4) cnt = cnt + 1;
(5) x = x % 2;
(6) }
(7) printf("%d", cnt);
}
|
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль
|
Си
|
...
begin
(*) writeln('123');
... далее исправленная программа
end.
|
#include<stdio.h>
main(){
...
(*) printf("123\n");
... далее исправленная программа
}
|