В приложении я добавил само задание... Текст программы выложу чуть ниже, а сейчас объясню суть проблемы...
Не смотрите что я не сделал для 3 части , уменя проблема с 1 и 2 частью
... Не могу понять почему у меня не хочет выполняться первый цмкл, с тем же While... это я проверял так, вывел какуюто надпись перед и после цикла и получилось так, что 1-й цикл не хотит выполняться... вродебы всё удовлетворяет, но почему, я не понимаю
... Помогите пожалуйста...
П.с.Правда хоть это и первый курс, но я решил выпендриться и решить не так как в условии... дело в том, что мы массивы не изучали... мы изучили только эти цыклы, но ещё и if then else... Вобщем это не важно... найдите ошибку если сможите...
Вот сама программа:
program lab5_var13;
uses crt;
const xn=0.4; xk=2.8; hx=0.4; a=1.7;
var x,y:real; v,i:integer; tab:array[1..7,1..2] of real;
begin
clrscr;
writeln('vubirite sposob reshenija i postavte cifry:');
writeln('1) WHILE');
writeln('2) REPEAT');
writeln('3) FOR');
write('Variant => '); read(v);
if v=1
then
begin
x:=xn;
i:=1;
writeln('nachali...');
while x<=a
do
begin
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
end;
writeln('prodolguli...');
while (x<=xk+hx)and(x>a)
do
begin
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
end;
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;
if v=2
then
begin
x:=xn;
i:=1;
writeln('nachali...');
repeat
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x<a);
writeln('kapec...');
repeat
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x>a);
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;
if v=3
then
begin
end;
readkey
end.
Прикрепленные файлы
LR5.doc ( 33 килобайт )
Кол-во скачиваний: 8
В цикле while всё вроде бы работает нормально,а вот repeat у Вас неправильно написан.Посмотрите,что должно означать условие после until.
Вывод результатов лучше всего писать в самом конце программы - один раз вместо трёх.
К тому же Ваша программа слишком привязана к задаче,стоит немного изменить входные данные - и придётся почти заново её писать.Старайтесь делать её универсальнее.
Сорри, не заметил i глобальная перем. вроде должно работать
А почему Вы решили, что что-то не работает?
CrAzY_GeNiYS,
посмотрите как будет выводиться теперь, я дописал несколько строчек.
Тьфу я дибил... я ж забыл, что я записую результат в таблицу, а потом уже из таблици вывожу... Всё терь понял какого оно не выводилось ...
А вот теперь вопрос... Я немного отредактировал код для вывода через Репит, но оно не хочет заполнять последние 3 или 4 параметра ... опять не пойму чо...
Вот код:
if v=2
then
begin
x:=xn;
i:=1;
repeat
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x<=a);
repeat
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x>a);
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;
Мож я чо в Антил не так написал?... ну всмысле в условии ...
В until пишется условие,при выполнении которого цикл завершается,насколько я помню. То есть Вам нужно поменять знаки,ну и некоторые условия можно убрать.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)