Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Математические действия 
V
    Опции темы
Bobrina
Дата 1.2.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 26.1.2009
Где: Москва

Репутация: нет
Всего: нет



Код

Program Hex;
Uses
WinCrt;
var
b1,b2,bn,q,S : Integer;
Begin
WriteLn('b1=')  ;
ReadLn(b1);
WriteLn('b2=') ;
ReadLn(b2);
Writeln('bn=') ;
ReadLn(bn);
q:=b1/b2
if q<1 then
S:=b1/(1-q)
Writeln('S=',S)
else
S=(bn*(q-b1))/(q-1)
Writeln ('S=',s)
end.

Программа для нахождения суммы n первых чисел в геометрической прогресии.
Не компилится, по моему не правильно написал вот это 
Код

q:=b1/b2
if q<1 then

и это 
Код

S:=b1/(1-q)

S=(bn*(q-b1))/(q-1)

Пожалуйста, помогите розобратся. 
PM MAIL ICQ   Вверх
Фантом
Дата 1.2.2009, 15:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Судя по этому коду, Вам надо заново учить Паскаль. С самого начала. Тут трудно найти место, где нет ошибки. Вот, например:

1) Операторы завершаются символом ;

2) В конструкциях типа if <условие> then <оператор> else <оператор>;  должны фигурировать либо одиночные операторы, либо составные операторы. В последнем случае надо использовать операторные скобки begin и end.

3) С чего это все переменные - целые?  Естественно, что при делении целого на целое (нецелочисленном) результат целым быть не обязан. 

4 Почему Вы решили, что это должно считать сумму геометрической прогрессии? Посмотрите внимательно на формулу этой суммы и сравните с тем, что у Вас написано.

5) Зачем Вам WinCrt?

6) Ну и наконец - если Вы и дальше будете оформлять код таким образом, то никогда ничему не научитесь. 
PM   Вверх
Bobrina
Дата 1.2.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 26.1.2009
Где: Москва

Репутация: нет
Всего: нет



0)Вобщето я и учу Паскаль с самого начала.
1)Ошибка при компиляции идёт раньше непроставленных ; я  их потом проставил
2)Спасибо, действительно не поставил.
3)Тип нецелой переменной?(var b: ?;)
4)Формула неправильная, не в этом суть, всё равно я не знаю как q возвести в степень n(Если расскажете, буду очень благодарен)
5)А без него Runеime error, помоему потому у меня Turbo Pascal для Винды.
6)Я только начал, буду исправлятся  smile 
Код

Program Hex;
Uses
WinCrt;
var
b1,b2,S : Real;
Begin
WriteLn('b1=')  ;
ReadLn(b1);
WriteLn('b2=') ;
ReadLn(b2);
if b1<b2 then
Begin
S:=b1-b2;
Writeln('S=',S) ;
end
else
begin
S:=b2-b1 ;
Writeln ('S=',s) ;
end
end.

Вот, только выдаёт S=-x.000000000e+00
Вопрос : Как избавится от нулей? И почему минус число? 
PM MAIL ICQ   Вверх
Фантом
Дата 1.2.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



3) Тип, похоже, уже нашли.  smile 
4) Специальной операции возведения в степень в Паскале нет, но ее можно успешно заменить такой вот конструкцией: exp(n*ln(q)) (получится q в n-ой степени). 
6) Делайте все-таки отступы. Вам же понятнее будет, что Вы понаписали.

"Минус число" получается потому, что так написана программа. Сами же задали, что если b1<b2, то S:=b1-b2. 

От нулей можно избавиться так: Writeln ('S=',s:7:3) ;. Вместо "7" и "3" подставить то, что хочется. Первое число - общее (максимально возможное) количество символов, которое будет у выводимого значения переменной, второе - количество символов для вывода дробной части. Соответственно, если уверены, что должно получиться что-то целое, то либо в качестве второго числа поставить нуль, либо вообще написать Writeln ('S=',s:7) ;.


PM   Вверх
Bobrina
Дата 2.2.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 26.1.2009
Где: Москва

Репутация: нет
Всего: нет



0)Огромное спасибо  smile 
3) Да нашёл  smile 
4)чтото мне кажется что в этом и косяк(о нём ниже)
6) Делаю.
"Минус число" да ступил.
От нулей помогло.
Код

Program SGeom;

Uses
WinCrt;
var
b1,b2,q,s,n : Real ;

Begin

Writeln('n=');
ReadLn(n);

Writeln('b1=');
ReadLn(b1) ;

WriteLn('b2=');
ReadLn(b2);

q := b2/b1;
writeLn('q=',q:5:1);

       If q<1 then
        begin
        S := b1/(1-q);
        WriteLn('S=',s:5:1);
        end;

        If q=1 then
        begin
        S :=n*b1 ;
        WriteLn('s=',s:5:1);
        end;

        If q>1 then
        Begin
        S := b1*(exp(n*ln(q)-1)/(q-1));
        WriteLn('s=',S:5:1);
        end

end.


Собственно при q<1 & q=1 всё нормуль, а  при q>1 неправильно считает. Я по тойже формулне на бумажке считаю, получается не так. помоему косяк в этой степени, если я неправильно её применил, исправьте пожалуйста.  smile 
PM MAIL ICQ   Вверх
volvo877
Дата 2.2.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Bobrina @  2.2.2009,  15:53 Найти цитируемый пост)
Собственно при q<1 & q=1 всё нормуль, а  при q>1 неправильно считает.
Ты бы формулу правильно записал для начала:

Код
If q<1 then S := b1/(1-q)
else
  If q=1 then S :=n*b1
  Else S := b1*( (exp(n*ln(q))-1)/(q-1) ); { Скобок у тебя не хватало }
WriteLn('s=',S:5:1);


Потому, что по формуле надо сначала возвести Q в степень n, и только потом вычесть 1, а у тебя единица вклинилась не туда, куда надо...
PM MAIL   Вверх
Фантом
Дата 2.2.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(Bobrina @  2.2.2009,  16:53 Найти цитируемый пост)

Собственно при q<1 & q=1 всё нормуль, а  при q>1 неправильно считает.


Вы не там расставили скобки. Вместо S := b1*(exp(n*ln(q)-1)/(q-1)); надо  S := b1*(exp(n*ln(q))-1)/(q-1);
PM   Вверх
Bobrina
Дата 2.2.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 26.1.2009
Где: Москва

Репутация: нет
Всего: нет



Да действительно скобок недоставил. Теперь всё  smile  Благодарю за помощь! smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.