Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Задачи на Turbo Pascal 7.0

Автор: notromBY
Дата сообщения: 17.09.2006 23:13
Недавно набрел на сайт с онлайн-интернет-олимпиадой по информатике среди школьников -http://neerc.ifmo.ru/school/io/index.html. Вроде такая ничего, солидная. но соревнование командное, нужна команда из трех человек. Вообщем, ребята, кто хочет вступить в команду, пишите :
icq 93-39-93-93 либо на худой конец
Mail.ru Agent - notrom[крыса]mail.ru.
Рассмотрб любых кандидатов. очень срочно надо, первый тур уже в эту среду. Авось пронесет ?
З.Ы. Есть кто с TTB?
Автор: 1nb0lz
Дата сообщения: 17.09.2006 23:51
Ramazan
Спасиб огромное!
Прост в инсте на лабе задали задачки на pascal, а я его до этого ток на картинке видел =) Вот и в панике написал вам . Но уже купил пару книжек, теря сижу обучаюсь.
Автор: Boom27
Дата сообщения: 24.09.2006 12:53
Скажите пожалуйста как выложить код программы, чтобы не засорять топик?
Автор: EZH
Дата сообщения: 24.09.2006 14:04
Boom27
Под тег more.
Автор: Boom27
Дата сообщения: 24.09.2006 15:05
EZH
Спасибо.

Всем привет, помогите пожалуйста разобраться.
[more]
Program Mnogestva;
Uses crt;
type
sob=set of byte;
mnog=sob;
simv= set of char;
mnogmAmB=simv;

var
A,B,D,F:mnog;
mA,mB:mnogmAmB;
t:integer;
q,p:mnogmAmB;
mZ,mX:mnog;
procedure s1 ;
var
k:byte;
begin
for k:=1 to 255 do
if k in D then write(k:4);
writeln;
end;
procedure s2( mA:simv);
var
k:byte;
begin
for k:=1 to 255 do
if chr(k) in mA then write(chr(k):4);
if mA=[] then write('Пустое множество');
writeln;
end;
procedure vvod_s_klavi (var mA:simv); {процедура ввода множества с клавиатуры}
var
i:char;
begin
mA:=[];
Writeln('Введите множество по элементам, для завершения ввода нажмите ENTER ');
repeat
write('Введите элемент множества: ');
i:=readkey;
writeln(i);
if i<>#13 then
mA:=mA+[i];
until i in [#13];
end;
procedure rand(var k1:sob); {процедура вывода случайных множеств}
var
nb:sob;
l1,m1,n1:integer;
begin
nb:=[1..15];
for l1:=1 to 1 do
begin
k1:=[];
for m1:=1 to 5 do
begin
repeat
n1:=random(15)
until (n1 in nb) and not (n1 in k1);
k1:=k1+[n1];
write(n1:4);
end;
end;
end;

begin {вывод титульного листа}
clrscr;
randomize;
writeln(' XXXXXXXXXXXXXXXXXXX ');
writeln(' XXXXXXXXXXXXXXXXX');
writeln(' XXXXXXXXXX ');
writeln;
writeln(' XXXXXXXXXXXXXXXXXXXXXXXXX ');
writeln;
writeln;
writeln(' Выполнение операций над множествами ');
writeln;
writeln;
writeln;
writeln(' Выполнили: xXXXXXXXXXXXXX');
writeln(' XXXXXXXXXXXXXXXXX ');
writeln(' XXXXXXXXXXXXXXXXXXX ');
writeln(' XXXXXXXXXXXXXXXXXXX ');
writeln(' XXXXXXXXXXXXXXXXXXXX ');
writeln;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln(' XXXXXXXXXXXXXXXXXX ');
readln;

begin {начало главной программы}
clrscr;
writeln ('Нажмите: 1 - для ввода множеств с клавиатуры ');
writeln (' 2 - для вывода случайных множеств ');
readln(t);
end;
if t=1 then {ввод множеств с клавиатуры}
begin
clrscr;
writeln('Введите множество A:' );
vvod_s_klavi(q);
clrscr;
writeln('Введите множество B:' );
vvod_s_klavi(p);
begin
clrscr;
writeln('множество A:' );
s2(q);
writeln ('множество B:' );
s2(p);
mB:=q+p; {объединение множеств A и B}
writeln('Объединение множеств А и В :');
s2(mB);
mB:=q*p; {пересечение множеств A и B}
writeln('Пересечение множеств А и В :');
s2(mB);
mB:=q-p; {разность множеств A и B}
writeln('Разность множеств А и В :');
s2(mB);
mB:=p-q; {разность множеств B и A}
writeln('Разность множеств B и A :');
s2(mB);
writeln;
writeln ('Докажем справедливость тождества "A\(A\B)=A*B": ');
writeln;
writeln ('1) A\B=');
mB:=q-p; {разность множеств A и B}
s2(mB);
writeln ('2) A\(A\B)=');
mB:=q-(q-p); {вычисление A\(A\B)}
s2(mB);
writeln ('3) A*B=');
mB:=q*p; {пересечение множеств A и B}
s2(mB);
writeln;
write ( 'Так как A\(A\B) равно A*B ==> тождество справедливо. ');
writeln;
writeln ('Ч.Т.Д.');
readln;
end
end
else {вывод случайного множества}
begin
clrscr;
writeln('множество А=');
rand(mZ);
writeln;
writeln('множество B=');
rand(mX);
writeln;
writeln('Объединение множества А и В'); {операции над множествами}
D:=mZ+mX;
s1;
writeln('Пересечение множества А и В');
D:=mZ*mX;
s1;
writeln('Разность множества А и В');
D:=mZ-mX;
s1;
writeln ('Разность множеств B и A');
D:=mX-mZ;
s1;
D:=mZ-mX;
writeln;
writeln ('Докажем справедливость тождества "A\(A\B)=A*B": ');
writeln;
writeln ('1) A\B='); {доказательство справедливости}
s1;
F:=D;
D:=mZ-F;
writeln ('2) A\(A\B)=');
s1;
D:=mZ*mX;
writeln ('3) A*B=');
s1;
writeln;
writeln ( 'Так как A\(A\B) равно A*B ==> тождество справедливо. ');
writeln;
writeln ('Ч.Т.Д.');
readln;
end;
end.
[/more]

Вот программа, которая выполняет операции над множествами (объединение,разность,пересечение). Причем можно выводить случайные множества или задавать их с клавиатуры. Мне не понятно для чего нужны процедуры s1 и s2??? И что значит write(k:4)??? Заранее благодарен за помощь.
Автор: EZH
Дата сообщения: 24.09.2006 15:12
s1 выводит все числа из диапазона 1 - 255, попадающие в множество байт D.
s2 выводит все символы с кодом из диапазона 1 - 255, попадающие в символьное множество mA.
write(k:4) означает, что под выводимое чило k отводится 4 симольных позиции.
Автор: Boom27
Дата сообщения: 24.09.2006 16:10
EZH
Спасибо большое, теперь разобрался.
Автор: Foster18
Дата сообщения: 28.09.2006 22:37
Граждане, помогите пллииииз.... Мне необходимо создать прогу, которая вводит вещественное число, отсекает всю дробную часть после запятой, кроме первых трёх и подсчитывает сумму оставшихся трёх знаков..... С остальным я разберусь, но мне необходимо ОТСЕЧЬ. Как отсечь всё, что находится после запятой, оставив нужное количество цифр?
Автор: EZH
Дата сообщения: 28.09.2006 23:27
Foster18
Я бы умножил на 1000 и взял целую часть. Потом от него взял бы остаток от деления на 10 - это была бы последняя цифра. Потом поделил бы на 10, опять взял целое, и от него опять остаток от деления на 10 - будет вторая цифра. Для третей уже думаю понятно...
Автор: ItsJustMe
Дата сообщения: 28.09.2006 23:39
Pascal тут ни при чем, это математика.
Если я тебя правильно понял, тебе из числа 123,456789 нужно получить 456. Потом 4 + 5 + 6 = 15.
x := 123.456789;
y := trunc(x * 1000);
y := (y mod 10) + ((y div 10) mod 10) + ((y div 100) mod 10);
WriteLn(y);
Автор: Foster18
Дата сообщения: 29.09.2006 14:27
Спасибо большое, но это был именно Паскаль, а не математика... Я целый вечер искал и думал, как вместо числа 3.154587 получить 3.154, а дальше отбросить. И я раньше когда-то вычислял в Паскале (5 / 6) * 6 и результат методом отбрасывания дробной части у меня получался 5.0, спокойно отбрасывал и дробную часть методом, приведённом мной выше... А вот тут забыл.

Вот ещё пара заданий, которые я вообще решить не могу, помогите плииз, если не затруднит.

1) Дано двузначное целое число. Верно ли, что сумма данного числа и его перевертыша меньше 100 (перевертыш - это число, получающееся, если цифры исходного числа записать в обратном порядке).

2) Даны координаты центра круга и его радиус, а также координаты точки. Лежит ли эта точка внутри круга?

3) Даны координаты верхней левой и нижней правой вершин прямоугольника. Определить, вместится ли в него круг радиуса R

Заранее благодарю. Я бы дал бы больше, но не хочу заполонять этот форум. Там такие есть убойные задания, что просто пускай разрывную пулю в голову.
Автор: Looking
Дата сообщения: 29.09.2006 14:51
Foster18
2. Ищем расстояние между центром и точкой, как корень из суммы квадратов разниц координат.
Если расстояние больше радиуса, то точка вне круга.
3. Вычисляется что по модулю меньше разность ординат или абцис. Меньшая разность сравнивается с дитаметром.
На Pascal-е надеюсь сам закодиш.
Автор: daMIR
Дата сообщения: 29.09.2006 15:47
Foster18
1. Я бы сдалал так: проверяю число на двухзначаность, а после делю на 10. С помощью спец. функции отбрасываю дробную часть переменная (А), с помощью другой- отбраысваю целую часть и после этого умножаю его на 10 и приплюсовываю первое (А).
Автор: ItsJustMe
Дата сообщения: 30.09.2006 22:27
Foster18
Тебе это для собственного удовольствия что ли надо? Такие задачки обычно берут из какого-нибудь сборника "математика для начальных классов".
Ну да ладно.
1. Не вижу никакой причины мудрить с этой задачей (даже если это надо). По мне, так лучше решить ее в лоб. Число ab (т.е. 10a + b). Проверяем неравенство 11(a+b) < 100.
Собственно, остальные тоже
2. R((x;y),r). A(a,b). sqrt(sqr(a-x)+sqr(b-y)) < r.
3. P((x1;y1),(x2;y2)). R(?,r). решение: (|x1-x2|>=2r) and (|y1-y2|>=2r).

Цитата:
Я бы дал бы больше...

Зачем? Не стоит так утруждать себя. Уверен, если кому-нибудь понадобятся подобные задачки, он без труда найдет их с помощью google
Автор: V ekto R
Дата сообщения: 02.10.2006 20:35
Помогите плз решить простейшую задачу в Паскале!!! Никогда не занимался програмированием поэтому так вышло...Задача такая:
Необходимо созд. прогу для вычисления периметра основания и ширины коробки. Длина, высота, внутренний объем и толщина стенок коробки задаются пользователем каждый раз при запуске программы.
Вот что у меня получилось:
program lab2;
var l,w,h,v,d,p:real;
be write('Dlina');
readln(l);
write('Visota');
readln(h); write('Vnutrenniy obyem');
readln(v);
write'Tolshina stenok')
readln (d);
w:=(v+2*d*l*(h-2*d)-4*d*d*(h-2*d))/((h-2*d)*(l-2*d));
p:=((v+2*d*l*(h-2*d)-4*d*d*(h-2*d))/((h-2*d)*(l-2*d))+l);
write ('p=',p,'w=',w); read(p,w);
readln;
end.
Не знаю где здесь ошибки, наверное их тут полно...Помогите пожалуйста как можно скорее!
P.S. Программа правильно вычисляет ширину, но ошибается с периметром: его значение при полученной ширине w=5, равно 3.0000000000Е+01w...что за фигня???
Автор: NoNamNoSernam
Дата сообщения: 02.10.2006 21:38
Памагите... я пока в паскале нишиша непонимаю, но мне всетаки надо сдать задание, уже завтро... Сделайте ктонибудь плз.... оно должно быть очень простым для любого из вас, а я паскаль 2 раза в жизни видел =) кароче вот:
Дан список группы в 10 человек в виде
ФАМИЛИЯ И.О. ГОД_РОЖД. ПРОПИСКА ПОЛ
15 симв. 4 симв. 4 симв. 1 симв. 1 симв.
Данные в одной строке отделяются друг от друга пробелами. Выделить из них и напечатать трех наиболее молодых петербуржцев мужчин.
НАдо сделать в двух разных видах... памагите! зарание спасибо...
Автор: ItsJustMe
Дата сообщения: 03.10.2006 12:46
V ekto R
Ты на складе программером работаешь? И скока за такую прогу платят, если не секрет, канешна?

Твои расчеты не пересчитывал, но, ИМХО, 30 - вполне ожидаемый результат. В конце концов, ты же можешь сосчитать переметр, зная ширину и длину. Вот и сравни с полученным результатом.

NoNamNoSernam
Мда. И какой такой ВЦИОМ такую странную статистику собирает? Или это ваш деканат? Ну и интересы у него.

Цитата:
но мне всетаки надо сдать задание, уже завтро

Ты им скажи, что за такие деньги пусть не расчитывают на молниеносную сдачу проекта. В конце концов, если бы им действительно надо было сделать это быстро, они бы наняли кого-нибудь другого. А на тебе просто хотят сэкономить. Так что не парься, не суетись, а скажи, что тебе нужно еще время. Минимум неделя. И за неделю спокойно сделаешь. А если это их не устроит - пусть ищут кого-нибудь другого.
Автор: NoNamNoSernam
Дата сообщения: 03.10.2006 13:52
2 ItsJustMe
А кто его знает? здача заданий обязательна для получения зачета...

Памагите кто добры, и кто не ленивый... Кинте решение на NoNamNoSernam@yandex.ru.... Буду более чем признателен... И помогу в ответ чем смогу.....
Автор: V ekto R
Дата сообщения: 03.10.2006 21:28
да чето я лохонулся с переводом...да работаю на складе, получаю...да ничего не получаю просто дурак вот и работаю на складе...
Насчет проги этой: как сделать так чтоб после выполнения всех расчетов, при нажатии ЕНТЕР-а прога сама завершалась? Readln не помогает, независимо от того скока раз его пишеш. как избавится от этой фигни?
Автор: RedPromo
Дата сообщения: 03.10.2006 21:40
V ekto R
Вобще Readln пишут не для того чтобы прога завершалась а наоборот для того чтобы она ждала нажатия любой клавиши пользователя а если дальше если в проге ничего нет то идет завершение программы, посему что именно у тебя не завершается скорее всего ты имеш ввиду что утебя не закрывается консольное окно а это немного другое.
Автор: akaGM
Дата сообщения: 13.10.2006 15:21
RedPromo


Цитата:
Вобще Readln пишут [...] для того чтобы она ждала нажатия любой клавиши

?

всё что угодно + обязательно завершающий enter
Автор: Lita34
Дата сообщения: 13.10.2006 21:54
Добрый вечер! новеньких принимаете? уважаемые, не в службу, а в дружбу - помогите откорректировать прогу, чтобы она заработала. Вроде все делала правильно, а итога никакого... Хоть и говорят, что отрицательный результат - это тоже результат, но препода такой ответ не устраивает...
Автор: akaGM
Дата сообщения: 13.10.2006 22:03
Lita34
где она сама-то?
Автор: vladk1973
Дата сообщения: 17.10.2006 09:40
Lita34
Да тут же все и так понятно - очевидно, у вас в ней ошибка
Примерно в 17-й строке
Автор: Umbrall
Дата сообщения: 17.10.2006 10:34
Люди помогите надо дописать задачу
program Zadanie;
var x,y,N,M :integer;

begin
writeln('Vvedite koordinatu .::konya::. (x,y):');
write('x [1.....8] =');
readln(x);
write('y [A.....H] =');
readln(N);
writeln('Vvedite koordinatu .::pehki::. (x,y):');
write('x [1.....8] =');
readln(y);
write('y [A.....H] =');
readln(M);
if (y=x-1) and (M=N-3)
then writeln ('yes')
else
if (y=x-1) and (M=N+3)
then writeln ('yes')
else
if (y=x+1) and (M=N-3)
then writeln ('yes')
else
if (y=x+1) and (M=N+3)
then writeln ('yes')
else
if (y=x-3) and (M=N-1)
then writeln ('yes')
else
if (y=x-3) and (M=N+1)
then writeln ('yes')
else
if (y=x+3) and (M=N-1)
then writeln ('yes')
else
if (y=x+3) and (M=N+1)
then writeln ('yes')
else writeln ('no');
readln;
end.


короче эта задача должна выводить может ли конь побить пешку или нет.
ПОМОГИТЕ!!!!!!
Надо зделать присвоение когда вводятся в переменные N и M надо что боно принимало как цыфрытипа:
a:=1
b:=2
c:=3
d:=4
e:=5
f:=6
g:=7
h:=8
тока надо это зделать это правильно.

Добавлено:
и люди подскажите где можна найти такую прогу типа эмулятор Paskal тока типазапускется в обычном окне и можно писать проги как на паскале
Автор: ItsJustMe
Дата сообщения: 17.10.2006 11:36
Лучший эмулятор Pascal - сам Borland Pascal. А вот, что такое Paskal я не знаю...
Автор: Bukenist
Дата сообщения: 17.10.2006 17:31
Народ, помогите пожалуйста решить задачу: Используя разложение в ряд Теулора найти значение exp(x) с заданной точностью *.
Автор: PRV
Дата сообщения: 17.10.2006 22:44
Bukenist
Может все таки ряд Тэйлора?
Автор: Umbrall
Дата сообщения: 18.10.2006 09:14

Цитата:
Лучший эмулятор Pascal - сам Borland Pascal. А вот, что такое Paskal я не знаю...

Ну малек ошидся, одна буква не меняет вопрос

Добавлено:
Люди так хто нибудь поможет разобратся с задачей
Автор: PRV
Дата сообщения: 18.10.2006 09:24
Bukenist
К примеру как-то так (exp(x)=1+x+x2/2!+ x3/3!+ x4/4!+ x5/5!-…) (самое простое):

function ExpT(x: Extended; Prc: integer): Extended;
var
i,fc: integer;
pw,val: Extended;
begin
if Prc<0 then
Exit;
val:=1+x;
for i:=2 to Prc do
begin
pw:=Power(x,i);
fc:=Factorial(i);
if (fc<0) or (pw<0) then
Exit;//Overflow
val:=val+pw/fc;
end;
Result:=val;
end;

function Factorial(N: integer): integer;
var
F,i: integer;
begin
F:=1;
for i := 1 to N do
F:=F*i;
Result:=F;
end;

Страницы: 1234567891011121314

Предыдущая тема: VC++ vs. Delphi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.