1. Дано целое положительное число N. Необходимо определить наименьшее целое число K, для которого выполняется неравенство:
1 + 2 + … + K > N.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик | Python |
---|---|
DIM N, K AS INTEGER
INPUT N K = 1 WHILE N > 0 N = N - K K = K + 1 WEND PRINT K END |
n = int(input())
k = 1 while n>0: n = n - k k = k + 1 print(k) |
Паскаль | Алгоритмический язык |
var n, k: integer;
begin read(n); k := 1; while n>0 do begin n := n- k; k := k + 1; end; writeln(k) end. |
алг
нач цел n, k ввод n k := 1 нц пока n>0 n := n - k k := k + 1 кц вывод k кон |
Си | |
#include <stdio.h>
int main(){ int n, k; scanf("%d",&n); k = 1; while (n>0) { n = n - k; k = k + 1; } printf("%d", k); return 0; } |
Последовательно выполните следующее.
1. Приведите пример числа N, при вводе которого программа выведет неверный ответ. Укажите верный ответ и ответ, который выведет программа.
2. Приведите пример числа N, при вводе которого программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
2. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM N AS LONG
INPUT N max_digit = 9 WHILE N >= 10 digit = N MOD 10 IF digit > max_digit THEN max_digit = digit END IF N = N \ 10 WEND PRINT max_digit END |
var N: longint;
digit, max_digit: integer; begin readln(N); max_digit := 9; while N >= 10 do begin digit := N mod 10; if digit > max_digit then max_digit := digit; N := N div 10; end; writeln(max_digit); end. |
Си | Алгоритмический |
#include <stdio.h>
int main() { long int N; int digit, max_digit; scanf("%ld", &N); max_digit = 9; while (N >= 10) { digit = N % 10; if (digit > max_digit) max_digit = digit; N = N /10; } printf("%d", max_digit); } |
алг
нач цел N, digit, max_digit ввод N max_digit := 9 нц пока N >= 10 digit := mod(N, 10) если digit > max_digit то max_digit := digit все N := div(N, 10) кц вывод max_digit кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 423.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
3. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG
DIM product AS LONG INPUT N product = N mod 10 WHILE N >= 10 digit = N MOD 10 product = product*digit N = N \ 10 WEND PRINT product END |
var N, product: longint;
digit: integer; begin readln(N); product := N mod 10; while N >= 10 do begin digit := N mod 10; product := product*digit; N := N div 10; end; writeln(product); end. |
Си | Алгоритмический язык |
#include <stdio.h>
int main() { long int N, product; int digit; scanf("%ld", &N); product = N % 10; while (N >= 10) { digit = N % 10; product = product*digit; N = N / 10; } printf("%ld", product); } |
алг
нач цел N, digit, product ввод N product := mod(N, 10) нц пока N >= 10 digit := mod(N, 10) product := product*digit N := div(N, 10) кц вывод product кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 532.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
4. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM N AS LONG
INPUT N
sum = 1
WHILE N > 1
N = N \ 10
sum = sum + 1
WEND
PRINT sum
END
|
var N: longint;
sum: integer; begin readln(N); sum := 1; while N > 1 do begin
N := N div 10;
sum := sum + 1;end; writeln(sum); end. |
Си | Алгоритмический |
#include<stdio.h>
int main() { long int N; int sum; scanf("%ld", &N); sum = 1; while (N > 1) {
N = N /10;
sum = sum + 1;} printf("%d", sum); } |
алг
нач цел N, sum ввод N sum := 1 нц пока N > 1
N := div(N, 10)
sum := sum + 1кц вывод sum кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 938.
2. Укажите одно число для которого эта программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
5. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y — действительные числа) и определяет принадлежность точки заштрихованной области (включая границы). Программист торопился и написал программу неправильно. Ниже для Вашего удобства программа представлена на четырёх языках программирования.
Бейсик | Паскаль |
---|---|
INPUT x, y
IF y<=1 THEN IF y>=x THEN IF x>=-1 THEN IF x*x+y*y<=1 THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" END IF END IF END IF END IF END |
var x,y: real;
begin readln(x,y); if y<=1 then if y>=x then if x>=-1 then if x*x+y*y<=1 then write('принадлежит') else write('не принадлежит'); end. |
Си | Алгоритмический |
#include<stdio.h>
void main() { float x,y; scanf("%f%f",&x,&y); if (y<=1) if (y>=x) if (x>=-1) if (x*x+y*y<=1) printf("принадлежит"); else printf("не принадлежит"); } |
алг
нач вещ x,y ввод x,y если y<=1 то если y>=x то если x>=-1 то если x*x+y*y<=1 то вывод 'принадлежит' иначе вывод 'не принадлежит' все все все все кон |
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H, I, J, K). Точки, лежащие на границах областей, отдельно не рассматривать. Координатные оси не являются границами областей. В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «—» (прочерк), если условие не будет проверяться, «не изв.», если программа ведёт себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «да» или «нет».
Область | Условие1 (y<=1) | Условие 2 (y>=x) | Условие 3
(x>=−1)
| Условие 4 (x*x+y*y<=1) | Программавыведет | Областьобрабатывается верно |
A | ||||||
В | ||||||
С | ||||||
D | ||||||
Е | ||||||
F | ||||||
G | ||||||
Н | ||||||
I | ||||||
J | ||||||
K |
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Комментариев нет:
Отправить комментарий