Тэги!! Правила Форума, п.5, и правила раздела задачи, п.2. Lapp
Lapp
12.04.2010 7:55
Цитата(cruising @ 11.04.2010 23:28)
If x>0then writeln('')else
... Что мне нужно написать в строке if?
А зачем там что-то писать? Она вообще не нужна. Я не знаю, что у вас там подразумевается под "системой тестов", но твое данное выражение вычислимо всегда, поэтому никаких ограничений на x вообще не нужно. Можешь вывести фразу типа: "выражение ... определено при любом значении аргумента x".
Добавлено через 3 мин. Или, может, имются в виду вычислительные возможности компьютера?.. Тогда нужно проводить анализ, когда отдельные составляющие выражения испытывают переполнение или потерю значимости. Если действительно это нужно - скажи, подумаем, как это сделать.
TarasBer
12.04.2010 14:03
> Или, может, имются в виду вычислительные возможности компьютера?..
Вы имели в виду ограничения стандартных вещественных типов? А то возможности компьютера по умножению чисел - они значительно превосходят то, что может понадобиться обычному пользователю.
> y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));
Такой записью вы себя ограничиваете. Возводить в целую степень и извлекать нечётные корни можно и из отрицательных чисел. И из нуля.
cruising
12.04.2010 19:42
Если я убираю строку с оператором if, запускаю программу, вставляю числло, у меня выдает: ошибка! вещественное деление на 0. А когда в формуле y:=exp(1/3*ln(x-x*x))+exp(5*ln(x)) меняю минус на плюс y:=exp(1/3*ln(x+x*x))+exp(5*ln(x)), всё считает верно, а с минусом ни как не хочет работать.
TarasBer
12.04.2010 19:50
Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.
function Root3(e: extended): extended;
beginif e = 0then Root3 := 0elseif e > 0then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;
cruising
12.04.2010 19:59
Цитата(TarasBer @ 12.04.2010 15:50)
Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.
function Root3(e: extended): extended;
beginif e = 0then Root3 := 0elseif e > 0then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;
После function выдаёт ошибка! ожидался оператор
Ozzя
12.04.2010 20:03
Цитата
После function выдаёт ошибка! ожидался оператор
Наверняка ошибка до, а не после. Проверь, стоит ли ; после оператора, стоящего перед function
TarasBer
12.04.2010 20:03
Мой код надо вставить перед первым begin.
cruising
12.04.2010 20:21
Цитата(TarasBer @ 12.04.2010 16:03)
Мой код надо вставить перед первым begin.
вот что получилось, но сейчас выдает ошибка: неизвестное имя типа extended
Var x,x1,y,y1,y2:real;T:Boolean;
function Root3(e: extended): extended;
beginif e = 0then Root3 := 0elseif e > 0then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;
Begin
Writeln('введите число для вычисления выражения1');
Read(x);
Writeln('Результат задания а');
Begin
y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));
Writeln ('при х=',x:6:3,' y=',y:6:3);
y1:=abs(y);
Writeln('Абсолютное значение y1=', y1:6:3);
y2:=sqr(y);
Writeln('Квадрат у=',y2:6:3);
End;
Writeln('Введите координаты точки');
Readln(x1,y1);
T:=(sqr(x1)+sqr(y1)<=1);
Writeln('Результат задания б:',t);
End.
М
Я не понимаю - сколько раз нужно повторить? Тэги!! В след. раз закрою тему. Lapp
TarasBer
12.04.2010 21:02
1. Вы эту функцию вставили в код, но никак не используете. 2. В Турбо Паскале по умолчанию пользоваться типом extended нельзя. Options->Compiler, там ищете галочку у надписи что-то вроде "8087", справа снизу окна где-то, ставите туда галочку, убираете галочку с "Emulation", как-то так.
cruising
12.04.2010 21:10
Цитата(TarasBer @ 12.04.2010 17:02)
1. Вы эту функцию вставили в код, но никак не используете. 2. В Турбо Паскале по умолчанию пользоваться типом extended нельзя. Options->Compiler, там ищете галочку у надписи что-то вроде "8087", справа снизу окна где-то, ставите туда галочку, убираете галочку с "Emulation", как-то так.
да я не в турбопаскале делаю, а в pascal abc, может в этом ещё причина
Ozzя
12.04.2010 21:55
Цитата
да я не в турбопаскале делаю, а в pascal abc, может в этом ещё причина
Да. Неужели трудно догадаться extended поменять на real?
cruising
12.04.2010 23:17
Цитата(Ozzя @ 12.04.2010 17:55)
Да. Неужели трудно догадаться extended поменять на real?
Да я не волоку вообще в этом, я заочник, разбираться надо долго с этим, времени нет! Поменял extended на real, всё равно ошибка: вещественное деление на 0, что ещё может быть?
Добавлено через 2 мин. Главное когда под корнем минус меняю на плюс, всё прекрасно работает, а с минусом ошибка и всё тут
TarasBer
13.04.2010 13:05
> Да я не волоку вообще в этом, я заочник, разбираться надо долго с этим, времени нет!
Плохо.
> Главное когда под корнем минус меняю на плюс, всё прекрасно работает, а с минусом ошибка и всё тут
Да потому что ты тупо добавил в код новую функцию, но ваще её не используешь, ты считаешь по-старому (y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));). Программа по-прежнему пытается делать то, что тут написано, то есть взять логарифм от отрицательного числа (ты, надеюсь, в курсе, что у отрицательного числа нельзя взять вещественный логарифм?).
Как использовать функцию - вообще интуитивно очевидно должно быть, но раз ты не "волочешь" и не хочешь разбираться, то толку тебе помогать.
cruising
13.04.2010 18:18
TarasBer, ну да так то, руки дойдут, разбирусь как-нибудь, спасибо зо то что, хотя бы попытался мне помочь.
Гость
25.04.2010 17:53
program khorolets8;
var
ah: array[1..10,1..10] of real;
i,j,m,n,s: integer;
begin
writeln('Vod m,n'); readln(m,n); writeln('Vod matrix');
for i:=1to m dofor j:=1to n do read(ah[i,j]);
s:=0;
for i:=1to m dofor j:=1to n doIF (ah[i,j]>0)and(ah[i,j]<ah[j-1])
then s:=s+ah[i,j];
writeln(' ':4,'s=',s:3);
end.
выбивает 26ой error, ошибка в строчке с if... в паскале я мало грамотен, помогите, а?
volvo
25.04.2010 18:05
Ah - двумерный массив, значит для обращения к нему требуется 2 индекса. В той строчке везде по два, как положено, но последнее обращение - с одним индексом. Куда второй потерялся?
Гость
25.04.2010 18:17
В блок схеме я писал в том месте ...Аh[1,n-1]
Tau
30.05.2010 19:16
Цитата(TarasBer @ 12.04.2010 15:50)
Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.
function Root3(e: extended): extended;
beginif e = 0then Root3 := 0elseif e > 0then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;
По правилам структурирования программ, функция должна иметь один выход, а у вас 3.
volvo
30.05.2010 19:34
Цитата
функция должна иметь один выход, а у вас 3
Научитесь сначала читать код, потом возьметесь за критику. Где 3 выхода? Я вижу только один выход из подпрограммы. Перед последним End-ом. Все остальное - не более чем запоминание результата, который функция может вернуть (а может и НЕ вернуть, как повезет).
Кстати, ссылку на "правила структурирования программ" можно получить? (с указанием автора, желательно - не Васи Пупкина)... И заодно объяснение, чем подобная функция нарушает правила структурирования... Иначе - все, что я вижу в этом посте - это поднятие старой темы, причем необоснованное. Если ответа не последует в течении 12 часов - пост №18 будет просто удален. Как и все последующие.
Гость
30.05.2010 20:13
Цитата(volvo @ 30.05.2010 15:34)
Научитесь сначала читать код, потом возьметесь за критику. Где 3 выхода? Я вижу только один выход из подпрограммы. Перед последним End-ом. Все остальное - не более чем запоминание результата, который функция может вернуть (а может и НЕ вернуть, как повезет).
Кстати, ссылку на "правила структурирования программ" можно получить? (с указанием автора, желательно - не Васи Пупкина)... И заодно объяснение, чем подобная функция нарушает правила структурирования... Иначе - все, что я вижу в этом посте - это поднятие старой темы, причем необоснованное. Если ответа не последует в течении 12 часов - пост №18 будет просто удален. Как и все последующие.
1.Выход из функции все должен находится перед закрывающем операндом.(Примеры: MFC) 2.Любую книгу возьми про стили программирования. 3.Поэтому желательно писать так (если вам конечно не жалко памяти, если жалко памяти пишите на asm'е):
function Root3(e: extended): extended;
integer tmp;
beginif (e = 0) then
tmp := 0;
elseif (e > 0) then
tmp := exp(1/3 * ln(e));
else
tmp := -exp(1/3 * ln(-e));
Root3 := tmp;
end;
Lapp
31.05.2010 6:56
Цитата(Гость @ 30.05.2010 17:13)
1.Выход из функции все должен находится перед закрывающем операндом.(Примеры: MFC) 2.Любую книгу возьми про стили программирования. 3.Поэтому желательно писать так (если вам конечно не жалко памяти, если жалко памяти пишите на asm'е):
function Root3(e: extended): extended;
integer tmp;
beginif (e = 0) then
tmp := 0;
elseif (e > 0) then
tmp := exp(1/3 * ln(e));
else
tmp := -exp(1/3 * ln(-e));
Root3 := tmp;
end;
Улет, просто улет!! volvo, спасибо, что оставил мне удовольствие ответить этому олуху.. )) На этот раз, в соответствии с тоном, взятым Гостем, отброшу весь этикет.
Гость, ты бы потрудился сначала узнать необходимый минимум по предмету перед тем, как дискутировать с профессионалами, а? Или уж по САМОМУ минимуму - приводил бы корректный (компилирующийся) код.. "Три выхода"! три кварка! три карты.. три апельсина! )) смех, да и только..
Совет тебе: урой своего учителя. Ну, или хотя бы не прогуливай занатия..
кэшмарт.. три выхода.. "желательно писать так".. "если вам конечно не жалко памяти".. держите меня трое.. нет, лучше семеро ))..
Гость, не обессудь, линк на твое сообщение отправляется в раздел "Юмор", в тему "Смешные случаи на форуме" или что-то в этом роде .
TarasBer
31.05.2010 13:47
Да тут уже на форуме говорили, что при изучении Паскаля детям принудительно не дают в середине кода присваивать значение результату функции, чтобы им легче было переходить на другие языки, где такого нету. (Может это и правильно, чтобы детей лучше обточить под потребности индустрии...) Вот и рождаются такие перлы, да и отступы какие-то больно большие, не паскальные, да и способ объявления переменной.
Добавлено через 1 мин. Кстати, а зачем условие в блоке if заключать в скобчки?
SKVOZNJAK
31.05.2010 19:28
Цитата
1.Выход из функции все должен находится перед закрывающем операндом.
Зря смеётесь, примерно так часто и делается, просто по общепринятым правилам некоторых сообществ нельзя говорить о том что реально применяется на практике. По ходу человек готовится писать на чистом Си, без ООП, а там как раз в сложных ситуациях применяется или бреак или гото. Причём код с бреак читается намного хуже чем с гото. Подставьте в пример кода гото и он заработает на все сто, за исключением ошибок в синтаксисе. Достаточно посмотреть примеры опенсорсных сишных программ чтобы уяснить какие методы можно применять в реальных программах а какие в показательных учебных.
volvo
31.05.2010 19:56
Цитата
По ходу человек готовится писать на чистом Си, без ООП
Тогда пусть этот челвек отвечает в разделе "Другие языки", а не лезет в Паскаль, коли не знает того, что Паскаль позволяет использовать имя функции (как LValue) для промежуточного хранения результата функции (либо до ее окончания, либо до Exit-а)
Цитата
Причём код с бреак читается намного хуже чем с гото.
За код с goto у нас не задумываясь, и не смотря на любые прежние заслуги, увольняют без выходного пособия. Точка.
Цитата
Достаточно посмотреть примеры опенсорсных сишных программ чтобы уяснить какие методы можно применять в реальных программах а какие в показательных учебных.
Опенсорс - это "я так делаю, потому что моя левая пятка так захотела, или мне так проще, и плевать на мнение остальных". Не далее, как сегодня я уже видел подобный хит: Кнопки WinAPI (а потом опять будут разговоры, что программа не работает, и опять во всем будут винить ОС).
Опенсорс - помойка, и очень часто - пример того, как писать НЕ надо...
"Теперь по Борщову" (С)
Цитата
1.Выход из функции все должен находится перед закрывающем операндом.(Примеры: MFC) 2.Любую книгу возьми про стили программирования. 3.Поэтому желательно писать так (если вам конечно не жалко памяти, если жалко памяти пишите на asm'е):
MFC - это не Паскаль, посему примером для меня быть не может в данном случае. Язык не тот. О разнице между return и <имя_функции> := я уже написал выше. Си нервно курит в стороне в данном случае...
Я же просил ссылку, а не абстрактного "Васю Пупкина", даже если его зовут Herb Sutter. Я все еще жду...
Мне как раз памяти жалко, вот я временную переменную не описал, в отличие от... Не нужно это. А на чем писать - это я как-нибудь сам разберусь, без посторонней помощи.
TarasBer
31.05.2010 20:05
> За код с goto у нас не задумываясь, и не смотря на любые прежние заслуги, увольняют без выходного пособия. Точка.
Это тоже фанатизм какой-то. Что, считается лучше так?
repeat
...
if oops1 then break;
...
if oops2 then break;
...
break;
until false;
Или так?
try
...
if oops1 thenraise e;
...
if oops2 thenraise e;
...
except
on e: MyCoolException dobeginend;
Или так?
procedure MyCoolProc;
begin
...
if oops1 then Exit;
...
if oops2 then Exit;
...
end;
...
MyCoolProc
Чем это лучше гото? Гото Папа Римский запретил, поэтому его нельзя использовать?
Unconnected
31.05.2010 21:30
Цитата
За код с goto у нас не задумываясь, и не смотря на любые прежние заслуги, увольняют без выходного пособия.
Извиняюсь за оффтоп, не удержался:
Цитата
-Вы уволены! -?? за что?? -А на 523 строчке?
SKVOZNJAK
1.06.2010 2:12
Цитата
За код с goto у нас не задумываясь, и не смотря на любые прежние заслуги, увольняют без выходного пособия. Точка.
Тогда никогда не смотри HD рипы закоденные x264, там goto хватает. Мимоходом лишил кучу народа радости. В блоге какого-то программиста прочитал высказывание http://love5an.livejournal.com/tag/programming второе снизу.
Цитата
Опенсорс - помойка, и очень часто - пример того, как писать НЕ надо...
А архитектура виндовса - "грешно смеяться над убогими", столько раз переписывается сначала а получается всё тоже самое, только жрёт больше и нужную кнопку искать дольше. Если бы опенсорсный код был однозначно плохой, при минимальном финансировании софт на нём написанный вымер бы сам по себе, но он эволюционирует.
volvo
1.06.2010 14:45
Цитата
Что, считается лучше так?
Я не пишу на Паскале, и на Дельфи тоже не пишу. Так что во-первых, в языке существуют другие структуры, позволяющие в подавляющем большинстве случаев обойтись без goto (в смысле, в подавляющем большинстве случаев, когда сторонники "лапшеобразного кода" рекомендуют использовать goto: например, немедленный выход из многократно вложенного цикла), а во-вторых, ни одна программа, тестирующая синтаксис проекта, не пропустит его, пока там есть по крайней мере один оператор goto. Какой на фиг goto, если программа-тестер исходного текста выдает предупреждение
когда перед знаком присваивания (или после него) пропущен пробел;
когда после знака, обозначающего комментарий, до начала самогО закомментированного текста стоит меньше или больше двух пробелов;
когда имя переменной описано в одном регистре, а использовано - в другом (хотя язык - не case-sensitive, как Си)
?
Lapp
1.06.2010 16:10
Развитие дискуссии в сем треде интересно с точки зрения подтверждения некоторых широко известных положений, как то: - любая тема, в которой употреблено название языка, но нет конкретики задачи, свалится к философствованию по поводу языков вообще; - любая тема про языки вообще придет к обсуждению GOTO.
Короче, если кто-то еще считает, что Гостю мало досталось - милости прошу высказываться. Ежели про GOTO - then goto "соответствующая тема" (была, точно совершенно была, ищите сами, мне в лом)).
P.S. Ну, чего прикопались? Гость уже целых две недели как начал изучать программирование на Си - конечно его потянуло поучить, как надо писать на Паскале! Помилуйте, как же без этого? а вдруг кто-то так и не узнает Истину?? А вы ему - goto, goto.. ))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.