![]() |
Решите задачи на ТурбоПаскале (Save the Jeff)
У нас информатика с 10го класса. Программирования на турбопаскале :blin: Учитель впринципе никакой... Всё что мы проходили - это написать формулу вычисления площади/периметра треугольника и т.п. :( И ещё что-то эта дура толкала про массивы, но никто ничего не понял...:confused:
И вот теперь в 11м снова та же самая фигня началась...причём, эта дура считает, что мы с прошлого года что-то запомнили, т.к. она нам "всё прекрасно объснила" (это её слова) и теперь мы пол года будем просто задачи решать....без какой либо теории... Я сюда буду подкидывать по 2-3 задачи раз в 3 недели примерно... Кому не лень - решите пожалуйста. Они поидее не такие уж и сложные...:blin: Понеслась....:) Задача№ 1: Написать программу, которая генерирует три последовательности из десяти случайных чисел в диапазоне от 1 до 10, выводит каждую последовательность на экран и вычисляет среднее арифметическое каждой последовательности. Задача№ 2: Написать программу приближённого вычисления интеграла методом трапеций. После каждого цикла программа должна выводить вычисленное значение, количество и величину интервалов. (Самое "весёлое" здесь то, что тему Интегралы мы по математике ещё не проходили) Задача№ 3: Написать программу, которая вычисляет наибольший общий делитель двух целых чисел. Вот собссно и всё...Если дело сдвинется с мёртвой точки, то через 3 недели ещё задач подкину... |
ну это нескольно не веб программирование :)
по первой задаче: Код:
var Вторую поищу, где-то была решенная на паскале :) постучись в аську или на мыло. договоримся вот алгоритм для НОДа (так называемый Бинарный Алгоритм Евклида): Код:
m:= a; n:=b; d:=1; |
Вторая задача (алгоритм был откуда-то спёрт :) )
Код:
function Func(const x: Real): Real; |
Вообще говоря НОД вычисляется проще:
Код:
{ a, b - входные данные, целые положительные числа } З.Ы. В первой программе не забудь в начале вставить вызов процедуры Randomize. |
Ghost
Согласен. Алгоритм проще, но он сходится дольше. |
Цитата:
Училка сказала, что в решении задачи должен обязательно использоваться цикл repeat :blin: У кого какие соображения на этот счёт? :rolleyes: |
Цитата:
Код:
repeat Код:
Count:=Round(Abs(b-a)/eps); |
Цитата:
А то фиг её знает....может и не понять :blin: |
Jeff
Прочитай внимательней :-) Result:=Result + (Abs(b-a) + Abs(Min(Func(a+Count*eps), Func(a+Count*eps+eps))))*eps; нужно вставить вместо многоточия в моем примере :) Код:
Count:=Round(Abs(b-a)/eps); |
@_is_absent
а...блин....тормоз :biggrin::rolleyes: |
Не забываем перед циклом сделать i:=1;
а в цикле Inc(i); |
albo
точно. забыл. каюсь :) |
Вложений: 1
Блин...кароч я окончательно запутался :blin::blin:
я файл прицепил - гляньте пжалуста - чё у меня там не то :rolleyes: |
inc(i) нужно вставлять внутрь цикла repeat...until, а не после него.
Добавлено через 2 минуты: Непонятно еуда вставлен integrate := result; Вот, что надо было: Код:
uses Вот, что получилось у меня: Код:
uses |
Ghost
второй вариант, imho, правильнее... :-) |
Вот вам ещё:
Написать программу, которая вычисляет сумму диагональных элементов квадратной матрицы. использовать массивы :) |
Jeff
begin {формируем массив} sum:= 0; for i:= 1 to N do tr:=tr + a[i,i]; end; вроде так.. N - размерность матрицы, tr -- след матрицы (сумма диагональных элементов) a --матрица |
@_is_absent
пардон, за тупость, но можно немного поподробнее?....я только примерно представляю, что такое матрица :ooh: |
Jeff
квадратная матрица это тоже самое, что и двумерный массив. определяется он вроде вот так: var a: array [1..10] of array of [1..10] integer; |
@_is_absent
попробую понять :rolleyes:;) |
Jeff, давай ещё задачки, я тоже хочу порешать, а то у нас в 9 и 10 классах програмирование было (бейсик и паскаль), а сейчас (11кл), пришла новая учёлка, которая ничего не знает, ну и программирования у нас сейчас нет, а жалко. Вот хочу порешать задачки хоть тут, раз в школе не получается.
|
V@nya
можешь полностью написать решение предыдущей задачи + ещё одну, только с матрицей третьего порядка ;) |
Код:
uses |
пред. задача:
uses crt; var a:array[0..9,0..9] of integer; i,j,k,t:integer; begin clrscr; randomize; for i:=0 to 9 do begin for j:=0 to 9 do begin a[i,j]:=random(10); {write(a[i][j]); - для вывода массива на экран} end; {writeln; - для вывода массива на экран} end; for i:=0 to 9 do t:=t+a[i,i]; writeln(t); readln; end. с трехмерным массивом (если это матрица третьего порядка) : uses crt; var a:array[0..9,0..9,0..9] of integer; i,j,k,t:integer; begin clrscr; randomize; for i:=0 to 9 do for j:=0 to 9 do for k:=0 to 9 do a[i,j,k]:=random(10); for i:=0 to 9 do t:=t+a[i,i,i]; writeln(t); readln; end. Давно на паскале ничего не писал. Добавлено через 5 минут: Покя я тут печатал ответ, Ghost упел тоже напечатать решение пред. задачи. P.S. То что заключено в {} можешь не печатать. Добавлено через 3 минуты: Жду ещё задачек поинтереснее. Мож чё ещё на с++ написать? |
Ghost
V@nya спасибо...вроде как работает :) P.S: V@nya не...у нас только турбопаскаль |
Jeff, ещё задачки будут?
|
Ghost
так. небольшое замечание... inc работает только с целыми числами... может всетаки += (в смысле s:= s+ a[i,i])? |
V@nya
через недельку-другую будут обязательно :) |
@_is_absent
Цитата:
Jeff Ждем-с. Я сам вообще-то препод по информатике в вузе - хочется вспомнить старое... ;) |
Ghost
слушай. не в тему немножко. Когда сам был на первом курсе, мне предложили написать программу автоматического расставления "горячих клавиш". в общем-то не сложная программа.. есть список строк (допустим только на русском языке, но это не важно) нужно сопоставить с каждой строкой буковку из этой строки, так чтобы буковки не повторялись. либо сказать, что это сделать невозможно. |
@_is_absent
Вот накропал на скорую руку. Здесь, правда, есть зависимость от регистра, но при желании от нее легко избавиться: Код:
uses |
Ghost
Красиво. (я не так делал) :) У меня без рекурсии было... или это не считается рекурсией? У меня был перебор с возвратом... Это к тому, что может быть такая комбинация строк, при которой важна последователь в которой ты назначаешь "горячие клавиши". Даже где-то был пример, в котором только в одном единственном порядке удавалось найти эти буквочки :) А вообще -- красиво. :) |
ne znau v temu ili net no pro turbo pascal nashel tolko tut.
mojet gde to est ssilka na samu progu "turbo pascal windows"? a to ochen nujno.(nasha uchilka sama priznalas chto programirovanie ne znaet??!!??!!) tak chto vikarabkivatsa na ekzamene pridetsa nam samim. a progi netu chtobi doma grizt granit nauki. zaranee blagodaru. |
mkasoyan - Смотри ПМ.
|
mkasoyan
Цитата:
|
Jeff
Цитата:
Кто знает где в сети можно найти подробное описание комбинаторных алгоритмов и решения олимпиадных задач (про рюкзак там и т.д.). Именно алгоритмы с описанием почему и как работает, а не голый код. |
Ну кто там задачки хотел? ;)
Нумба 1: Написать функцию Procent, которая возвращает процент от числа, полученного в качестве аргумента Нумба 2: Написать процедуру, кторая выводить строчку, состоящую из одинаковых символов. Длина строки и символы являются параметрами процедуры Честно говоря я даже понятия не имею о чём тут идёт речь, так что, пожалуйста, не надо меня ни о чём спрашивать gigi |
1.
function Procent(N: Integer, Proc: Integer): Real; begin Procent:= N/100*Proc; end; Если нужно возвращять один процент, то Proc не нужен :) 2. procedure StringRepeat(Rep: String; Count: Word); var i: word; begin for i:= 1 to Count do Write(Rep); end; |
is_absent
Не ошибка, просто замечание: может не "Rep: String;", "Rep: Char;"? ;) |
is_absent
а первую как нибудь не через функцию можно решить?...а то она опять доменя докопается, что функцию мы нне проходили... |
Часовой пояс GMT +4, время: 18:53. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.