Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Дайте задание


Автор: Рыжий 6.3.2005, 17:36
Всем привет!
Значит так, мне нужно выучить Паскаль или хотябы самое важное в нем за буквально 1,5 месяца!
Из школы я знаю команды типа writeln и readln ну и еще десяток. Литературу собственно я достал и уже приступил к изучению.
Но вот даже и не знаю что с этим делать, всмысле со знаниями, может кто нибудь придумает для меня задачку?
Только не типа вывести "Hello world!" на экран а что-то посложнее чтобы во время выполнения этой задачи я бы смог много чему научиться!
Зарание спасибо smile

Автор: SPrograMMer 6.3.2005, 18:14
Хм... попался ты мне. вот держи:

Задача №1 (простенькая....)
Даны два числа m и n. Известно, что m/n - неправильная дробь. Задача: сократить эту дробь и выделить целую часть. Входные параметры - два числа (m,n). выходные - целая часть и оставшаяся несократимая правильная дробь.
Пример:
Вход: 33 6
Выход:5 1 2 (5 - челая часть, и дробь 1/2)

Как решишь дам еще задачку...

Автор: Рыжий 6.3.2005, 19:56
хм у мне есть 2 вопроса:

1) А как ты можешь выдать дробь подобную 1/2 ведь паскаль считает все в десятичных то есть в данном случае он выведт 0,5!

2) Составил прогу (конечно алгоритм не самый лучший) но что то она глючит насчет последнего действия:

Код

program calc;
uses crt;
var
f,g,d:real;
m,n:integer;
begin
clrscr;
writeln('vvedite 2 4isla');
readln(m,n);

d:=m/n;
g:=trunc(d);   (* Это выводит целую часть от деления!*)

f:=m mod n;  (*Здесь хранится остаток от деления*)
f:=f/n;     (*А вот тут он ддолжен становиться 0,5 но нет - почемуто не считает!!!!!*)
writeln(g:2:0,f:2:0); (* вывожу цифры но последняя выводится не корректоно!*)
readln;
end.



Очень странно если проследить по действиям то все должно работать в принципе! Может это какая то специфика языка? Или я чето торможу?

Автор: Fedor 6.3.2005, 22:28
PHP-Script Вот тебе подборка задач, по которым меня учил преподаватель. Это - основа основ. Ты начни с самого простого (это именно типа Hello World). Решай, выкладывай сюда решения, а я буду проверять. smile
Добавлено @ 22:29
З.Ы. Переименуй файл Simple в файл Simple.rar

Автор: Zero 6.3.2005, 22:29
Цитата(PHP @ 6.3.2005, 19:56)
А как ты можешь выдать дробь подобную 1/2 ведь паскаль считает все в десятичных то есть в данном случае он выведт 0,5

Вот так: smile
Код

program pr;
uses crt;
var
 i1,i2:integer; {входные данные}
 i:integer; {целая часть}
 r:real; {остаток от деления}
 r1:real; {знаменатель}
Begin
 clrscr;
 writeln('Введите 2 числа через пробел:');
 write('Вход:'); readln(i1,i2);

 i:=i1 div i2; {Более простой способ подсчёта целой части}

 r1:=1; {счётчик знаменателя}
 r:=(i1-i*i2)/i2; {остаток от деления}
 while (r*r1-int(r*r1))<>0 do
   r1:=r1+1;
 writeln('Выход:',i,' ','1 ',r1:0:0);
 readkey
End.

Автор: Fedor 6.3.2005, 22:31
PHP-Script И еще: насколько я понял, тебе это для олимпиады нужно? Тогда не используй модуль CRT. Но олимпиадах это запрещено. Тем более, это нужно только для того, чтоб очистить экран.
Добавлено @ 22:33
Да. Тебе еще нужно узнать не в первую, но во вторую очередь, как работать с текстовыми файлами. Прочитай в книге либо создай тему, я объясню.
Добавлено @ 22:37
Вот те задачи которые я тебе дал - за два-три дня порешай. А то и быстрее. А потом я тебе еще олимпиадных подкину.

Автор: Pakshin A. S. 6.3.2005, 22:37
Код

var
tch, zn: integer;
t: integer;
i:integer;
begin
readln(tch, zn);
t:= tch div zn;  {получили целую часть}
tch:=tch - t * zn; {получили числитель}
i:=2;
while i <= tch do
 begin
  if (tch mod i = 0) and (zn mod i = 0)
   then
    begin
     tch:=tch div i;
     zn:=zn div i;
     end;
   inc(i)
  end;
if t <> 0
 then
  write(t, ' ');
writeln(tch, ' ', zn);
readln;
end.

может это более прозрачный код... smile


Добавлено @ 22:38
Про CRT... Это еще зависит от конкретной олимпиады и комиссии... Иногда можно и юзать... smile Иногда нет... smile

Автор: Рыжий 6.3.2005, 22:45
Ну спасибо вам - решили задачку я аж поумнел все паскаль знаю на 100% smile

Автор: Pakshin A. S. 6.3.2005, 22:45
Вот тебе еще две задачи на закуску... smile smile
Цитата

Множество символов I-ричной системы счисления (2 <= I <= 36) образуют символы 0, ..., 9, A, B, ..., Z. Если I < 36, то соответствующее количество последних букв латинского алфавита в качестве цифр не используются. Если I < 10, то не используются соответствующие цифры. Необходимо написть программу, которая по двум текстовым строкам, означающим одно и то же число в I-ричной и J-ричной системе счисления, определяет минимальные значения I и J.
Пример входных данных:
10
2
Пример выходных данных:
2 3


Цитата

Имеется N точек и известны расстояния между некоторыми из них. Нужно написать программу, которая проверяет, можно ли эти точки расположить на плоскости так, чтобы указанные расстояния между ними сохранились.
INPUT
В файле исходных данных записано количество точчек N (1 <= N <= 100) и расстояния между некоторыми из них ы ыиде номер первой точки, нмер второй точки, расстояние. Расстояние - вещественное неотрицательное число, не превосходящее 1000. Номер точки - целое число из отрезка 1..N. Все числа разделяются проьелами и/или символами перевода строки.
OUTPUT
Ответом должно быть слово Yes или No соответственно.
EXAMPLE
INPUT:
3
1 2 10
2 3 20
3 1 100
OUTPUT:
No

Автор: Fedor 7.3.2005, 00:12
Да, кстати, PHP-Script, зайди на acm.timus.ru - зарегься и поздавай там задачи. Очень полезно при подготовке к олмпиаде.

Автор: Рыжий 7.3.2005, 01:38
Итак решил такие задачки:
Глава 3 программа CountODD
Подсчитывает все нечетные числа вводимые пользователем:

Код

program countODD;
var
g,a,b:integer;
c:real;
begin
writeln('vvedite 4islo');
a:=1;

while a<>0 do
begin
readln(a);
c:=a mod 2;
if c<>0 then
inc (g);
end;
writeln('Est ',g,' ne4etnyh 4isla');
readln;
end.


Дальше папка 3 задание MAX
Выводит максимальное число вводимое пользователем:

Код

program MAX;
var
u,i:integer;
a:array[0..9]of integer;
begin
writeln('vvedite 10 4isel');
i:=0;
while (i<=9) do
begin
readln(a[i]);
inc(i);
end;
i:=a[0];
u:=0;
while (u<10) do
begin
if (a[u]>i) then i:=a[u];
inc (u);
end;
writeln('naibolshee', i);
readln;
read;
end.


И папка 3 задание whileODD
вводим числа до тех пор пока не введем четное:
Код

program whileODD;
label write1;
var
c,a:integer;
begin
write1: writeln('vvedite 4islo');
readln(a);
c:= a mod 2;
if ( c=0) then HALT
else goto write1;
end.


Ну понятно что иду я не попорядку а так по значению smile ну щас поздно уже но завтра постараюсь выполнить много чего, спасибо - неплохие задания!!

Автор: Fedor 7.3.2005, 01:59
CountOdd
зачем c - real? достаточно integer или byte. К тому же в паскале есть функция
Код

Odd(a:integer):boolean;

Она принимает true когда число нечетное и false когда четное.

Max
Задача вообще прдполагала решение без массива. smile

WhileOdd
Ну намудрил! smile Достаточно было просто цикл сделать обычный.
Вообще, наличие лейблов и goto в любом языке (может кроме асма) считается плохим стилем программирования. И лучше этими гото пользоваться только при крайней необходимости если они действительно упрощают программу.
Добавлено @ 02:05
И еще к задаче Max
Если ты делаешь массив и тебе нужно по нему пройтись и ты знаешь колличество елементов в нем, то лучше использовать цикл for. Это как минимум нагляднее.

Автор: Рыжий 7.3.2005, 05:01
Да спасибо огромное - хорошая критика.
Все понятно, учту в будущем!


Автор: Fedor 7.3.2005, 08:47
PHP-Script там в одной из папок есть задача subsets. Попробуй - интересная. В этой задаче есть уже не только техника, но нужно и идею найти

Автор: Рыжий 7.3.2005, 21:12
Слушай а у меня вопрос - как можно в турбо паскале писать на русском языке?? или нужен другой компилятор??

Автор: Pakshin A. S. 7.3.2005, 21:15
Из-под виндов... вряд ли... если через дос (во всяком случаем через хорошую эмеляцию), то попробуй стандартную комбинацию по переключению раскладки клавиатуры в досе... Но лучше скачай Turbo Pascal Fpr Windows... smile
Все то же, но для виндов...

Автор: Makarofff 8.3.2005, 01:00
Цитата(Pakshin @ 7.3.2005, 21:15)
Из-под виндов... вряд ли... если через дос (во всяком случаем через хорошую эмеляцию), то попробуй стандартную комбинацию по переключению раскладки клавиатуры в досе... Но лучше скачай Turbo Pascal Fpr Windows... smile
Все то же, но для виндов...

keyrus да и всё

Автор: Pakshin A. S. 8.3.2005, 11:49
Но он не всегда должным образом работет... у меня паскалевские проги с кейрусом под ХР иногда некорректно себя ведут...

Автор: Alex 8.3.2005, 11:58
Цитата(Pakshin @ 8.3.2005, 11:49)
Но он не всегда должным образом работет... у меня паскалевские проги с кейрусом под ХР иногда некорректно себя ведут...

И в чем заключается не корректность?

Автор: Pakshin A. S. 8.3.2005, 12:00
не выводит русские шрифты... а сама оболочка так у меня и не захотела печатать на русском языке...

Автор: Fedor 8.3.2005, 15:26
PHP-Script
Pakshin A. S.
Специально прикреплена тема. Там есть ссылки на русификаторы. После этого у меня заработала нормально и в полноэкранном режиме, и в оконном.

А вообще давайте не оффтопить

Автор: Рыжий 8.3.2005, 17:27
Так еще побродил по нету - нашел еще кучу задач ниче если я их буду тут выкладывать? вы будете проверять - находить ошибки, подсказывать..



2Fedor Ну блин subsets так это задача!!!! пока не знаю решения но буду думать может с опытом прийдет.... а все же интерестная задачка smile

Автор: Alex 8.3.2005, 18:08
Fedor, я очень извиняюсь за оффтоп.


http://forum.vingrad.ru/index.php?showtopic=40764

Автор: Fedor 8.3.2005, 18:11
Цитата(PHP @ 8.3.2005, 16:27)
Так еще побродил по нету - нашел еще кучу задач ниче если я их буду тут выкладывать? вы будете проверять - находить ошибки, подсказывать..

Выкладывай. Только лучше создавай отдельную тему для каждой задачи.

Автор: ~FoX~ 11.3.2005, 11:20
PHP-Script
Дык, так и пиши на русском, только кодировка будет DOS страничка 866 кажется.
Или он у тебя просто не переходит на русский? Если так, то нужно драйверок подгружать ака keyrus, atrusk или так:
1. В autoexec.nt добавить:
lh %systemroot%\system32\kb 16.com ru,866, %systemroot%\system32\key01.sys
2.
В реестре во всех ветках DosKeybCodes
изменить значение параметра 00000409 c US на RU

Автор: Dr.No_xXx 14.3.2005, 22:46
Fedor
можешь скинуть мне задачи на e-mail ,а то скачать че-то не получается
[email protected] smile
и если можно то олимпиады тоже

Автор: Fedor 16.3.2005, 09:14
Послал

Автор: Guest 17.3.2005, 13:19
Написать программу на языке Pascal (Turbo Pascal) для решения следующей задачи:
Дан одномерный числовой массив, состоящий из известного количества элементов. Для этого массива в соответствии с Вашим вариантом:
0. Представить массив чисел в обратном порядке, возводя в квадрат положительные элементы массива и в куб отрицательные.

Автор: Fedor 18.3.2005, 08:48
Guest ну и что здесь интересного? Или ты хочешь чтоб мы за тебя это решили?

Автор: Рыжий 18.3.2005, 12:47
Вот задачку решил вроде работает smile
код:
Код



program matrix;
uses crt;
var
g,b,a:array[1..10] of integer;
u,l,c,z,i:integer;
d:real;
begin
clrscr;
for i:=1 to 10 do
begin
write('введите',i,'-й элемент ');
readln(a[i]);
end;
for i:=1 to 9 do
for z:=i+1 to 10 do
if a[i]<a[z] then
begin
c:=a[i];
a[i]:=a[z];
a[z]:=c;
end;
u:=1;l:=1;
for i:=1 to 10 do
begin
if a[i]<0 then
    a[i]:=a[i]*a[i]*a[i];
if a[i]>0 then
    a[i]:=a[i]*a[i];
end;
writeln('Меньше 0: ');
for i:=1  to 10 do
begin
if a[i]<0 then
write(a[i]);
end;
writeln;
writeln('больше 0: ');
for i:=1 to 10 do
begin
if a[i]>0 then
write(a[i],';  ');
end;
readkey;
end.

Автор: Негодяй 18.3.2005, 16:01
PHP-Script
sqr вместо a[i]:=a[i]*a[i];
и в кубе подругому не помню

возведение числа в степень так: y:=exp(n * ln(x));

Автор: Рыжий 18.3.2005, 16:14
для того чтобы возводить в куб - нет команды а sqr я чето сам забыл

Автор: Негодяй 18.3.2005, 16:32
Цитата(PHP @ 18.3.2005, 16:14)
для того чтобы возводить в куб - нет команды а sqr я чето сам забыл

ну причём тут куб, я же написал, как возвести в степень

Автор: Fedor 18.3.2005, 16:54
Цитата
y:=exp(n * ln(x));

зачем мудрить в такой задаче, где главное простота и наглядность. Если бы тебе нужно было в 100-ю степент возводить или нецелую, то эта формула очень хороша.

Автор: Рыжий 18.3.2005, 17:37
вы бы лучше сказали как решение - работает? у меня хорошо вроде алгоритм я взял нормальный то есть я в паскале начал что-то понимать? smile

Автор: Негодяй 18.3.2005, 18:33
Цитата(PHP @ 18.3.2005, 17:37)
вы бы лучше сказали как решение - работает? у меня хорошо вроде алгоритм я взял нормальный то есть я в паскале начал что-то понимать? 

1) многие переменные нигде не используются;
2) вместо значения "10" используй в самом начале const n=10 (постоянная переменная n=10).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)