Здравствуйте любители Turbo Pascal'я. Хочу представить на ваш суд паручку задач, несмотря на их простоту у них есть 1 условие - это НЕ использовать никакие процедуры, функции, операторы цикла FOR, WHILE, REPEAT, условные оператор IF и CASE OF, а только простые функции Turbo Pascal Далее будет список задач:
№1 С клавиатуры считываются значения четырёх числовых переменных: a,b,с,d. Поменяйте между собой по кругу слева направо значения этих переменных. Например, если: a=10, b=20, c=30, d=40, то после замены получим a=40, b=10, c=20, d=30.
№2 Даны натуральные числа n и d. Вычислите а) 1+2+...+n; б) 4+4+d+4+2d+4+3d+...+4+(n-1)d; в) 5+5d+5d^2+5d^3+...5d^n-1.
№3 Напишите программу, которая вычисляет разность величин двух углов(выраженное в градус, минутах и секундах).
№4 Дано целое число n. Вычислите сумму цифр этого числа.
№5 Дано целое число n. Выведите на экран "перевёртыш" числа n.
№6 Даны натуральные числа a и b, где 99<a<1000, b<10. Напишите программу, которая выводит на экран запись числа a в системе счисления с основанием b.
№7 Дано натуральное число n, меньше 27. Напишите программу, которая выводит на экран букву, порядковый номер которой в латинском алфавите равен n.
№8 Дана буква латинского алфавита. Напишите программу, которая выводит на экран порядковый номер в латинском алфавите. Например, для буквы М получим 13.
№9 Банк принимает вклады с годовой прибылью в р%. а) Какая сумма денег будет на счету через х лет, если сейчас положить в банк S0 долларов? (р,х,S0 даны) б) Через сколько лет на счету, на который положили S0 долларов, окажется Sf долларов? (х,р,Sf даны)
№10 Найдите наибольший показатель степень числа 16, который можно сохранить в переменную типа: а) integer; b) word; c) LongInt.
№11 найдите минимальное количество купюр, формирующих заданную сумму леев. Примечание: в гос-ве находятся в обращении купюры достоинством в 100,50,20,10,5,1 долларов.
№12 Даны числа m и n. Не сравнивая их, выведите на экран меньшее из них.
№13 Даны числа m и n. Не сравнивая их, выведите на экран большее из них.
Кому интересно некоторые из них решены , жду ваших идей и предложений !!!
Добавлено (04.03.2008, 00:09) --------------------------------------------- а куда же все любители Turbo Pascal потерялись ? или они настолько простые, я уже почти все закончил - некоторые работают, другие - ну почти работают!! Интересно было бы с кем-то их обсудить !
aidjek, Задачи правда интересные. Попробую порешать на досуге... А что является простыми функциями/процедурами паскаля? такие вещи как sqr? Сколько можно использовать переменных? Поддерживаю также проект сообщество молодых сисадминов
2 Alexander, хехе низя так !!! как говорится Не все золото, что блестит. Уровень задач расчитан на учащихся 2 курса по специальности Информатика, вообще книга включает в себя разделы - каждый раздел определённое число задач, так вот эти задачи из 1 раздела - где происходит ВВЕДЕНИЕ В ЯЗЫК Turbo Pascal, вообще у меня их много - потому что в этом году сдаю госы, вот и мне 138 штук накидали для решения, вот поэтому и решил проверить себя, может кто что проверит !!!
2 Seqular, открываем любой учебник по Pascal'ю и смотрим - обычно в начале идут основные функции, применяемые в Turbo Pascale. Ниже представлю список, дабы не возникали какие то вопросы.
Насчёт решённых, в принципе они все решены более или менее, есть те в которых я уверен и те которые не очень:
Уверен в: 1, 3, 5, 9, 12, 13 - остальные значит принадлежат к другой категории, но наброски есть для всех !
просто кое-где туплю, где просто не помню, а самое обидное учусь на Физика, Информатика 2 специальность, пожтому внимание ей сами понимаете уделялось не АхТи, реально в последний раз залезал в Pascal 2 года назад где-то, а тут ГОС экзамен и волей не волей приходиться!
Кстати задач просто Куча !!! кое какие решены, другие наполовину, ну конечно же есть и нерешённые !
Если Администрация разрешит то каждую неделю могу вывешивать по нескольку штук решённых, ну и решенённых, может кто-то докумекается до их решения !!!
Вообщем дерзайте !!!
Кому не лень пишите в аську - информация в профайле
Но и форуме не забывайте люди же всё таки стараются !!!
Всем Спасибо кто откликнулся !
PS: Список разрешаемых функций: = <> > < <= >= + - * / DIV MOD ABS(x) SQR(x) SQRT(x) INC(x) INC(x,y) DEC(x) DEC(x,y) TRUNC(x) ROUND(x) INT (x) FRAC(x) SIN(x) COS(x) ARCTAN(x) EXP(x) LN(x) NOT AND OR XOR
Уровень задач расчитан на учащихся 2 курса по специальности Информатика
Отлично, значит как минимум год я могу за программироваие не садится (я на 1-ом курсе) Разобрал вторую задачу, т.к. ты толи не дорешал, толи не уверен, что правильно решил. У меня получилось так:
Quote
а) 1+2+...+n;
ну тут всё просто:
Code
Result:=n*n div 2 +Round(n/2);
Далее..
Quote
б) 4+4+d+4+2d+4+3d+...+4+(n-1)d;
Ну тут тоже нет ничего особенного:
Code
Result:=(n*n div 2 +Round(n/2)-n)*d+4*n;
И последний:
Quote
в) 5+5d+5d^2+5d^3+...5d^n-1.
Ну он даже проще второго, просто требует знания таких понятий как "экспонента" и "логарифм", благо они нам с восьмого класса известны: Result:=5*(trunc(exp(n*ln(d))) div (n-1)); Возможно есть более быстрый вариант, но я+лист бумаги+ручка его не нашли, так что критикуйте .
Добавлено (07.03.2008, 02:24) --------------------------------------------- aidjek, выкладывай свои "сомнительные" решения, а то обломно все задачи с нуля решать.
спасибо насчёт №2 - довольно всё написано правильно, щас проверю в Pascale!!
вот тока проверил - всё получилось !! Спасибо.
Так ну давай разбираться. Начнём-с с №4: Как я понимаю здесь нада сначала выделить каждую цифру в отдельности, а затем их сложить - но сколько не бьюсь получается только этот алгоритм:
Code
Program Aidjek; uses crt; var Result,n:integer; Begin clrscr; readln(n); Result:=(((((((n div 1000000 mod 10)+ n div 100000 mod 10)+ n div 10000 mod 10)+ n div 1000 mod 10)+ n div 100 mod 10)+ n div 10 mod 10)+ n mod 10); writeln(Result); readkey End.
Меня смущает объём программы, вот и думаю нет ли какого нить другого алгоритма, поменьше, хотя знаешь меня и этот устроит, просто ради интереса так подумал !!
убейте меня . Я пошёл искать самую крепкую стену . Второй номер- это суммы прогрессий! Утешает одно, мой способ нахождения геометрической прогрессии для компа куда более экономный, т.к. не использует экспоненту и логарифм. А про четвёртый пока ничего на ум не пришло . Только код у тебя маленький, т.к. ЛонгИнт поддерживает значения до 2147483647 . Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Суббота, 08.03.2008, 02:14
Что касается четвёртого, то я так и не нашёл зависимости межну числом и суммой его цифр . Только твой код желательно записать в более читаемом виде, а именно без скобок и первого mod'а(зачем брать остаток от деления на десять от числа, которое заведомо меньше 10 ). Для типов Word и Integer код будет таким:
Code
Result:=n div 10000+ n div 1000 mod 10+ n div 100 mod 10+ n div 10 mod 10+ n mod 10;
Ничего путнего в голову не идёт . Выделение цифр числа без цикла-это бред. 99.9% что есть зависимость между числом и его цифрами, а если нет, то автору задачи место в дурке. Короче ничего я не придумал, а один и тотже "алгоритм" по 10 раз писАть не надо. Скажем дружно- нафиг нужно!
хе насчёт АвторА ЗаЧёт - это наш ЗавКафедры Информатики - так что тут полностью с тобой согласен
Щас выложу мой алгоритм !!!
А вот насчёт 5-го - полний Бизнес!
вот алгоритм:
Code
Result:=(((((((((n mod 10*10+ n div 10 mod 10)*10+ n div 100 mod 10)*10+ n div 1000 mod 10)*10+ n div 10000 mod 10)*10+ n div 100000 mod 10)*10+ n div 1000000 mod 10)*10+ n div 10000000 mod 10)*10+ n div 100000000 mod 10)*10+ n div 1000000000 mod 10); a:=trunc(ln(n)/ln(10))+1; r:=Result div round exp(9-a)*ln(10))); writeln(r);
хех, вот что значит невнимательно прочитать условие . Задача просто вывести на экран! Для типов Word и Integer это будет выглядить так:
Code
ReadLn(n); WriteLn(n mod 10, n div 10 mod 10, n div 100 mod 10, n div 1000 mod 10, n div 10000);
Добавлено (09.03.2008, 14:56) --------------------------------------------- P.S. Вспоминается очень известный случай, когда при приёме на работу программистов просили написАть программу, выводящую на экран сумму первых 100 чисел. Если переписать на паскаль, то верный вариант такой:
Code
begin WriteLn(5050); end;
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Воскресенье, 09.03.2008, 21:57