Автор материалов — Лада Борисовна Есакова.
Самая распространенная ошибка, которую нужно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).
Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.
Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.
Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.
Особого внимания требует инициализация переменных.
Формат книги не позволяет рассмотреть все основные типы задач 2 части, рассмотрим лишь те, которые встречались на проверочных и экзаменационных работах последних двух лет.
Пример 1.
На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик |
Python |
DIM N, DIGIT, SUM AS LONG
INPUT N SUM = 0 WHILE N > 0 DIGIT = N MOD 10 IF DIGIT < 7 THEN SUM = SUM + 1 END IF N = N 10 WEND PRINT DIGIT |
N = int(input())
sum = 0 while N > 0: digit = N % 10 if digit < 7: sum = sum + 1 N = N // 10 print(digit) |
Паскаль |
Алгоритмический язык |
var N, digit, sum: longint;
begin readln(N); sum := 0; while N > 0 do begin digit := N mod 10; if digit < 7 then sum := sum + 1; N := N div 10; end; writeln(digit) end. |
алг
нач цел N, digit, sum ввод N sum := 0 нц пока N > 0 digit := mod(N,10) если digit < 7 то sum := sum + 1 все N := div(N,10) кц вывод digit кон |
Си |
|
#include
int main() { int N, digit, sum; scanf(«%d», &N); sum = 0; while (N > 0) { digit = N % 10; if (digit < 7) sum = sum + 1; N = N / 10; } printf(«%d»,digit); return0; } |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков.
1. Программа выведет число 4.
2. Пример числа, при вводе которого программа выдаёт верный ответ: 835.
Программа работает неправильно из-за неверной выводимой на экран переменной и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе старшая цифра (крайняя левая) равна сумме цифр, меньших 7.
3. В программе есть две ошибки.
Первая ошибка. Неверное увеличение суммы.
Строка с ошибкой:
sum := sum + 1;
Верное исправление:
sum := sum + digit;
Вторая ошибка. Неверный вывод ответа на экран.
Строка с ошибкой:
writeln(digit)
Верное исправление:
writeln(sum)
Пример 2.
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство
(при K = 0 сумма считается равной 0).
Для решения этой задачи ученик написал такую программу.
Бейсик |
Python |
DIM A, S AS DOUBLE
DIM K AS INTEGER INPUT A K = 1 S = 1 WHILE S < A S = S + 1.0/K K = K + 1 WEND PRINT K END |
a = float(input())
k = 1 s = 1 while s < a: s = s + 1.0/k k = k + 1 print(k) |
Алгоритмический язык |
Паскаль |
алг
нач вещ a, s цел k ввод a k := 1 s := 1 нц пока s<a s := s + 1.0/k k := k + 1 кц вывод k кон |
var a, s: real;
k: integer; begin read(a); k := 1; s := 1; while s<a do begin s := s + 1.0/k; k := k + 1; end; write(k); end. |
Си |
|
#include <stdio.h>
int main(){ double a, s; int k; scanf(«%lf»,&a); k = 1; s = 1; while (s<a) { s = s + 1.0/k; k = k + 1; } printf(«%d», k); return 0; } |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа даст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только исправлять ошибочные строки; удалять строки или добавлять новые строки нельзя. Постарайтесь также не внести новые ошибки – за это оценка снижается.
Решение:
Решение использует запись программы на Паскале. Допускается использование программы на других языках.
1. При вводе числа 1.2 программа выведет число 2.
2. Примеры чисел, при вводе которых программа выводит верный ответ: 1.6, 2.05.
Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.
В некоторых случаях эти ошибки компенсируют друг друга, и ответ оказывается правильным. Это происходит, если значение A попадает в один из следующих диапазонов: 1.5 < A < 1.83, 2 < A < 2.08.
3. Программа содержит две ошибки.
1) Неверная инициализация. Начальное значение S должно быть равно нулю.
В приведённом варианте вычисленная сумма оказывается на 1 больше правильного значения.
Строка с ошибкой:
s := 1;
Правильная строка:
s := 0;
2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1.
Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив порядок действий в цикле и уменьшив K после завершения цикла, но эти действия не разрешены по условию задачи.
Поэтому для исправления ошибки можно просто скорректировать значение при выводе.
Строка с ошибкой:
write(k);
Правильная строка:
write(k-2);
Спасибо за то, что пользуйтесь нашими материалами.
Информация на странице «Задача №24. Исправление ошибок в программе.» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
Чтобы успешно сдать нужные и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими статьями из разделов нашего сайта.
Публикация обновлена:
07.06.2023
Скачать материал
Скачать материал
- Сейчас обучается 625 человек из 78 регионов
- Сейчас обучается 94 человека из 37 регионов
Описание презентации по отдельным слайдам:
-
-
2 слайд
С1- 1. Требовалось написать программу, которая решает уравнение ax+b=0 относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
-
3 слайд
Program urav; var a, b, x: real; begin readln(a,b,x); If b = 0 then write(‘x = 0’) else If a = 0 then write(‘нет решений’) else write(‘x =’,-b/a); end.
-
4 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x , при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. Решение
-
5 слайд
a=0, b=0, x=0 (выдается 0, а должно быть любое число) Лишняя часть программы – использование и ввод переменной x. Program C1_1; var a,b: real; begin write(‘Введите a и b’); readln(a,b); if a = 0 then if b = 0 then write(‘любое число’) else write(‘нет решений’) else write(‘x=’, -b/a:8:2); Readln; End.
-
6 слайд
С1-2. В программе вводятся с клавиатуры три различных целых числа a, b, c. Далее требуется преобразовать данные так, чтобы в переменной а оказалось наименьшее число, в переменной b среднее число, а в переменной с — наибольшее . Программист торопился и написал программу неправильно.
-
7 слайд
Program tri_chisla; Var a, b, c, x : integer; Begin Write(‘Введите a, b, c’); readln(a, b, c); If a>b then begin x:= a; a:= b; b:= x; end; If b>c then begin x:= b; b:= c; c:= x; end; end.
-
8 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, c , после обработки которых исходной программой соотношение a<b<c не будет выполнено. Исправьте ошибку в программе так, чтобы она полностью соответствовала постановке задачи. Решение
-
9 слайд
1) A=5, b=7, c=2 (Программа работает неправильно, если минимальное число вводится последним и попадает в переменную c). Program C1_2; var a, b, c, x: integer; Begin write(‘Введите три числа’); read(a, b, c); if a > b then begin x:=a; a:=b; b:=x; end; if b > c then begin x:=b; b:=c; c:=x; end; if a > b then begin x:=a; a:=b; b:=x; end; write(‘Упорядоченная последовательность чисел:’); writeln(a:5, b:5, c:5); readln; end.
-
10 слайд
С1-3. Требовалось написать программу, которая решает уравнение а|x|=b относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:
-
11 слайд
Program modul; Var a, b, x : Real; Begin Readln(a, b, x); If a=0 then If b=0 then Write(‘Любое число’) else Write(‘Решений нет’) else If b=0 then Write(‘x=0’) else Write(‘x=’,b/a, ‘или x=‘,-b/a); End.
-
12 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
13 слайд
a=1, b=-1, x=0 (a и b не могут иметь разные знаки) Лишняя часть программы – использование и ввод переменной x. Program C1_3; var a,b: real; begin readln(a, b); if a = 0 then if b = 0 then write (‘х — любое число’) else write (‘нет решений’) else if b = 0 then write(‘x = 0’) else if a*b < 0 then write(‘нет решений’) else write(‘x =’,b/a:8:2,’ или x =’,-b/a:8:2); Readln; end.
-
14 слайд
С1- 4. Требовалось написать программу, которая решает неравенство ax + b > 0 относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и неправильно написал программу.
-
15 слайд
Program nerav1; Var a, b, x : real; Begin readln(a,b,х); if a=0 then write( ‘любое число’) else if a>0 then write( ‘x > ‘,-b/a) else write( ‘x < ‘,-b/a); End.
-
16 слайд
Последовательно выполните задания: Приведите пример таких чисел а, b, х, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение
-
17 слайд
1) a=0, b=-2, x=1 (значение х может быть не указано) 2) Лишняя часть программы – использование и ввод переменной x. Program C1_4; Var a, b : real; Begin readln(a, b); if a=0 then if b>0 then write( ‘любое число’) else write( ‘нет решений’) else if a>0 then write( ‘x >’,-b/a:8:2) else write( ‘x<‘,-b/a:8:2); Readln; End.
-
18 слайд
С1- 5. Требовалось написать программу, которая определяет, лежит ли точка А(х,у) внутри некоторого кольца («внутри» понимается в строгом смысле). Центр кольца находится в начале координат. Для кольца заданы внутренний и внешний радиусы R1 и R2. Известно, что R1 R2, но неизвестно какой из них больше. В том случае, когда точка А лежит внутри кольца, программа должна выводить соответствующее сообщение, в противном случае никакой выходной информации не выдается. Программист сделал в программе ошибки.
-
19 слайд
Program kolco; Var х, у, r1,r2 : real; h: геаl; {расстояние от т.А до начала координат} Begin Readln(х,у,г1,r2); h:=sgrt(x*x+y*y) ; If (h<r1) and (h>r2) then writeln(‘точка А лежит внутри кольца’); End.
-
20 слайд
Последовательно выполните задания: Приведите пример таких чисел X и Y, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой вариант). Решение
-
21 слайд
x=0, y=2, r1=1, r2=3 (В программе предполагается, что r1 > r2, хотя в условии это не оговаривается. Поэтому программа будет выдавать неверный ответ, когда r2 > r1 и полученное расстояние h удовлетворяет условию r1 < h < r2) . Program C1_5; var x, у, rl,r2,h :real; Begin Write(‘Введите координаты точки’); readln (x, у); Write(‘Введите радиусы двух окружностей’); readln (rl, r2); h := sqrt(x*x + y*y); if ((h < rl) AND (h > r2)) OR ((h < r2) AND (h > r1)) then writeln(‘точка А лежит внутри кольца’); Readln; end.
-
22 слайд
С1 — 6. Требовалось написать программу, которая решает неравенство ax — b < 0 относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и неправильно написал программу.
-
23 слайд
Program nerav2; Var a,b,x : real; Begin readln(a,b,х); if a=0 then if b>0 then write( ‘любое число’) else write( ‘нет решений’) else write( ‘x < ‘,b/a); End.
-
24 слайд
Последовательно выполните задания: Приведите пример таких чисел а, b, х, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение
-
25 слайд
1) a=-5, b=10, x=-3 (a – любое отрицательное число) 2) Лишняя часть программы – использование и ввод переменной x. Program C1_6; Var a,b: real; Begin readln(a,b); if a=0 then if b>0 then write( ‘Любое число’) else write( ‘Нет решений’) else if a>0 then write( ‘x < ‘, b/a:8:2) else write( ‘x > ‘, b/a:8:2); Readln; End.
-
26 слайд
С1- 7. Требовалось написать программу, которая определяет, лежит ли точка А(хn, уn ) внутри треугольной области, ограниченной осями координат и прямой у = 2-х («внутри» понимается в строгом смысле, т.е. случай, когда т.А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
-
27 слайд
Var х0, у0,у : real; Begin readln(x0,y0); if (x0<2) then begin if (x0>0) then begin у = 2 — x0; if (y0 < y) then writeln ( ‘точка лежит внутри обл.’) else writeln ( ‘точка не лежит внутри обл.’); end else writeln ( ‘точка не лежит внутри обл.’); End else writeln(‘точка не лежит внутри обл.’); End.
-
28 слайд
Последовательно выполните задания: Приведите пример таких чисел Xо и Yо, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев правильной работы (можно указать любой способ доработки исходной программы). Решение
-
29 слайд
1) x=1, y=-1( не учитывается условие y>0 ) Program C1_7; var x0, у0, у: real; Begin Write(‘Введите координату точки’); readln (x0, y0); if (x0 > 0) and (x0 <2) and (y0 > 0) and (y0 < 2 — x0) then writeln (‘точка лежит внутри области’) else writein (‘точка не лежит внутри области’); Readln; End.
-
30 слайд
С1-8. Требовалось написать программу, которая решает неравенство (x — а)/(bx)>0 относительно х для любых ненулевых чисел а и b(a 0,b0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:
-
31 слайд
Program trud1; Var a, b, x : Real; Begin Readln(a, b, x); If b>0 then Write (‘x>’, a , ’или x<0’) else If a>0 then Write(‘0<x<’, a) else Write( a, ’<x<0’); Readln End.
-
32 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
33 слайд
1) a = -7, b = 12, х = 0 (b – любое положительное число, a– любое отрицательное, х можно не указывать). 2) Лишняя часть программы – ввод переменной x. Program C1_8; Var a, b : real; Begin Readln(a, b); If b>0 then If a>0 then Write (‘x>’, a:8:2 , ’или x<0’) else Write (‘x<’, a:8:2 , ’или x>0’) else If a>0 then Write(‘0<x<’, a:8:2) else Write( a:8:2, ’<x<0’); Readln; End.
-
34 слайд
С1-9. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y) (действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.
-
35 слайд
Program tochka1; var x,y: real; begin readln(x,y); If y<=1 then If x>=0 then If y>=sin(x) then write(‘принадлежит’) else write(‘не принадлежит’); readln end.
-
36 слайд
Последовательно выполните задания: Приведите пример таких чисел x, y при которых программа работает неправильно. Доработайте программу так, чтобы не было случаев ее неправильной работы. Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
37 слайд
1. Программа работает неверно для точек: (x=3.14, y=0.5) (не верно определяет принадлежность точки области) (x=0, y=1) (не выдает вообще никакого сообщения). Program C1_9; var x,y: real; begin readln(x,y); if (x >= 0) and (x <= pi/2) and (y <= 1) and (y >= sin(x)) then write(‘принадлежит’) else write(‘не принадлежит’); end.
-
38 слайд
С1_10. Требовалось написать программу, которая решает неравенство (x + а)/(bx)<0 относительно х для любого ненулевого числа b (b0) и любого неотрицательного числа а (a≥0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:
-
39 слайд
Program trud2; Var a, b, x : Real; Begin Readln(a, b, x); If a=0 then If b>0 then Write(‘Решений нет’) else Write(‘x>0 или x<0’ ) else Write( -a, ‘<x<0’); Readln End.
-
40 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы. Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
41 слайд
a=10, b=-2, х=0 (a – любое положительное число, b – любое отрицательное, х можно не указывать). Лишняя часть программы – ввод переменной x. Program C1_10; Var a, b : real; Begin Readln(a, b); If a=0 then If b>0 then Write(‘Решений нет’) else Write(‘x>0 или x<0’ ) else If b>0 then Write( -a:8:2, ‘<x<0’) else Write(‘x>0 или x<’,-a:8:2 ); Readln End.
-
42 слайд
С1- 11. Требовалось написать программу, которая решает уравнение ах2+bх+с=0 относительно x для действительных чисел а, b, с, введенных с клавиатуры, о которых заведомо известно, что а0, b0, c 0. Была написана следующая программа. Известно, что программа написана с ошибками.
-
43 слайд
Program korni; Var a, b, с, D, x1, x2 : real; Begin readln(a,b,c,xl,x2); D:=b*b — 4*a*c; If (D>0) then begin x1:=(-b+sgrt(D))/(2*a); x2: = (-b-sgrt(D) )/ (2*a) ; write( ‘x1 = ‘,x1, ‘x2 = ‘,x2); end else writeln(‘действительных корней нет’); End.
-
44 слайд
Последовательно выполните задания: Приведите пример таких чисел а, Ь, с, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. Решение
-
45 слайд
a=1 b=2 c=1 (дискриминант равен нулю и должен быть корень, а программа выдает, что корней нет). Лишняя часть программы – ввод переменных x1, х2. Program C1_11; var a, b, с, D, xl, x2: real; begin readln(a, b, с); D := b*b — 4*a*c; if D >= 0 then begin x1 := (-b + sqrt(D)) / (2*a); x2 := (-b — sqrt(D)) / (2*a); writeln(‘xl =’, xl:8:2, ‘x2 =’, x2:8:2); end else writeln (‘действительных корней нет’); Readln; end.
-
46 слайд
С1- 12. Требовалось написать программу, которая определяет, имеется ли среди введенных с клавиатуры целых чисел а и b хотя бы одно четное. Была написана следующая программа, в которой программист сделал ошибки:
-
47 слайд
Program chet; Var a, b : integer; Begin readln(a,b); a:=a mod 2; If a>0 then b:=b mod 2; If b>0 then writeln(‘четных чисел нет’) else writeln(‘четное число есть’); End.
-
48 слайд
Последовательно выполните задания: Приведите пример таких чисел a и b, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
49 слайд
1) a=2, b=1 (первое число четное, а второе больше 0) Program C1_12; var a, b: integer; Begin write(‘Введите два числа’); readln(a, b); if (a mod 2 = 0) or (b mod 2 = 0) then writeln (‘четное число есть’) else writeln (‘четных чисел нет’); Readln; end.
-
50 слайд
С1-13. Требовалось написать программу, которая решает следующее неравенство a > bx для любых чисел a и b. Входная информация вводится с клавиатуры. Программист торопился и написал программу некорректно:
-
51 слайд
Program ner; VAR a,b,x: real; BEGIN readln(a,b,x); if b=0 then if a<=0 then writeln(‘решения нет’) else writeln(‘x любое число’) else writeln(x,’<’,a/b); readln END.
-
52 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите лишнюю часть программы и ошибки. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
53 слайд
1) a=5, b=-5, x=-3 (b может быть любым отрицательным числом) 2) Лишняя часть программы – использование и ввод переменной x. Program С1_13; VAR a, b: real; BEGIN readln(a,b); if b=0 then if a<=0 then writeln(‘Решения нет’) else writeln(‘x — любое число’) else if b>0 then writeln(‘x<’,a/b:8:2) else writeln(‘x>’,a/b:8:2); Readln; END.
-
54 слайд
С1-14. Требовалось написать программу, которая решает следующее неравенство ax<|b| для любых чисел а и b. Входная информация вводится с клавиатуры. Программист торопился и написал программу некорректно:
-
55 слайд
Program neraven; VAR a, b, x: real; BEGIN readln(a,b,x); If a=0 then writeln(‘x любое число’) else If a>0 then writeln(x,’<’,b/a) else writeln(x,’>’,b/a); readln END.
-
56 слайд
Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите лишнюю часть программы и ошибки. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение
-
57 слайд
1) a=0, b=0, x=5 (х – любое число, можно не указывать) 2) Лишняя часть программы – использование и ввод переменной x. Program С1_14; VAR a,b: real; BEGIN readln(a,b); If a=0 then if b=0 then writeln(‘решений нет’) else writeln(‘x любое число’) else If a>0 then writeln(‘x<’,abs(b)/a:8:2) else writeln(‘x>’,abs(b)/a:8:2); readln; END.
-
58 слайд
С1- 15. Требовалось написать программу, которая определяет, лежит ли точка А(х0,у0) внутри квадратной области, ограниченной прямыми, параллельными осям координат : у=-2, у=2, х=-2, х=2 («внутри» понимается в строгом смысле). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
-
59 слайд
Program tochka; Var х0,у0,у : real; Begin readln(х0,у0); If (x0<2) then begin If (x0>-2) then If (y0<2) then writeln(‘точка лежит внутри области’); end else writeln(‘точка не лежит внутри области’); End.
-
60 слайд
Последовательно выполните задания: Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
61 слайд
x=0, y=-7 (точка в область не попала, а программа не выдает никаких сообщений). Program C1_15; var x0, y0: real; Begin write(‘Введите координаты точки’); readln (x0, y0); if (x0 < 2) and (x0 > -2) and (y0 < 2) and (y0 > -2) then writeln(‘точка лежит внутри области’) else writeln(‘точка не лежит внутри области’); readln; end.
-
62 слайд
С1- 16. Требовалось написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами х, у и z. Программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки:
-
63 слайд
Program treug; Var x,у,z :real; Begin Readln (х,у,z); If (x+y>z) then begin If (x+z>y) then If (y+z>x) then writeln( ‘треугольник построить можно’); end else writeln(‘треугольник построить нельзя’); End.
-
64 слайд
Последовательно выполните задания: Приведите пример таких чисел х, у и z, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
65 слайд
1) x=2, y=4, z=1 (не выдается никакого сообщения, если первое условие истинно (x + y > z), а одно из других – ложно) Program C1_16; var х, у, z: real; Begin Write(‘Введите длины трех отрезков’); readln (x, у, z); if (x + y > z) and (x + z > y) and (y + z > x) then writeln(‘треугольник построить можно’) else writeln(‘треугольник построить нельзя’); Readln; end.
-
66 слайд
С1- 17. Окружность на плоскости задана координатами центра и радиусом. Даны две окружности. Требовалось определить, имеют ли они точку касания. Программист поторопился и сделал в программе ошибки:
-
67 слайд
Program okrug; Var x1,у1,r1,x2,y2,r2 :real; Begin Readln (х1,у1,r1); Readln (х2,у2,r2); If sqrt(sqr(x2-x1)+sqr(y2-y1))=r1+r2 then writeln( ‘да’) else writeln( ‘нет’); End.
-
68 слайд
Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
69 слайд
1) x1=4, y1=4, r1=4 , x2=4, y2=2, r2=2 (случай внутреннего касания) Program C1_17; Var x1,у1,r1,x2,y2,r2 :real; Begin Readln (х1,у1,r1); Readln (х2,у2,r2); If (sqrt(sqr(x2-x1)+sqr(y2-y1))=r1+r2) OR (sqrt(sqr(x2-x1)+sqr(y2-y1))=abs(r1-r2)) then writeln( ‘да’) else writeln( ‘нет’); Readln; End.
-
70 слайд
С1- 18. Требовалось написать программу нахождения количества цифр в записи натурального числа А. Программист поторопился и сделал в программе ошибки:
-
71 слайд
Program cifri; Var a,s :longint; Begin write(‘Введите число’); Readln (А); s:=0; while a>=10 do a:= a div 10; s:=s+1; writeln(‘Количество цифр:’,s); readln End.
-
72 слайд
Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
73 слайд
1) а=124 (любое число большее 9) Program C1_18; Var a,s :longint; Begin write(‘Введите целое число’); Readln(А); s:=0; while a<>0 do begin a:= a div 10; s:=s+1; end; writeln(‘Количество цифр:’,s); readln End.
-
74 слайд
С1-19. Составить программу, которая вводит с клавиатуры координаты точки на плоскости (x,y) и определяет принадлежность точки заштрихованной области, включая ее границы.
-
75 слайд
VAR x, y : real; Begin readln ( x, y ); If Y <= x-1 then if y <= 0 then if y > — sin(x) then Writeln (‘принадлежит’) else Writeln(‘не принадлежит’); end. Найти ошибки в программе. Решение
-
76 слайд
x= 3 , y= 5 {любая пара, для которой выполняются условия: (y>x-1) или (y>0) или ((y>-sinx) и (y<=0) и (x>=2 .)) } Program C1_19; var x, y: real; begin write(‘Введите коорд. точки’); readln(x, y); if (y <= x-1) and (y <= 0)) and (y >= -sin(x)) and (x<=pi) then write(‘принадлежит’) else write(‘не принадлежит’); readln; end. Проверяемые в программе условия выделяют следующие области (закрашены желтым цветом). 2
-
77 слайд
С1-20. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно
-
78 слайд
var x, y: real; begin readln(x, y); if y >= x then if y >= 0 then if y <= 2-x*x then write(‘принадлежит’) else write(‘не принадлежит’); end.
-
79 слайд
Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение
-
80 слайд
1) x=0.5, y=0.2 (проверяемые условия выделяют только область, обозначенную на рисунке синим цветом, а не всю заштрихованную серую область. ) Program C1_20; var x, y: real; begin write(‘Введите координаты точки’); readln(x, y); if ((y >= x) or (y >= 0)) and (y <= 2-x*x) then write(‘принадлежит’) else write(‘не принадлежит’); readln; end.
-
81 слайд
С.С. Крылов, П.А. Якушкин. ЕГЭ 2010. Информатика: сборник экзаменационных заданий. /ФИПИ — М.: Эксмо, 2009. П.А. Якушкин, Д.М. Ушаков. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009. О.В. Ярцева, Е.Н. Цикина. ЕГЭ-2009. Информатика. Самые новые задания. – М.: АСТ: Астрель, 2009. http:/kpolyakov.narod.ru Евграфова Ольга Владимировна, учитель информатики МОУ гимназии №8 г.о. Коломна Московской области
Краткое описание документа:
В презентации рассматриваются задачи на языке Паскаль, которые могут быть предложены на едином государственном экзамене по информатике во второй части работы. Требуется найти и исправить ошибки в программе.
При выполнении такого задания необходимо осуществить «ручную прокрутку задачи» с использованием трассировочной таблицы. Прослеживая за значениями переменных, необходимо понять алгоритм работы программы. А значит понять, в каком месте допущены ошибки.
Ученики должны хорошо знать правила построения программы, правила работы с переменными, основные операторы и особенности их работы. Ключевая тема этого задания ЕГЭ — использование вложенных условных операторов.
Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:
6 285 748 материалов в базе
- Выберите категорию:
- Выберите учебник и тему
- Выберите класс:
-
Тип материала:
-
Все материалы
-
Статьи
-
Научные работы
-
Видеоуроки
-
Презентации
-
Конспекты
-
Тесты
-
Рабочие программы
-
Другие методич. материалы
-
Найти материалы
Другие материалы
- 22.11.2014
- 1805
- 0
Рейтинг:
5 из 5
- 22.11.2014
- 4687
- 174
- 22.11.2014
- 1075
- 0
- 22.11.2014
- 3562
- 8
- 22.11.2014
- 3606
- 0
Рейтинг:
3 из 5
- 22.11.2014
- 6935
- 93
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
Pascal.doc
Скачиваний:
26
Добавлен:
12.03.2016
Размер:
3.29 Mб
Скачать
Сообщения
об ошибках.Ошибки в
программах делятся на те, которые
Паскаль замечает, и на те, что не замечает
и в принципе заметить не может. К первым
относятся все синтаксические погрешности,
например,BIGINвместоBEGIN.
Их Паскаль замечает еще на стадии
компиляции. На стадии выполнения он
замечает такие ошибки, какSqrt(-25),
то есть квадратный корень из ‑25. Но
вот, если вы, желая возвести числоa
в куб, вместоa*a*aпишетеa*a,
то этого не заметит ни один язык в мире.
Обнаружив
грамматическую ошибку, Паскаль выдает
золотыми буквами на красном фоне краткое
описание ошибки и ставит курсор в то
место программы, где, по его мнению, она
находится.
Обнаружив ошибку
на стадии выполнения, Паскаль выдает
белыми буквами на черном фоне окна
пользователя сообщение Runtime
errorи иногда золотыми буквами
на красном фоне краткое описание ошибки
и ставит курсор в то место программы,
где, по его мнению, она находится.
Вот наиболее
типичные для начинающих сообщения об
ошибках того и другого рода:
Сообщение |
Перевод |
Вероятная |
Unexpected end of file |
Неожиданный |
Вы забыли |
“;” expected |
Ждал точку с |
Вы забыли |
“,” expected |
Ждал запятую |
Вы указали |
“)” expected |
Ждал скобку “)” |
Вы указали |
Unknown identifier |
Неизвестное |
Вы забыли описать
Неправильно |
Type mismatch |
Несовпадение |
В вашей программе |
Duplicate identifier |
Дубль имени |
Одно и то же имя |
Syntax error |
Синтаксическая |
Паскаль |
BEGIN |
Ждал BEGIN |
Возможно, не |
END |
Ждал |
Возможно, не |
String |
Строковая |
Вы забыли закрыть |
Line too long |
Строчка слишком |
Слишком длинная |
Disk full |
Диск заполнен |
На вашем диске |
Lower bound greater than |
Нижняя граница |
Например, вы |
Invalid floating point |
Неправильная |
Sqrt(-25)илиa/0или что-нибудь в этом роде |
Ordinal expression |
Ждал выражение |
Например, вы |
Error in expression |
Ошибка в выражении |
Например, вы |
Range check error |
Ошибка проверки |
Переменная |
Constant out of range |
Константа не в |
Величина |
Invalid numeric format |
Неправильный |
Если, например, |
Более подробное
описание некоторых ошибок вы найдете
в 0.3.
Понять смысл
многих других сообщений об ошибках вам
поможет перевод некоторых часто
встречающихся в сообщениях слов:
expected
ждал
identifier
имя
invalid
неправильный
operation операция
error
ошибка
variable переменная
Невозможно создать
компилятор, который бы всегда точно
находил место и причину ошибки. Поэтому
приготовьтесь к тому, что некоторые
сообщения вы будете долго разглядывать
в недоумении. Считайте их не реальными
ошибками, а намеками на реальные ошибки.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Роникс 0 / 0 / 0 Регистрация: 27.04.2017 Сообщений: 16 |
||||
1 |
||||
Найти ошибку в программе и исправить её04.05.2017, 00:02. Показов 684. Ответов 5 Метки графика в pabc.net, рунге-кутты, эйлер (Все метки)
Функция f(x,y)=sqrt((1+cos(2*x))/y);
0 |
Супер-модератор 32592 / 21061 / 8134 Регистрация: 22.10.2011 Сообщений: 36,332 Записей в блоге: 8 |
|
04.05.2017, 00:21 |
2 |
А теперь посчитай, какой величины должен быть массив, чтобы в него поместились значения от Pi/4 до Pi с шагом в 1 тысячную: нужно почти 2400 элементов, а у тебя их всего 1000. Вот и вылет за границу массива.
0 |
Роникс 0 / 0 / 0 Регистрация: 27.04.2017 Сообщений: 16 |
||||
04.05.2017, 20:40 [ТС] |
3 |
|||
Спасибо, я исправил! Но теперь опять ошибка(написано в строке 114)
0 |
volvo Супер-модератор 32592 / 21061 / 8134 Регистрация: 22.10.2011 Сообщений: 36,332 Записей в блоге: 8 |
||||
04.05.2017, 22:46 |
4 |
|||
Слишком большой коэффициент задан, точка вылезает за пределы окна и происходит вылет программы. При
ничего не вылетает.
0 |
Роникс 0 / 0 / 0 Регистрация: 27.04.2017 Сообщений: 16 |
||||
04.05.2017, 23:17 [ТС] |
5 |
|||
Огромное спасибо! А можете мне подсказать за что этот коэф. отвечает? И ещё вопрос можно ли сделать, чтобы на экран значений решения Рунге-Кутты и Эйлера, была нумерация от 0 до 10? Добавлено через 7 минут
0 |
Роникс 0 / 0 / 0 Регистрация: 27.04.2017 Сообщений: 16 |
||||
13.05.2017, 12:03 [ТС] |
6 |
|||
Ребят изменил программу до такого вида, но график строится почему-то зеркально(проверил в маткаде). Исправьте пожалуйста…
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
13.05.2017, 12:03 |
6 |
program kursovaya_Runge_Kutt_Eiler; uses crt,graphABC; const h=3*pi/4000;{Точность} var i,j,p:integer; n,q:real; s:string; { Строка } r1,r2,r3,r4,yi,xi,dy,xm,ym:real; {Одномерные массивы решения данного дифф. уравнения} a:array[0..1000] of real; b:array[0..1000] of real; a1:array[0..1000] of real; b1:array[0..1000] of real; {Данное дифф. уравнение} function f(x,y:real):real; begin f:=sqrt((1+cos(2*x))/y); end; begin clrscr; {Начальное значение интервала} xi:=Pi/4; {Начальное условие} yi:=1; {Начальные номера массивов} i:=0; j:=0; {Начальное значение интервала} xm:=Pi/4; {Начальное условие} ym:=1; q:=0.5; {Метод Рунге-Кутты} writeln('Метод Рунге-Кутты:'); writeln('№=',i, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3); repeat r1:=h*f(xi,yi); r2:=h*f(xi+h/2,yi+r1/2); r3:=h*f(xi+h/2,yi+r2/2); r4:=h*f(xi+h,yi+r3); dy:=(r1+2*r2+2*r3+r4)/6; yi:=yi+dy; xi:=xi+h; a[i]:=xi;{Заполнение массива элементом x} b[i]:=yi;{Заполнение массива элементом y} i:=i+1;{Счётчик} if i mod 100=0 then { Вывод результатов } writeln('№=',i/100, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3); until xi>Pi; readln; {Метод Эйлера} writeln('Метод Эйлера:'); writeln('№=',j/100, ' | ','x=',xm:5:3, ' | ','y=',ym:5:3); repeat ym:=ym+h*f(xm,ym); xm:=xm+h; a1[j]:=xm;{Заполнение массива элементом x} b1[j]:=ym;{Заполнение массива элементом y} j:=j+1;{Счётчик} if j mod 100=0 then { Вывод результатов } writeln('№=',j/100, ' | ','x=',xm:5:3, ' | ','y=',ym:5:3); until xm>Pi; { Построение графика функции } SetWindowHeight(700);{Высота экрана в пикселях} SetWindowWidth(900);{Ширина экрана в пикселях} SetPenColor(clBlack);{Цвет линий} SetPenWidth(2);{Толщина линий в пикселях} {Построение осей графика 0xy} line(180,600,900,600); line(220,0,220,700); line(220,0,220-10,10); line(220,0,220+10,10); line(900,600,900-10,600-10); line(900,600,900-10,600+10); {Построение шкал графика} for p:=1 to 7 do begin line(220+75*p,595,220+75*p,605); line(215,0+75*p,225,0+75*p); end; {Вывод на экран текста,заключённого в ' '} TextOut(205,580,'0'); TextOut(880,580,'x'); TextOut(225,15,'y'); {Вывод на экран цифрового значения шкал по X} for p:=1 to 7 do begin str(q:4:1,s);{Преобразует элемент q в строковый s} TextOut(220+75*p,580,s);{Вывод элемента s на экран} q:=q+0.5;{Счётчик} end; {Вывод на экран цифрового значения шкал по Y} q:=0.5; for p:=1 to 7 do begin str(q:4:1,s);{Преобразует элемент q в строковый s} TextOut(180,595-75*p,s);{Вывод элемента s на экран} q:=q+0.5;{Счётчик} end; {Построение сетки графика} for p:=1 to 8 do begin SetPenColor(clGreen);{Цвет сетки} SetPenWidth(1);{Толщина линий сетки в пискелях} line(200,75+75*p,900,75+75*p);{Построение линий сетки по горизонтали} line(220+75*p,0,220+75*p,700);{Построение линий сетки по вертикали} end; {Построение графика функции} while p<=1000 do {Кол-во точек графика} begin n:=175;{коэф.} Setpixel(round(a[p]*(n/4)+700),round(abs(b[p]*n)+77),clRed); {Вывод на экран пикселей с указанным цветом 1-го графика} Setpixel(round(a1[p]*(n/4)+700),round(abs(b1[p]*n)+77),clBlue);{Вывод на экран пикселей с указанным цветом 2-го графика} p:=p+1;{Счётчик} end; readln; end.