Найти и исправить ошибки в программе паскаль

Автор материалов — Лада Борисовна Есакова.
Самая распространенная ошибка, которую нужно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).

Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора 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 регионов

Описание презентации по отдельным слайдам:

  • С1- 1. Требовалось написать программу, которая решает уравнение ax+b=0 относи...

    2 слайд

    С1- 1. Требовалось написать программу, которая решает уравнение ax+b=0 относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.

  • Program urav; var a, b, x: real; begin readln(a,b,x); If b = 0 then write('x ...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x , при...

    4 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x , при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. Решение

  • a=0, b=0, x=0 (выдается 0, а должно быть любое число) Лишняя часть программы...

    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.

  • С1-2. В программе вводятся с клавиатуры три различных целых числа a, b, c. Да...

    6 слайд

    С1-2. В программе вводятся с клавиатуры три различных целых числа a, b, c. Далее требуется преобразовать данные так, чтобы в переменной а оказалось наименьшее число, в переменной b среднее число, а в переменной с — наибольшее . Программист торопился и написал программу неправильно.

  • Program tri_chisla; Var a, b, c, x : integer; Begin Write(‘Введите a, b, c’);...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, c , пос...

    8 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, c , после обработки которых исходной программой соотношение a<b<c не будет выполнено. Исправьте ошибку в программе так, чтобы она полностью соответствовала постановке задачи. Решение

  • 1) A=5, b=7, c=2 (Программа работает неправильно, если минимальное число ввод...

    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.

  • С1-3. Требовалось написать программу, которая решает уравнение а|x|=b относит...

    10 слайд

    С1-3. Требовалось написать программу, которая решает уравнение а|x|=b относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:

  • Program modul; Var a, b, x : Real; Begin Readln(a, b, x); If a=0 then If b=0...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x, при...

    12 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • a=1, b=-1, x=0 (a и b не могут иметь разные знаки) Лишняя часть программы – и...

    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.

  • С1- 4. Требовалось написать программу, которая решает неравенство ax + b &gt; 0...

    14 слайд

    С1- 4. Требовалось написать программу, которая решает неравенство ax + b > 0 относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и неправильно написал программу.

  • Program nerav1; Var a, b, x : real; Begin readln(a,b,х); if a=0 then write( '...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел а, b, х, при...

    16 слайд

    Последовательно выполните задания: Приведите пример таких чисел а, b, х, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение

  • 1) a=0, b=-2, x=1 (значение х может быть не указано) 2) Лишняя часть программ...

    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.

  • С1- 5. Требовалось написать программу, которая определяет, лежит ли точка А(х...

    18 слайд

    С1- 5. Требовалось написать программу, которая определяет, лежит ли точка А(х,у) внутри некоторого кольца («внутри» понимается в строгом смысле). Центр кольца находится в начале координат. Для кольца заданы внутренний и внешний радиусы R1 и R2. Известно, что R1 R2, но неизвестно какой из них больше. В том случае, когда точка А лежит внутри кольца, программа должна выводить соответствующее сообщение, в противном случае никакой выходной информации не выдается. Программист сделал в программе ошибки.

  • Program kolco; Var х, у, r1,r2 : real; h: геаl; {расстояние от т.А до начала...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел X и Y, при ко...

    20 слайд

    Последовательно выполните задания: Приведите пример таких чисел X и Y, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой вариант). Решение

  • x=0, y=2, r1=1, r2=3 (В программе предполагается, что r1 &gt; r2, хотя в условии...

    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.

  • С1 - 6. Требовалось написать программу, которая решает неравенство ax - b &lt; 0...

    22 слайд

    С1 — 6. Требовалось написать программу, которая решает неравенство ax — b < 0 относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и неправильно написал программу.

  • Program nerav2; Var a,b,x : real; Begin readln(a,b,х); if a=0 then if b&gt;0 the...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел а, b, х, при...

    24 слайд

    Последовательно выполните задания: Приведите пример таких чисел а, b, х, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение

  • 1) a=-5, b=10, x=-3 (a – любое отрицательное число) 2) Лишняя часть программы...

    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.

  • С1- 7. Требовалось написать программу, которая определяет, лежит ли точка А(х...

    26 слайд

    С1- 7. Требовалось написать программу, которая определяет, лежит ли точка А(хn, уn ) внутри треугольной области, ограниченной осями координат и прямой у = 2-х («внутри» понимается в строгом смысле, т.е. случай, когда т.А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

  • Var х0, у0,у : real; Begin	 readln(x0,y0); if (x00) then begin у = 2 - x0; if...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел Xо и Yо, при...

    28 слайд

    Последовательно выполните задания: Приведите пример таких чисел Xо и Yо, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев правильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) x=1, y=-1( не учитывается условие y&gt;0 ) Program C1_7; var x0, у0, у: real;...

    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.

  • С1-8. Требовалось написать программу, которая решает неравенство (x - а)/(bx)...

    30 слайд

    С1-8. Требовалось написать программу, которая решает неравенство (x — а)/(bx)>0 относительно х для любых ненулевых чисел а и b(a 0,b0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:

  • Program trud1; Var a, b, x : Real; Begin Readln(a, b, x); If b&gt;0 then Write (...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x, при...

    32 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • 1) a = -7, b = 12, х = 0 (b – любое положительное число, a– любое отрицательн...

    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.

  • С1-9. Требовалось написать программу, которая вводит с клавиатуры координаты...

    34 слайд

    С1-9. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y) (действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.

  • Program tochka1; var x,y: real; begin readln(x,y); If y=0 then If y&gt;=sin(x) t...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел x, y при кото...

    36 слайд

    Последовательно выполните задания: Приведите пример таких чисел x, y при которых программа работает неправильно. Доработайте программу так, чтобы не было случаев ее неправильной работы. Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • 1. Программа работает неверно для точек: (x=3.14, y=0.5) (не верно определяет...

    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.

  • С1_10. Требовалось написать программу, которая решает неравенство (x + а)/(bx)

    38 слайд

    С1_10. Требовалось написать программу, которая решает неравенство (x + а)/(bx)<0 относительно х для любого ненулевого числа b (b0) и любого неотрицательного числа а (a≥0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу с ошибками:

  • Program trud2; Var a, b, x : Real; Begin Readln(a, b, x); If a=0 then If b&gt;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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x, при...

    40 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите, какая часть программы является лишней. Доработайте программу так, чтобы не было случаев ее неправильной работы. Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • a=10, b=-2, х=0 (a – любое положительное число, b – любое отрицательное, х мо...

    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.

  • С1- 11. Требовалось написать программу, которая решает уравнение ах2+bх+с=0 о...

    42 слайд

    С1- 11. Требовалось написать программу, которая решает уравнение ах2+bх+с=0 относительно x для действительных чисел а, b, с, введенных с клавиатуры, о которых заведомо известно, что а0, b0, c 0. Была написана следующая программа. Известно, что программа написана с ошибками.

  • Program korni; Var a, b, с, D, x1, x2 : real; Begin readln(a,b,c,xl,x2); D:=b...

    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 слайд

    Последовательно выполните задания: Приведите пример таких чисел а, Ь, с, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. Решение

  • a=1 b=2 c=1 (дискриминант равен нулю и должен быть корень, а программа выдает...

    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.

  • С1- 12. Требовалось написать программу, которая определяет, имеется ли среди...

    46 слайд

    С1- 12. Требовалось написать программу, которая определяет, имеется ли среди введенных с клавиатуры целых чисел а и b хотя бы одно четное. Была написана следующая программа, в которой программист сделал ошибки:

  • Program chet; Var a, b : integer; Begin readln(a,b); a:=a mod 2; If a&gt;0 then...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a и b, при ко...

    48 слайд

    Последовательно выполните задания: Приведите пример таких чисел a и b, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) a=2, b=1 (первое число четное, а второе больше 0) Program C1_12; var 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.

  • С1-13. Требовалось написать программу, которая решает следующее неравенство a...

    50 слайд

    С1-13. Требовалось написать программу, которая решает следующее неравенство a > bx для любых чисел a и b. Входная информация вводится с клавиатуры. Программист торопился и написал программу некорректно:

  • Program ner; VAR a,b,x: real; BEGIN readln(a,b,x); if b=0 then if a

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x, при...

    52 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите лишнюю часть программы и ошибки. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • 1) a=5, b=-5, x=-3 (b может быть любым отрицательным числом) 2) Лишняя часть...

    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.

  • С1-14. Требовалось написать программу, которая решает следующее неравенство ax

    54 слайд

    С1-14. Требовалось написать программу, которая решает следующее неравенство ax<|b| для любых чисел а и b. Входная информация вводится с клавиатуры. Программист торопился и написал программу некорректно:

  • Program neraven; VAR a, b, x: real; BEGIN readln(a,b,x); If a=0 then writeln(...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел a, b, x, при...

    56 слайд

    Последовательно выполните задания: Приведите пример таких чисел a, b, x, при которых программа работает неправильно. Укажите лишнюю часть программы и ошибки. Доработайте программу так, чтобы не было случаев ее неправильной работы . Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы. Решение

  • 1) a=0, b=0, x=5 (х – любое число, можно не указывать) 2) Лишняя часть програ...

    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.

  • С1- 15. Требовалось написать программу, которая определяет, лежит ли точка А(...

    58 слайд

    С1- 15. Требовалось написать программу, которая определяет, лежит ли точка А(х0,у0) внутри квадратной области, ограниченной прямыми, параллельными осям координат : у=-2, у=2, х=-2, х=2 («внутри» понимается в строгом смысле). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

  • Program tochka; Var х0,у0,у : real; Begin readln(х0,у0); If (x0-2) then If (y0

    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.

  • Последовательно выполните задания: Приведите пример таких чисел х0 и у0, при...

    60 слайд

    Последовательно выполните задания: Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • x=0, y=-7 (точка в область не попала, а программа не выдает никаких сообщений...

    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.

  • С1- 16. Требовалось написать программу, которая определяет, можно ли построит...

    62 слайд

    С1- 16. Требовалось написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами х, у и z. Программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки:

  • Program treug; Var x,у,z :real; Begin Readln (х,у,z); If (x+y&gt;z) then begin I...

    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.

  • Последовательно выполните задания: Приведите пример таких чисел х, у и z, пр...

    64 слайд

    Последовательно выполните задания: Приведите пример таких чисел х, у и z, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) x=2, y=4, z=1 (не выдается никакого сообщения, если первое условие истинно...

    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.

  • С1- 17. Окружность на плоскости задана координатами центра и радиусом. Даны д...

    66 слайд

    С1- 17. Окружность на плоскости задана координатами центра и радиусом. Даны две окружности. Требовалось определить, имеют ли они точку касания. Программист поторопился и сделал в программе ошибки:

  • Program okrug; Var x1,у1,r1,x2,y2,r2 :real; Begin Readln (х1,у1,r1); Readln (...

    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 слайд

    Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) x1=4, y1=4, r1=4 , x2=4, y2=2, r2=2 (случай внутреннего касания) Program C...

    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.

  • С1- 18. Требовалось написать программу нахождения количества цифр в записи н...

    70 слайд

    С1- 18. Требовалось написать программу нахождения количества цифр в записи натурального числа А. Программист поторопился и сделал в программе ошибки:

  • Program cifri; Var a,s :longint; Begin write(‘Введите число’); Readln (А); s:...

    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 слайд

    Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) а=124 (любое число большее 9) Program C1_18; Var a,s :longint; Begin write...

    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.

  • С1-19. Составить программу, которая вводит с клавиатуры координаты точки на п...

    74 слайд

    С1-19. Составить программу, которая вводит с клавиатуры координаты точки на плоскости (x,y) и определяет принадлежность точки заштрихованной области, включая ее границы.

  •  VAR x, y : real; Begin readln ( x, y ); If 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. Найти ошибки в программе. Решение

  • x= 3 , y= 5 {любая пара, для которой выполняются условия: (y&gt;x-1) или (y&gt;0) и...

    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

  • С1-20. Требовалось написать программу, которая вводит с клавиатуры координаты...

    77 слайд

    С1-20. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно

  •  var x, y: real; begin readln(x, y); if y &gt;= x then if y &gt;= 0 then if 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 слайд

    Последовательно выполните задания: Приведите пример таких исходных данных, при которых программа неверно решает поставленную задачу. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы). Решение

  • 1) x=0.5, y=0.2 (проверяемые условия выделяют только область, обозначенную на...

    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.

  • С.С. Крылов, П.А. Якушкин. ЕГЭ 2010. Информатика: сборник экзаменационных зад...

    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

Неожиданный
конец файла

Вы забыли
поставить точку после последнего
END.
Или не совпадает количествоbeginи количествоend

“;” expected

Ждал точку с
запятой

Вы забыли
поставить точку с запятой после
предыдущего оператора

“,” expected

Ждал запятую

Вы указали
слишком мало параметров в обращении
к подпрограмме

“)” expected

Ждал скобку “)”

Вы указали
слишком много параметров в обращении
к подпрограмме

Unknown identifier

Неизвестное
имя

Вы забыли описать
это имя в разделе описаний

Неправильно
записали стандартное имя, например,
ReedLnвместоReadLn

Type mismatch

Несовпадение
типов

В вашей программе
встречаются примерно такие «сладкие
парочки»: VAR c:String; … c:=1+2илиVAR
h:Integer; … h:=9/7

Duplicate identifier

Дубль имени

Одно и то же имя
описано два раза. Например,
VAR a, c, a :String;

Syntax error

Синтаксическая
ошибка

Паскаль
затрудняется назвать причину ошибки.
Часто причина в том, что вы забыли
взять строковую константу в кавычки

BEGIN
expected

Ждал BEGIN

Возможно, не
совпадает количество beginи количествоend

END
expected

Ждал
END

Возможно, не
совпадает количество beginи количествоend

String
constant exeeds line

Строковая
константа превышает допустимую длину

Вы забыли закрыть
кавычки в строковой константе

Line too long

Строчка слишком
длинна

Слишком длинная
строчка в программе (не путать со
строковой константой, которую нужно
брать в кавычки). Не рекомендую
залезать программным текстом за
правый край экрана

Disk full

Диск заполнен

На вашем диске
не осталось места. Надо что-то стереть

Lower bound greater than
upper bound

Нижняя граница
диапазона больше верхней

Например, вы
вместо array[2..5]написалиarray[5..2].

Invalid floating point
operation

Неправильная
операция с вещественным результатом

Sqrt(-25)илиa/0или что-нибудь в этом роде

Ordinal expression
expected

Ждал выражение
порядкового типа

Например, вы
вместо for
i:=1
to
8
написали
for
i:=1
to
8.5

Error in expression

Ошибка в выражении

Например, вы
вместо k:=а*8написалиk:=а**8

Range check error

Ошибка проверки
диапазона

Переменная
в процессе выполнения программы
вышла за пределы допустимого диапазона,
как например, в 1.9

Constant out of range

Константа не в
диапазоне

Величина
константы в программе превосходит
допустимый диапазон

Invalid numeric format

Неправильный
числовой формат

Если, например,
вы по оператору ReadLn(k)в программеVAR
k:Integer; …. ReadLn(k) …
пытаетесь
ввести число 25.3

Более подробное
описание некоторых ошибок вы найдете
в 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);
Интервал [pi/4;pi]
Начальное условие y(a)=1
Пишет ошибка в 44 строке…

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
program kursovaya_Runge_Kutt_Eiler;
uses crt,graphABC;
const 
h=0.001;{Точность}
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.4;
{Метод Рунге-Кутты}
  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, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3);
  until xi>Pi;
readln;
{Метод Эйлера}
writeln('Метод Эйлера:');
writeln('№=',j, '      | ','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, '  | ','x=',xm:5:3, ' | ','y=',ym:5:3);
  until xm>Pi;
{ Построение графика функции }
SetWindowHeight(700);{Высота экрана в пикселях}
  SetWindowWidth(900);{Ширина экрана в пикселях}
  SetPenColor(clBlack);{Цвет линий}
    SetPenWidth(2);{Толщина линий в пикселях}
    {Построение осей графика 0xy}
    line(180,75,900,75);
    line(220,0,220,700);
    line(220,0,220-10,10);
    line(220,0,220+10,10);
    line(900,75,900-10,75-10);
    line(900,75,900-10,75+10);
{Построение шкал графика}
for p:=1 to 8 do
   begin
    line(220+75*p,70,220+75*p,80);
    line(215,75+75*p,225,75+75*p);
   end;
{Вывод на экран текста,заключённого в ' '}
TextOut(205,80,'0');
TextOut(880,55,'x');
TextOut(225,15,'y');
{Вывод на экран цифрового значения шкал по X}
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(220+75*p,55,s);{Вывод элемента s на экран}
    q:=q+0.4;{Счётчик}
  end;
{Вывод на экран цифрового значения шкал по Y}
q:=-0.8;
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(180,750-75*p,s);{Вывод элемента s на экран}
    q:=q+0.1;{Счётчик}
  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:=750;{коэф.}
    Setpixel(round(a[p]*(n/4)+220),round(abs(b[p]*n)+77),clRed); {Вывод на экран пикселей с указанным цветом 1-го графика}
    Setpixel(round(a1[p]*(n/4)+220),round(abs(b1[p]*n)+77),clBlue);{Вывод на экран пикселей с указанным цветом 2-го графика}
    p:=p+1;{Счётчик}
    end;
readln;
end.



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

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)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
program kursovaya_Runge_Kutt_Eiler;
uses crt,graphABC;
const 
h=0.001;{Точность}
var 
  i,j,p:integer;
  n,q:real;
  s:string;   { Строка } 
  r1,r2,r3,r4,yi,xi,dy,xm,ym:real;
  {Одномерные массивы решения данного дифф. уравнения}
  a:array[0..2400] of real;
  b:array[0..2400] of real;
  a1:array[0..2400] of real;
  b1:array[0..2400] 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.4;
{Метод Рунге-Кутты}
  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, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3);
  until xi>Pi;
readln;
{Метод Эйлера}
writeln('Метод Эйлера:');
writeln('№=',j, '      | ','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, '  | ','x=',xm:5:3, ' | ','y=',ym:5:3);
  until xm>Pi;
{ Построение графика функции }
SetWindowHeight(700);{Высота экрана в пикселях}
  SetWindowWidth(900);{Ширина экрана в пикселях}
  SetPenColor(clBlack);{Цвет линий}
    SetPenWidth(2);{Толщина линий в пикселях}
    {Построение осей графика 0xy}
    line(180,75,900,75);
    line(220,0,220,700);
    line(220,0,220-10,10);
    line(220,0,220+10,10);
    line(900,75,900-10,75-10);
    line(900,75,900-10,75+10);
{Построение шкал графика}
for p:=1 to 8 do
   begin
    line(220+75*p,70,220+75*p,80);
    line(215,75+75*p,225,75+75*p);
   end;
{Вывод на экран текста,заключённого в ' '}
TextOut(205,80,'0');
TextOut(880,55,'x');
TextOut(225,15,'y');
{Вывод на экран цифрового значения шкал по X}
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(220+75*p,55,s);{Вывод элемента s на экран}
    q:=q+0.4;{Счётчик}
  end;
{Вывод на экран цифрового значения шкал по Y}
q:=-0.8;
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(180,750-75*p,s);{Вывод элемента s на экран}
    q:=q+0.1;{Счётчик}
  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:=750;{коэф.}
    Setpixel(round(a[p]*(n/4)+220),round(abs(b[p]*n)+77),clRed); {Вывод на экран пикселей с указанным цветом 1-го графика}
    Setpixel(round(a1[p]*(n/4)+220),round(abs(b1[p]*n)+77),clBlue);{Вывод на экран пикселей с указанным цветом 2-го графика}
    p:=p+1;{Счётчик}
    end;
readln;
end.



0



volvo

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32592 / 21061 / 8134

Регистрация: 22.10.2011

Сообщений: 36,332

Записей в блоге: 8

04.05.2017, 22:46

4

Слишком большой коэффициент задан, точка вылезает за пределы окна и происходит вылет программы. При

Pascal
113
n := 375;

ничего не вылетает.



0



Роникс

0 / 0 / 0

Регистрация: 27.04.2017

Сообщений: 16

04.05.2017, 23:17

 [ТС]

5

Огромное спасибо! А можете мне подсказать за что этот коэф. отвечает? И ещё вопрос можно ли сделать, чтобы на экран значений решения Рунге-Кутты и Эйлера, была нумерация от 0 до 10?

Добавлено через 7 минут
Я вроде бы сделал, посмотрите пожалуйста, сейчас программа работает верно?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
program kursovaya_Runge_Kutt_Eiler;
uses crt,graphABC;
const 
h=0.001;{Точность}
var 
  i,j,p:integer;
  n,q:real;
  s:string;   { Строка } 
  r1,r2,r3,r4,yi,xi,dy,xm,ym:real;
  {Одномерные массивы решения данного дифф. уравнения}
  a:array[0..2400] of real;
  b:array[0..2400] of real;
  a1:array[0..2400] of real;
  b1:array[0..2400] 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.4;
{Метод Рунге-Кутты}
  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 230=0 then
    { Вывод результатов }
    writeln('№=',i/230, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3);
  until xi>Pi;
readln;
{Метод Эйлера}
writeln('Метод Эйлера:');
writeln('№=',j/230, '      | ','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 230=0 then
    { Вывод результатов }
    writeln('№=',j/230, '  | ','x=',xm:5:3, ' | ','y=',ym:5:3);
  until xm>Pi;
{ Построение графика функции }
SetWindowHeight(700);{Высота экрана в пикселях}
  SetWindowWidth(900);{Ширина экрана в пикселях}
  SetPenColor(clBlack);{Цвет линий}
    SetPenWidth(2);{Толщина линий в пикселях}
    {Построение осей графика 0xy}
    line(180,75,900,75);
    line(220,0,220,700);
    line(220,0,220-10,10);
    line(220,0,220+10,10);
    line(900,75,900-10,75-10);
    line(900,75,900-10,75+10);
{Построение шкал графика}
for p:=1 to 8 do
   begin
    line(220+75*p,70,220+75*p,80);
    line(215,75+75*p,225,75+75*p);
   end;
{Вывод на экран текста,заключённого в ' '}
TextOut(205,80,'0');
TextOut(880,55,'x');
TextOut(225,15,'y');
{Вывод на экран цифрового значения шкал по X}
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(220+75*p,55,s);{Вывод элемента s на экран}
    q:=q+0.4;{Счётчик}
  end;
{Вывод на экран цифрового значения шкал по Y}
q:=-0.8;
for p:=1 to 8 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(180,750-75*p,s);{Вывод элемента s на экран}
    q:=q+0.1;{Счётчик}
  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:=375;{коэф.}
    Setpixel(round(a[p]*(n/4)+220),round(abs(b[p]*n)+77),clRed); {Вывод на экран пикселей с указанным цветом 1-го графика}
    Setpixel(round(a1[p]*(n/4)+220),round(abs(b1[p]*n)+77),clBlue);{Вывод на экран пикселей с указанным цветом 2-го графика}
    p:=p+1;{Счётчик}
    end;
readln;
end.



0



Роникс

0 / 0 / 0

Регистрация: 27.04.2017

Сообщений: 16

13.05.2017, 12:03

 [ТС]

6

Ребят изменил программу до такого вида, но график строится почему-то зеркально(проверил в маткаде). Исправьте пожалуйста…

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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.



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.

Понравилась статья? Поделить с друзьями:
  • Найти и исправить ошибки в оформлении доверенности
  • Найти и исправить ошибки в историческом тексте
  • Найти и исправить ошибки 3 класс рабочая тетрадь
  • Найти и исправить логическую ошибку в тексте
  • Найти и исправить лексические ошибки российская армия формирует