Zheka
Новичок
|
И снова та же проблема... В этой программе тоже выдаёт ошибку "деление на ноль" никак не могу найти причину. label 1, 2, 3; var i,n,P:integer; Sg:real; a:array[1..10] of integer; begin 1:for i:=1 to 10 do read(a[ i ]); if a[1]<0 then begin writeln('pervoe chislo ne polozhitelnoe'); goto 1; end; for i:=2 to 10 do if a[ i ]<0 then begin i:=n; goto 2; end; writeln('v posledovatelnosti net otricatelnogo chisla'); goto 3; 2:P:=1; for i:=1 to n-1 do P:=P*a[ i ]; Sg:=exp((n-1)/ln(P)); writeln('Sg=',Sg); 3:end. В этой задаче нужно найти среднее геометрическое последовательности чисел. (Сообщение отредактировал Zheka 28 окт. 2007 23:09)
|
Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 28 окт. 2007 23:04 | IP
|
|
Vetas
Новичок
|
Точно Жека и у меня такая фигня не пойму в чем причин (((!!!
|
Всего сообщений: 5 | Присоединился: октябрь 2007 | Отправлено: 29 окт. 2007 18:13 | IP
|
|
KMA
Долгожитель
|
Я так понял этикет у нас не в моде? Спасибо говорить никто не будет, точно так же работают у них исправленные программы или нет. Ладно... решайте все сами.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 29 окт. 2007 20:36 | IP
|
|
Vetas
Новичок
|
Извини пожалуйста я не специально. Спасибо тебе огромнейшие, спас ты меня конкретно. Еше раз извини не хотел тебя обидеть.
|
Всего сообщений: 5 | Присоединился: октябрь 2007 | Отправлено: 29 окт. 2007 23:05 | IP
|
|
Zheka
Новичок
|
to KMA: Спасибо большое за прошлую программу, исправил тип на word и всё заработало.
|
Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 30 окт. 2007 0:08 | IP
|
|
KMA
Долгожитель
|
В этой задаче нужно найти среднее геометрическое последовательности чисел.
Я выделил цветом какие у вас ошибки. Прошу заметить, что в последовательности так же не желателен 0, т. к. ваша задача сразу падает в трам-тарарым. Вообще с этими вещами надо быть аккуратнее.
Code Sample:
label 1, 2, 3; var i, n, P:integer; Sg:real; a:array[1..10] of integer; BEGIN 1: for i:=1 to 10 do read(a[ i ]); if a[1]<0 then begin writeln('pervoe chislo ne polozhitelnoe'); goto 1; end; for i:=2 to 10 do if a[ i ]<0 then begin { i:=n; здесь ошибка} n:=i goto 2; end; writeln('v posledovatelnosti net otricatelnogo chisla'); goto 3; 2: P:=1; for i:=1 to n-1 do {P:=P*a[ i ];} if a[ i ]= 0 then begin writeLn ('Sg=0') goto 3; end; Sg:=exp((n-1)/ln(P)); {проработайте ситуацию, если P=1} writeln('Sg=',Sg); 3: END.
Еще возможные ошибка из-за привидения типов. Попробуйте заменить все на real, a лучше на extended, для P, возможно тогда проблема решиться. И, пожалуйста, отписывайтесь по поводу ваших успехов. Я не могу вам ничем, помочь с конкретными воплощениями, т. к. я работаю под Linux и компилятор у меня стоит не Борландовский, а lazarus + freePascal.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 30 окт. 2007 16:33 | IP
|
|
KMA
Долгожитель
|
програмка простейшая,дан массив из 10 элементов найти мин и мах поменять их местами.
Все же написала. Только чуть-чуть осталось. В общем, вот код:
Code Sample:
var a: array [1..10] of real; aP: real; i, iMin, iMax: integer; BEGIN writeLn ('Введите через пробел 10 элементов массива'); for i:=1 to 10 do read(a[ i ]; {выведем заданный массив} for i:=1 to n do write (a[ i ], ' '); iMax:=1; iMin:=1; for i:=2 to 10 do begin if a[ iMin ] > a[ i ] then iMin:=i; if a[ iMax ] < a[ i ] then iMax:=i; end; {теперь мы знаем номера максимального и минимального, обменяем их местами} aP:=a[ iMin]; a[ iMin ]:=a[ iMax ]; a[ iMax ]:= aP; {выведем массив} for i:=1 to n do write (a[ i ], ' '); END.
Вот и вся твоя задача
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 30 окт. 2007 16:44 | IP
|
|
Zheka
Новичок
|
Исправил первую ошибку и программа заработала, но видимо неправильно, т.к. ответы которые она выдает не соответствуют моим вычислениям. Да, действительно в последовательности не должно быть нуля, а произведение не должно выйти равным 1, т.к. ln1=0. И мне не совсем понятно, где у меня ошибка в строке P:=P*a[ i ]? Может из-за этого у меня возникают проблемы? Извините, что задаю много вопросов, но уже просто сроки сдачи роботы истекают. Последняя задача, которую я не могу исправить и в которой, я собственно, вообще ошибки не вижу. Но преподаватель упорно говорит что она составлена неверно... Вывести на печать номера точек, лежащих в круге радиусом r. Координаты точек заданы массивами (x[1],x[2],...,x[100]), (y[1],y[2],...,y[100]). program Rgr2; var x:array [1..100] of integer;y:array [1..100] of integer; r,i,j:integer; begin read(r); for i:=1 to 100 do for j:=1 to 100 do if sqr(i)+sqr(j)<=sqr(r) then writeln('x=',i,'y=',j); end. Программа работает, выводит правильные точки, но препод вообще не верит, что она работает, он говорит, что у меня нет массивов x и y, и что я их в программе не использую Возможно я чего-то не понимаю??? У меня даже нет никаких мыслей на этот счет.
|
Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 31 окт. 2007 2:34 | IP
|
|
Guest
Новичок
|
Требуется составить программу на Паскале следующего содержания: "Дано 10 комплексных чисел. Из них найти минимальное по модулю". Подскажите, please, как это сделать. Может, кто-то сталкивался с такими задачами?
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 31 окт. 2007 18:59 | IP
|
|
KMA
Долгожитель
|
Zheka, в общем то суть твоей задачи проста, надо только немного подумать над самой формулировкой. Во первых с нулем, мы уже все решили, а код будет такой:
Code Sample:
for i:=1 to n-1 do {исправленный вариант} if a[ i ]= 0 then begin writeLn ('Sg=0') goto 3; end else P:=P*a[ i ];
Это во первых, во вторых, уточните формулу среднего геометрического. В третьих, вы сами то понимаете, что значит слово ПОСЛЕДОВАТЕЛЬНОСТЬ? Она подразумевает собой логический ряд чисел! Нужна ли вам эта случайность? Тем более зная как ведет себя тот же random склонен предполагать, что по большей части основной алгоритм программе просто не удается реализовать. Попробуйте по вводить ручками, может поможет в ваших расчетах.
Вывести на печать номера точек, лежащих в круге радиусом r. Координаты точек заданы массивами (x[1],x[2],...,x[100]), (y[1],y[2],...,y[100]).
Собственно, если ты задал точки заранее (точнее при помощи рандома или ручками, или константно), а в теле ты написал только обработчик (основной), то тогда программа решена верно, и то что говорит информатик не есть правильно, тогда он у вас тупой как валенок, если не видет массива. Если начнет возмущаться, тыкни ему пальцевм в раздел объявления переменных и спроси нагло: "А что это тогда такое?" Уверен, должно прокатить. =)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 31 окт. 2007 19:34 | IP
|
|
|