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

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

Автор: buffy
Дата сообщения: 11.01.2003 11:46
Задачи и Программирование в Turbo Pascal 7.0


Перед тем, как задать вопрос: загрузите "версию для печати" (ссылка справа вверху, над номерами страниц) и попробуйте поискать средствами браузера (ctrl+F). Большинство типовых задач уже решались, причем неоднократно!
ВНИМАНИЕ!

Текст всех программ обязательно заключайте в теги [no]
Код: [/code][/no].
Большие тексты (более 15 строк) обязательно прячутся в [no][more]ВАШ ТЕКСТ и/или Ваш КОД[/more][/no]


Альтернативный компилятор
Free Pascal Compiler (FPC) -- мощный компилятор Паскаля
- девиз: пишешь единожды, компилируешь где хошь...
- на 99% совместим по коду с ТР и Object Pascal (Delphi)
- межплатформенный
- свободный
Lazarus -- среда разработки для FPC (аналог среды Delphi7)

Файлы
Русская справка
Turbo Pascal 7.1 добавлены некоторые модули из Borland Pascal, русская справка.
Borland Pascal 7.0 Полный (13-дискетный, вкл. исходники), никем не модифицированный дистрибутив.

Учебники:
В.В.Фаронов - Turbo Pascal. Начальный курс
В.В.Фаронов - Turbo Pascal. Наиболее полное руководство
Д.М.Ушаков, Т.А.Юркова - Паскаль для школьников
С.М.Окулов - Основы программирования
С.М.Окулов - 2 главы из школьного учебника по информатике
В.М.Котов - Олимпиадные задачи по информатике с решениями
Никитин - набор исходников для типовых задач
Мансуров - Основы программирования в среде Lazarus - основы паскаля, много примеров, блоксхем, алгоритмов. 2010. 772 с. примеры к книге
Деревенец - Песни о Паскале - паскаль для школьников и студентов-первокурсников
Епанешниковы - Программирование в среде Turbo Pascal
Паскаль для школьников. Подготовка к ЕГЭ (2011)
Фадеев - Паскаль для школы
Потопахин - Turbo Pascal Решение сложных задач (2006)
Полезные линки
библиотека алгоритмов (есть и на Паскале)
библиотека алгоритмов (ещё одна)
библиотека алгоритмов (и ещё одна)
Разбор олимпиадных задач по информатике от Михаила Густокашина

[more=Проблема с набором русского текста в консоли/Turbo Pascal]
Если в паскале не переключается раскладка:
1) нужно внести изменения в реестр, вот пример reg файла

Код: Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes]
"00000409"="ru"
Автор: FuzzyLogic
Дата сообщения: 11.01.2003 23:21
Во второй задаче непонятно как сортировать массив...он двумерный.

Первая и третья:

http://fuzzeh.com/Misc/z1.pas
http://fuzzeh.com/Misc/z3.pas
Автор: buffy
Дата сообщения: 12.01.2003 02:19
FuzzyLogic
огромное спасибо, ты меня выручил)))
Автор: Excell
Дата сообщения: 19.01.2004 14:16
2all
у меня тоже проблемка этого же плана - нехватка времени...
помогите...

Цитата:
4. Юбилейная финтифлюшка.
Ограничение по времени – 1 секунда.
Ограничение по памяти – 64 мегабайта.

Корпорация “Zabavnye Fintiflushki Inc.” выпускает забавные финтифлюшки N видов. Первую финтифлюшку k-ого вида корпорация выпустила в Bk -ый день со дня основания, а затем с конвейеров сходит очередная финтифлюшка такого вида каждые Tk дней.
Требуется написать программу, которая определяет, в какой по счёту день со дня своего основания корпорация выпустит свою юбилейную, M-ую финтифлюшку.

[/b]Формат входных данных:[/b]
Первая строка входного файла содержит целое число N – количество видов финтифлюшек (1 ≤ N ≤ 100), выпускаемых корпорацией. В каждой из следующих N строк записаны через пробел 2 натуральных числа – Bk и Tk (k = 1 .. N). И, наконец, в последней строке записано целое число M – номер юбилейной финтифлюшки.
Гарантируется, что входные данные таковы, что все числа Bk и Tk, а также число, являющееся ответом к задаче, не превосходят 2∙109.

Формат выходных данных:
В выходной файл следует вывести одно целое число – номер дня (считая со дня основания корпорации), в который будет (была) выпущена юбилейная финтифлюшка.

Пример:
input.txt Output.txt
3
1 1
90 2
200 1
100 96
Автор: Sleepwalker
Дата сообщения: 19.01.2004 17:33
Excell
есть версии.. причем много
будем проверять...
Автор: Excell
Дата сообщения: 20.01.2004 18:09
Sleepwalker
спасибо, у меня есть еще пять задач подобных...
вообще не успеваю...
Автор: Sleepwalker
Дата сообщения: 21.01.2004 10:17
Excell
кхм... решение осталось дома на листочке.. сам понимаешь, набирать, тем более код - особо некогда...
вот некоторые наброски, в принципе, покрываающие бОльшую часть вариантов.
Для начала выводишь формулу подсчета количества штучек в зависимости от дня. Это не сложно: M=(СУММ от 1 до k)((D-Bk)/Tk)+1
знака суммы тут нету, к сожалению
на эту формулу будем опираться потом..
затем отбрасываем "лишние" штуки. Начиная с самой поздей, вычисляем число деталей в день ее производства. Если оно больше, чем М - вычитаем наименьший период и проверяем. Если снова большей - отбрасываем эту деталь (проще говоря, к моменту начала ее производста уже будет достигнуто М)
Далее... вычисляем НОК от всех оставшихся периодов (как - я думаю, знаешь, раз взялся за олимпиадные задачи). Мы получим число деталей, производимых за этот мега-период, тем самым РЕЗКО сузив границы перебора... вот здесь и возникает проблема, если периоды будут большие, но с ма-а-а-аленькой разницей между др. др.
Ну а далее... если число периодов больше одного - вычитаем из М число штук на начало периода - и снова применяем описанный алгоритм, соответсвующим образом, ессно, меня стартовые дни...
(кстати, вариант рекурсии пришел на ум только что

вот в принципе и все...
конечно, можно придумать такое задание (а обычно комиссии это умеют), которое основательно нагрузит прогу. и еще проблема в размерности.. если я правильно прочитал, то B и T имеют предел 2в109 ? не буду говорить, что на Земле от сотворения мира еще столько времение не прошло
Автор: Excell
Дата сообщения: 21.01.2004 17:01
Sleepwalker

Цитата:
решение осталось дома на листочке.. сам понимаешь, набирать, тем более код - особо некогда...

если будет время напиши плз....
идею вроде уловил, но нехватка времени не дает часок посидеть-подумать...

Цитата:
если я правильно прочитал, то B и T имеют предел 2в109 ? не буду говорить, что на Земле от сотворения мира еще столько времение не прошло

2*10^9
Автор: Sleepwalker
Дата сообщения: 22.01.2004 09:48
Excell

Цитата:
2*10^9
тоже немало 54 миллиона лет

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

Автор: volhv
Дата сообщения: 22.01.2004 10:10
А че все такие занятые???

И от кудова такие задачки???

И вааще че за:
Цитата:
2&#8729
???

Я здесь новенький...
Автор: Excell
Дата сообщения: 22.01.2004 16:11
Sleepwalker
я понял... спасибо за идею...
будем писать....
Автор: STEEL
Дата сообщения: 26.12.2004 16:11
Помогите решить.
--
Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта.
В программе должны быть предусмотрены процедуры ввода-вывода последовательности символов и ее обработки. Исходные данные должны вводиться с проверкой на область допустимых значений.
ВАРИАНТЫ
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству:
1) в слове есть повторяющиеся буквы;
--
Задав конкретную функцию F(x), построить на символьном экране дисплея ее график и графически найти все возможные решения, не применяя никаких численных методов.
При реализации учесть, что вид функции и интервал могут быть любыми (в конкретных вариантах задан тестовый интервал и значение корня на этом интервале - для проверки правильности построения графика данной функции).
В программе должны быть предусмотрены соответствующие процедуры и функции.
ВАРИАНТЫ
1) F(x) = x*x - ln (1+x) - 3. На интервале [2,3] ответ: x=2.0267.

---
Задав двумерный массив вещественных данных (матрицу А), реализовать его обработку, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику задачи.
В программе должны быть предусмотрены процедуры ввода-вывода элементов массива А и его обработки.
Варианты
Задана квадратная матрица A размером N x N (N<=10), состоящая из действительных элементов.

1) Найти произведение всех ее отрицательных элементов и заменить им все диагональные элементы этой матрицы.

Автор: TANYUWKA
Дата сообщения: 12.02.2005 13:57
Народ помогите!!! Как Тест в Excel делать(например обычный типа психологического)?! Очень надо!!!
Автор: STEEL
Дата сообщения: 25.04.2005 18:23
Дан одномерный массив целых чисел размерностью 10. Определить колличество положительных групп в этом массиве. (Группой называется последовательность состоящая из 2х и более положительных чисел находящихся рядом.)

Необходимо два цикла? И сделать следующую проверку if mas[i] and mas[j] > 0 then s:=s+1;
Верно? Помогите правильно составить циклы, бред полный получаю.

Автор: RaZer
Дата сообщения: 25.04.2005 18:40
Цикл - один. Зачем 2 массив то одномерный?

Код:
for i:=2 to n do
begin
if (a[i-1]>0) and (a[i]>0) then
s:=s+1
end;
Автор: OdesitVadim
Дата сообщения: 25.04.2005 19:19
У меня так получилось

Код:
var mas:array[1..10] of real;
s:integer;
i:integer;
fl:boolean;
begin
for i:=1 to 10 do
mas[i]:=strtoint(Memo1.Lines[i-1]);
fl:=false;
s:=0;
for i:=1 to 10 do
begin
if (mas[i]<0) and fl then fl:=false;
if (mas[i]>0) and not fl then begin s:=s+1; fl:=true; end;
end;
Edit1.Text:=inttostr(s);
end;
Автор: STEEL
Дата сообщения: 25.04.2005 20:25
Спасиб! Вообщем-то вот так заработало:

Код:
program my1;

type
tab = ARRAY[1..10] of integer;
var
mas: tab;
s, s1, i: integer;

begin
clrscr;
for i:= 1 to 10 do
begin
readln(mas[i]);
end;

writeln;
s:=0;
s1:=0;

for i:= 1 to 10 do

begin

if (mas[i-1]>0) and (mas[i]>0) then begin
s:=s+1;
end

end;

writeln(s);
writeln(s1);
readln;

end.
Автор: RaZer
Дата сообщения: 25.04.2005 20:46
OdesitVadim
Все работает. И зачем там булевые переменные вводить??? Если задача простейшая.
ЗЫ На делфе проверял?
STEEL
Зачем ф цикле начинать с і=1? Это же на один проход цикла больше, чем необходимо. Когда і=2, то и первый элемент проверяется при первом проходе:
первый проход: 1 и 2
второй: 2 и 3
.............
девятый 9 и 10.

Автор: ShIvADeSt
Дата сообщения: 26.04.2005 05:20
col:=0;
for i:=3 to 10 do
if (mas[i]<=0 ) and (mas[i-1]>0) and (mas[i-2]>0) then Inc(col);
if (mas[9]>0) and (mas[10])>0 then Inc(col); //если в массиве последние два элемента полож, а после них ничего нет то это тоже группа. Или можно добавить 11 элемент равный нулю по желанию.
writeln('kolvo grup=',col);
RaZer в твоем примере

Цитата:
for i:=2 to n do
begin
if (a[i-1]>0) and (a[i]>0) then
s:=s+1
end;

серьезный баг он последовательность 2 3 4 воспримет как две группы, а по условию это одна группа.
И еще STEEL
не правильное решение та же ошибка что и у RaZer
И еще одно но. Положительные числа это числа большие нуля, поэтому сравнение типа <0 не правильное. Это все ИМХО.
Автор: OdesitVadim
Дата сообщения: 26.04.2005 12:02
ShIvADeSt
так как задача попахивает преподом, то по поводу 0 желательно в него прокончультироваться. Ноль не есть отрицательное (хотя и не положительное).RaZer
Почему ты считаеш что буленова переменная это усложнение. Можно конечно и целую переменную ввести, но так делают Сишники обычно (у них нет с буленовскими накладки определённые. Тоесть они есть, но обявлены как целые числа ). Я прогнал твой пример на нескольких тестовых примерах и он меня не удоволетворил
Автор: RaZer
Дата сообщения: 26.04.2005 23:15
ShIvADeSt
Все понял где ступил. (Когда читал условие...).

OdesitVadim
Тогда да, естесно, необходимо вводить булевый тип для проверки типа "далее идет продолжение текущей группы? или нет".
Автор: ShIvADeSt
Дата сообщения: 27.04.2005 02:01
OdesitVadim

Цитата:
так как задача попахивает преподом, то по поводу 0 желательно в него прокончультироваться. Ноль не есть отрицательное (хотя и не положительное)

Ты не поверишь, но я и оценивал ее как препод коим являюсь. Поэтому если написано положительные (а не неотрицательные) то это с точки зрения математики числа строго болшие нуля. Твой пример хороший, я тоже вначале так подумал, что ищем первое меньше нуля включаем флаг, но потом немного подумал и нашел более оптимальный с моей точки зрения (и с точки зрения студентов, так как большинство не сможет объяснить для чего они вообще флаг вводили и как он дейтсвует )
Автор: OdesitVadim
Дата сообщения: 27.04.2005 10:47
ShIvADeSt
Но мне кажеться что твое решение более сложно. Зачем усложнять жизнь. Пытаясь упростить, мы усложняем. Когда я учился написалнасколько маленький код, что препод сказал он неправильний, так как маленький (у меня около 5 строк, у него около 20+дополнительный массив). Но мы проверили на машине и он принял, разобрался, а потом ещё студентам рассказывал.
Если говориш что мой код сложен, значит что то не так обясняеш детям, ИМХО.
Автор: STEEL
Дата сообщения: 27.04.2005 21:27
На самом деле я для того, чтобы окончательно не отупеть и не забыть язык, решил полистать учебник по паскалю, в конце задачки прилагаются, вот собственно одна, две задачи, которые я затрудняюсь решить, собственно и постяться сюда. Спасибо огромное.
Автор: STEEL
Дата сообщения: 02.05.2005 00:21
Калькулятор пишу, и вот к чему пришёл. Нужно в одной строке задать сразу 10+15 , а не вводить 10, потом +, следом 15. Подскажитека.

Код:
PROGRAM Ex1;

VAR
a, b: INTEGER;
Ch: char;

BEGIN

readln(a);
readln(Ch);
readln(b);

CASE Ch OF
'+': writeln(a,ch,b,'=',a+b);
'-': writeln(a,ch,b,'=',a-b);
ELSE
writeln('sorry');
END;

END.
Автор: YurikGL
Дата сообщения: 02.05.2005 17:57
>Калькулятор пишу, и вот к чему пришёл.
В нете есть достаточно интерпретаторов формул. Не изобретай велосипед.

По твоему случаю - что-то типа такого

Считываем все стоку, ищем с помощью pos символ '+' если нет такого, то ищем символ '-'. Далее вырезаем строчку от первого символа до знака +/- преобразуем ее в число. Аналогично поступаем со сторочкой от символа следующего за +/- и до конца. Выполняем над двумя получившимися числами требуемое действие.
Автор: DroN_S
Дата сообщения: 14.05.2005 17:00
Привет!!!
Народ, помогите, как возвести число в степень? Например 5 в 1/4 степени!!!
Автор: raven
Дата сообщения: 14.05.2005 18:18
используй формулу a^x=exp(x*ln(a)) только следует учитывать, что ln берется только от положительных чисел. т.е. отдельно обрабатываем 0 и для отр. чисел используем формулу: a^(-x)=1/(a^x)
Автор: DroN_S
Дата сообщения: 15.05.2005 09:15

Цитата:
a^x=exp(x*ln(a))


По этой формуле ничего не получается...
Автор: evle
Дата сообщения: 15.05.2005 09:33
DroN_S
Что значит не получается? Код в студию.

Страницы: 1234567891011121314

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


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