Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 302
от 18.06.2004, 13:50

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 496
Отправлено ответов: 1847
Активность: 372.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Student
Статус: Начальный
Общий рейтинг: 150
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.7
[Подробней >>]
n0name
Статус: Начальный
Общий рейтинг: 114.92
[Подробней >>]
 
Black
Статус: Доверительный
Общий рейтинг: 125.24
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 496. Здравствуйте! Поможите пожалста решить задачи по Pascal’у. В эти задачи надо внести какие то изменен... (ответов: 4)

Вопросов: 1, ответов: 4


 Вопрос № 496

Здравствуйте! Поможите пожалста решить задачи по Pascal’у. В эти задачи надо внести какие то изменения, которые улучшали бы их работоспособность. Сами же задачи изначально сделаны правильно, но где то используется (я так предполагаю) не совсем правильные операторы которые необходимо заменить на более лучшие, последствием чего должно увеличится быстродействие программы.
Вот сами задачи:
1) Ввести двузначное число. Определить разность его цифр.
Var
x, y: Integer;
Begin
Write (‘введите число’);
Read (x);
y:=x mod 10;
While x>=10 do
X:=x div 10;
X:=x-y;
Write (x);
End.
2) Вычислить значение по формуле:
Sinx/2Cos(в квадрате)x-Cosx-3/2*корень квадратный из x

Var
X,y: Integer;
Begin
Write (‘введите число’);
Read (y);
Y:=(sin(x)/(2*sqr(cos(x))))-cos(x)-(3/2*sqrt(x));
Write (y);
End.
3) Var
A,b,y: Real
Begin
Read (a,b);
If (a+b)<1 then y:=a+b;
If (a+b)>1 then y:=2*(sqr(a)+sqr(b));
If (a+b)=1 then y:=(a+b)/2;
Write (y);
End/
4) Вычислить: y=1-2sin(x квадрат)-3sin(x квадрат)-4sin(x квадрат)-…-10sin(x квадрат)
var
y: Real;
I,x: integer
Begin
Write (‘введите число’);
Read (x);
Y:=1;
For I:=2 to 10 do
Y:=y-I*sin (sqr(x));
Writeln (y:6:2);
End.
5) Ввести строку символов. Вывести первый и последний символ.
Var
Stroka: String;
A: integer;
Begin
Read (Stroka);
A:= Length (Stroka);
Write (Stroka[1]);
Write (Stroka[A]);
End.
Заранее всем Вам огромнейшее спасибо! Я очень ценю Ваш труд!



Вопрос отправлен: 15.06.2004, 13:42
Отправитель: Hellraiser

[Следующий вопрос >>] [Список вопросов]

Отвечает Student

Здравствуйте, Hellraiser!
В первой задаче, я думаю предпочтительнее будет цикл из return - until, т.к. деление в любом случае нужно произвести хотя бы раз, и проверка условия будет производиться на один раз меньше... возможно поможет...
Если в задачах нет ошибок, то возможно это опечатки
- во второй задаче вводится и вычисляется Y, но скорее всего это опечатка... повысить скорость этой программы, я думаю, получится если как-то изменить выражение, т.к. известно, что вычисление функций происходит медленнее чем обычных арифметических операций.
в третьей задаче будет лучше применить выбор с помощью оператора case, например так:
var f: boolean;
...
и вместо блока проверки условий с if :
case f of
(a+b)<1: y := a+b;
(a+b)>1: y := 2*(sqr(a)+sqr(b));
(a+b)=1: y := (a+b)/2;
end;
...
В четвертой возможно тоже с выражением что-то можно сдеать...
А в пятой можно попробовать вот такой изврат :-))
Var
Stroka: String;
Begin
Read (Stroka);
Write (Stroka[1]);
Write (Stroka[ord(Stroka[0])]);
End.
т.к. в нулевом элементе строки содержится символ, порядковый номер которого и есть длина строки.
Буду рад, если хоть чем-то помог.
С ув. Student.


Ответ отправлен: 15.06.2004, 22:54
Отправитель: Student


Отвечает Ayl

Приветствую Вас, Hellraiser!
1. Так как число двузначное, то цикл не нужен. И программа должна выглядеть так:
readln (x);
writeln ((x div 10) - (x mod 10));

2. Здесь можно сыграть на однократном вычислении косинуса:
y := cos (x);
y := sin (x) / (2 * sqr (y)) - y - (3/2 * sqrt (x));

3. Упрощаем за счет превычисления выражения a + b:
y := a + b;
if y > 1 then y := 2*(sqr (a) + sqr (b))
else if y = 1 then y := y / 2;

4. Сначала вычислим sin (x^2):
x := sin (sqr (x)); y := 1;
for i := 2 to 10 do
y := y - i * x;

5. А вот тут как раз лишнее использование переменной. Лучше так:
readln (stroka);
writeln (stroka [1], stroka [length (stroka)]);


Ответ отправлен: 15.06.2004, 15:05
Отправитель: Ayl


Отвечает n0name

Добрый день, Hellraiser!
1)
y:=x mod 10;
X:=(x-y) div 10;
X:=x-y

Ответ отправлен: 15.06.2004, 15:40
Отправитель: n0name


Отвечает Black

Доброе время суток, Hellraiser!
1)
Var
x1,x2,code,y:integer;
s:string;
begin
Writeln('Vvedite chislo...');
Readln(s);
val(s[1],x1,code);
val(s[2],x2,code);
if x1>=x2 then
y:=x1-x2
else
y:=x2-x1;
Writeln(y);
end.
2)
Var x,y:real;
begin
Writeln('Vvedite chislo...');
Readln(x);
Y:=Sin(x)/2*sqr(Cos(x))-Cos(x)-3/2*Sqrt(x);
writeln(y);
end.
3)norm.
4)norm.
5)
var s:string;
begin
write('Vvedite stroku..');
Readln(s);
writeln(s[1],' ',s[length(s)]);
end.

Ответ отправлен: 18.06.2004, 03:27
Отправитель: Black



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (23)
C / C++ (12)
Perl (1)
Builder / Delphi (15)
Pascal (21)
Basic / VBA (4)
Java / JavaScript (4)
PHP (13)
Криптография (9)
WinAPI (11)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (52)
"Железо" (31)
Поиск информации (14)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (12)
Юристу
Гражданское право (12)
Семейное право (8)
Трудовое право (11)
КоАП (7)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное