Пожалуйста, пользуйся кнопкой CODE при вставке текста программы.
Смотри ошибки компиляции: 1) Syntax error, ";" expected but "ELSE" found с указанием на строку означает - что перед else не ставится ";". 2) в case используются только перечислимые типы, а dskt - тип real. Варианты выбора - тоже значения или диапазоны перечислимых типов. Т.е. в данном случае case заменяется на несколько if. 3) dskt=0:x1:=(-b+sqrt(dskt))/2a - наверное 2*a
Ну и далее, по мере исправления...
-kapa-
7.05.2012 19:22
Цитата(Федосеев Павел @ 7.05.2012 13:51)
Пожалуйста, пользуйся кнопкой CODE при вставке текста программы.
Смотри ошибки компиляции: 1) Syntax error, ";" expected but "ELSE" found с указанием на строку означает - что перед else не ставится ";". 2) в case используются только перечислимые типы, а dskt - тип real. Варианты выбора - тоже значения или диапазоны перечислимых типов. Т.е. в данном случае case заменяется на несколько if. 3) dskt=0:x1:=(-b+sqrt(dskt))/2a - наверное 2*a
Ну и далее, по мере исправления...
суть не в этом сама суть программы мне не понятна чтобы работала в норме с заданием
Федосеев Павел
7.05.2012 23:40
Цитата
вот мой вариант
Цитата
сама суть программы мне не понятна чтобы работала в норме с заданием
Если грамматические и синтаксические ошибки устраивают, то в чём собственно вопрос? Как структура - правильно - решение уравнения вынесено в процедуру.
Начни отладку пошагам - сначала отладь решение квадратных уравнений с выводом корней на экран. Потом делай это в цикле 3 раза
const
N = 3;
........
S:=0;
for i:=1to N dobegin{1. ввод коэффициентов a, b, c}
..................
{2. решение квадратного уравнения и получение его корней x1, x2}
SqrEquat(a, b, c, x1, x2);
{3. сложение корней}
S:=S+x1+x2;
end;
S:=S/(N*2); {вычисление среднего арифметического}
Гость
8.05.2012 17:59
Цитата(Федосеев Павел @ 7.05.2012 19:40)
Если грамматические и синтаксические ошибки устраивают, то в чём собственно вопрос? Как структура - правильно - решение уравнения вынесено в процедуру.
Начни отладку пошагам - сначала отладь решение квадратных уравнений с выводом корней на экран. Потом делай это в цикле 3 раза
const
N = 3;
........
S:=0;
for i:=1to N dobegin{1. ввод коэффициентов a, b, c}
..................
{2. решение квадратного уравнения и получение его корней x1, x2}
SqrEquat(a, b, c, x1, x2);
{3. сложение корней}
S:=S+x1+x2;
end;
S:=S/(N*2); {вычисление среднего арифметического}
если честно мне не понятно
TarasBer
8.05.2012 18:48
Цитата(Гость @ 8.05.2012 13:59)
если честно мне не понятно
Если честно, то нам уже самим не очень понятно, что именно вам не понятно.
Федосеев Павел
8.05.2012 19:17
У тебя структура программы выбрана верно, но в самой реализации допущены ошибки. Поэтому для решения задачи, предлагаю разбить её на ряд небольших задач.
Итак, постановка задачи
Цитата
Найти среднее арифметическое действительных корней трёх квадратных уравнений
Будем решать последовательно. Для начала, создадим и отладим функцию для решения квадратных уравнений. Назовём её SqrEquat (у тебя её "звали" просто "K"). Действия функции: 1) если корня два (дискримминант больше 0), то функция будет возвращать два корня x1 и x2, а само значение функции будет равно 2; 1) если корень один (дискримминант равен 0), то функция будет возвращать два корня x1 и x2, просто одинаковых (x1==x2), а само значение функции будет равно 1; 2) если действительных корней нет, то возвращаться будет два корня равных нулю (x1==x2==0), а само значение функции будет равно 0. Делаем тестовую программу.
program test;
function SqrEquat( a, b, c : real; {коэффициенты квадратного уравнения}var x1, x2 : real) {корни уравнения}
: integer; {функция возвращает количество действительных корней уравнения}begin
.....................{реализация функции}end;
var
n : integer;
x1, x2 : real;
begin
n:=SqrEquat(4, 20, 24, x1, x2);
case n of0: WriteLn('There are not a real roots.');
1: WriteLn('There is a single root x= ', x1);
2: WriteLn('There are double roots x1=', x1, ', x2=', x2);
end;
end.
После получения работающего кода функции, его можно скопировать в "настоящую" программу, где на основе корней уравнения выполняются дальнейшие расчёты. Например,
............................
var
i, n, SumN : integer;
x1, x2,
a, b, c,
SumX : real;
begin
SumN:=0;{количество действительных корней во всех уравнениях}
SumX:=0;{сумма всех действительных корней во всех уравнениях}for i:=1to3dobegin
writeln('Введите значение коэфициэнтов ', i, '-го квадратного уравнения: ');
readln(a,b,c);
n:=SqrEquat(a, b, c, x1, x2);
case n of1: SumX:=SumX+x1;
2: SumX:=SumX+x1+x2;
end;
SumN:=SumN+n;
end;
if SumN<>0then
WriteLn('The average of a real roots is ', SumX/SumN);
else
WriteLn('There are not a real roots.');
end.
Гость
13.05.2012 2:49
Цитата(Федосеев Павел @ 8.05.2012 15:17)
У тебя структура программы выбрана верно, но в самой реализации допущены ошибки. Поэтому для решения задачи, предлагаю разбить её на ряд небольших задач.
Итак, постановка задачи
Будем решать последовательно. Для начала, создадим и отладим функцию для решения квадратных уравнений. Назовём её SqrEquat (у тебя её "звали" просто "K"). Действия функции: 1) если корня два (дискримминант больше 0), то функция будет возвращать два корня x1 и x2, а само значение функции будет равно 2; 1) если корень один (дискримминант равен 0), то функция будет возвращать два корня x1 и x2, просто одинаковых (x1==x2), а само значение функции будет равно 1; 2) если действительных корней нет, то возвращаться будет два корня равных нулю (x1==x2==0), а само значение функции будет равно 0. Делаем тестовую программу.
program test;
function SqrEquat( a, b, c : real; {коэффициенты квадратного уравнения}var x1, x2 : real) {корни уравнения}
: integer; {функция возвращает количество действительных корней уравнения}begin
.....................{реализация функции}end;
var
n : integer;
x1, x2 : real;
begin
n:=SqrEquat(4, 20, 24, x1, x2);
case n of0: WriteLn('There are not a real roots.');
1: WriteLn('There is a single root x= ', x1);
2: WriteLn('There are double roots x1=', x1, ', x2=', x2);
end;
end.
После получения работающего кода функции, его можно скопировать в "настоящую" программу, где на основе корней уравнения выполняются дальнейшие расчёты. Например,
............................
var
i, n, SumN : integer;
x1, x2,
a, b, c,
SumX : real;
begin
SumN:=0;{количество действительных корней во всех уравнениях}
SumX:=0;{сумма всех действительных корней во всех уравнениях}for i:=1to3dobegin
writeln('Введите значение коэфициэнтов ', i, '-го квадратного уравнения: ');
readln(a,b,c);
n:=SqrEquat(a, b, c, x1, x2);
case n of1: SumX:=SumX+x1;
2: SumX:=SumX+x1+x2;
end;
SumN:=SumN+n;
end;
if SumN<>0then
WriteLn('The average of a real roots is ', SumX/SumN);
else
WriteLn('There are not a real roots.');
end.
спасибо большое)))
kapa
16.05.2012 15:29
вот все к чему я смог прийти program koren;{Íàéòè ñðåäíåå àðèôìåòè÷åñêîå äåéñòâèòåëüíûõ êîðíåé òð¸õ êâàäðàòíûõ óðàâíåíèé} uses crt; var SRA,X1,X2,q,w,e,S:real; i,K:integer; F:boolean; procedure squart(A,B,C:real; var Y1,Y2:real;VAr F:boolean); var D:real; begin D:=B*B-4*A*C; if D>=0 then begin Y1:=(-B+SQRT(D))/(2*A); Y2:=(-B-SQRT(D))/(2*A); F:=True; end else begin F:=False; Y1:=0; Y2:=0; end; end; begin clrscr; K:=0; S:=0; begin write('Ââåäèòå êàæäûé ÷ëåí òðåõ êâàäðàòíûõ óðàâíåíèé '); for i:=1 to 3 do readLn(q,w,e); squart(q,w,e,X1,X2,F); writeln(X1,X2,F); if F=True then begin K:=K+2; S:=X1+X2+S; end; end; SRA:=S/K; writeln(SRA); readkey; End.
помогите пожалуйста найти и исправить недочеты
TarasBer
16.05.2012 19:22
Используй же тег CODE, тебе же сказали, нам нихрена не доставляет форматировать код руками.
Федосеев Павел
16.05.2012 23:20
Спойлер(Показать/Скрыть)
program Average;
function SqrEquat( a, b, c : real; {коэффициенты квадратного уравнения}var x1, x2 : real) {корни уравнения}
: integer; {функция возвращает количество действительных корней уравнения}var
D : Real;
begin
D:=Sqr(b)-4*a*c;
if D>=0thenbegin
x1:=(-b-Sqrt(D))/(2*a);
x2:=(-b+Sqrt(D))/(2*a);
if D=0then
SqrEquat:=1else
SqrEquat:=2;
endelsebegin
x1:=0;
x2:=0;
SqrEquat:=0;
end;
end;
var
i, n, SumN : integer;
x1, x2,
a, b, c,
SumX : real;
begin
SumN:=0;{количество действительных корней во всех уравнениях}
SumX:=0;{сумма всех действительных корней во всех уравнениях}for i:=1to3dobegin
writeln('Введите значение коэфициэнтов ', i, '-го квадратного уравнения: ');
readln(a,b,c);
n:=SqrEquat(a, b, c, x1, x2);
WriteLn(n:3, x1:8:2, x2:8:2);
case n of1: SumX:=SumX+x1;
2: SumX:=SumX+x1+x2;
end;
SumN:=SumN+n;
end;
if SumN<>0then
WriteLn('The average of a real roots is ', SumX/SumN)
else
WriteLn('There are not a real roots.');
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.