Алгоритмы
|
|
Сообщений: 1307
|
Опубликовано: 06.12.2011, 16:14:42
Пока варилась картошка и нечего было делать, еле выбрался из майна... и решил написать сие тутор. Продолжу за Шаманом, и Лексом и буду няшкой ^-^. Ну начнём: Выполнение арифметических действий: Паскаль великая штука, с помощью которой можно сделать практически всё, так вот: С помощью процедур вывода информации на экран можно выводить результаты арифметических операций. Вот простая запись: Code Begin Writeln('37*23+4='37*23+4); End. На экране появиться: 37*23+4=855 А почему так? Да потому что мы вначале указали простое сообщение, не функцию, это как сказать: "Тридцать семь умножить на двадцать три плюс четыре." А в уме уже сосчитали 855. Вам помогут в этом таблицы:
В выше указанных таблицах вполне достаточно функций, чтобы выполнять нужные нам алгебраические действия) Например, для того чтобы вычислить значение арксинуса, достаточно иметь в наличии моск и арктангенс: Code arcsin(x) = arctg([x(-2)-1](-1/2); А длят ого чтобы возвести неотрицательное число в любую степень, можно использовать функции exp() и обратную ей ln(): a(b)=exp(b*ln(a)). Заметьте! Есть ещё одна фигня, которую надо обязательно запомнить. Если мы захотим вывести значение выражения 3500/7, то вместо числа 50 мы увидим а экране следующее: 5.000000000000E+02. Why? о_О Чтобы так не было надо указывать формат, рассмотрим пример: На экране появиться:____50.00(символ "_" означает пробел) Можно сказать так: Под вывод числа отведено 9 позиций(знакомест xD), из них 2 - под кол-во знаков после запятой. Думаю тут всё ясно...
Переменные
Для того чтобы юзать переменную в Паскале, её необходимо описать. Для описания переменных служит специальный раздел программы или как я бы сказал "тег": Var Этот тег должен быть до начала исполнения, то есть до начала Begin! Приведём пример, который выводит на экран значение квадратного корня числа: Code Var A: real; Begin Write('Введите число'); Readln(A); Writeln('квадратный корень числа', A:0:5, ' равен ', sqrt(A):0:5); Readln; End. Слово real обозначает собой тип, к которому относиться переменная A. Процедура Readln() предназначена для ввода значения переменной. Вот такая бадья...
Ну так вот, давайте составим алгоритм решения задачи, которая будет вычислять сколько времени будет падать тело, брошенное с высоты h вниз без учёта сопротивления воздуха. В программе мы будем юзать 2 переменные H и T0 Code Var Begin Write('Введите начальную высоту тела, м'); ReadLn(H); T0:=sqrt(2*H/9.8); Writeln('Тело будет падать с высоты ', H:0:2, ' м ', T0:0:2,' сек.'); End.
Тут думаю объяснять особо не надо.
Линейные алгоритмы Как говорила моя знакомая учительница, с хорошим чувством юмора: "Для решения линейных уравнений, линейка не нужна". Пример: Требуется написать программу, которая решала бы самое простое линейное уравнение ax + b = 0 Как говорит кэп, должны рассматриваться случаи, когда a равно нулю и a не равно нулю, кроме того, при a = 0 возможны 2 случая: если b = 0, то уравнение обращается в тождество. Сделаем простую программу для решения уравнений: Code Var Begin Write('Введите коэффициенты A и B: '); Readln(A, B); if A=0 then if B=0 then Writeln(' Бесконечное множество решений ') else Writeln(' Решений нет ') else Writeln('x=',-b/a:0:3); Readln End. Рассмотрим ещё 1 пример: Code Var C,D,F: real; Begin Write('Введите числа C и D'_; ReadLn(C,D); if C<D then begin F:=C; C:=D; D:=F; end; Writeln('C=',C:0:2,' D=',:0:2); Readln; End.
Циклические алгоритмы
Картошка почти сварилась, но и мы уже почти заканчиваем) Очень часто надо заставить некоторый фрагмент программы повторяться много раз. Кол-во повторений мб фиксированным., а мб заранее неизвестным, далее рассмотрим, что это за фигня...
Рассмотрим вначале с фиксированным числом повторов , это - Цикл For. В Паскале есть 2 формы записи for:цикл с автоинкрементом и цикл с автодекрементом о_О. Но это не так сложно, как кажется. В первом случае будет увеличиваться на 1, а во втором уменьшаться на 1. С автоинкрементом. (For цикловая переменная: = начальное значение to конечное значение do оператор) С автодекрементом. (For цикловая переменная: = начальное значение downto конечное значение do оператор) Пример 1, вывести в строку числа 1,2,3,...10: Code Var i: integer; Begin For i:=to 10 do Write(i:4); End.
Пример 2, Вычислить сумму чисел 0(2)+0.1(2)+...+0.9(2)+1(2). Code Var i: integer; sum: real; Begin sum:=0; For i:=0 to 10 do sum:=sum+sqr(i/10); Writeln(sum); End. Вот такие пирожки.
Уж перестану вас мучить и закончу, а на преобразовании условий и циклов, и остальную инф-ию, которая будет разлагать ваш моск оставлю на потом.
Ух ты! Вы прочитали до конца! Значит вам реально интересно... А теперь составьте несколько прог и поставьте мне плюсик ^-^ А да...и не забудьте назвать меня Няшкой!
R.I.P.
|
|
|
|
Сообщений: 565
|
Опубликовано: 06.12.2011, 16:30:03
ReadMe, название темы смени - оно мне мозги сверлит.
Rorshach, Hitman 27 и многие прочие уже нас покинули - кто следующий?....
|
|
|
|
Сообщений: 825
|
Опубликовано: 06.12.2011, 16:52:51
Мои уроки были хоть и были бредовыми, но тем не менее я не совершал ошибок в исходниках... Очень много информации которая была в прошлых уроках... Если уж начинать все с начала, то разъясни что есть что, например, что такое типы переменных и их числовые значения...
:3
|
|
|
|
Сообщений: 1307
|
Опубликовано: 06.12.2011, 17:04:20
Lex-Serest, а этого не было в твоих уроках? оО
R.I.P.
|
|
|
|
Сообщений: 164
|
Опубликовано: 06.12.2011, 17:13:42
Не хочу резко осуждать сие творения, но не заметить такие грубые ошибки очень сложно. Во-первых: Я не шаман, бл*ать. Во-вторых: Кто отменял приведение типов? Code Begin Writeln('37*23+4='+inttostr(37*23+4)); End. Либо используем операцию конкатенации и функцию перевода типа, либо Code Begin Writeln('37*23+4=',37*23+4); End. ставим запятую. На сколько я знаю в обычном паскале так делать можно и это тоже является некоторым подобием того что сверху. В-третьих, готов поклястся, что вчера операция вычитание обозначалась "-". Возможно, можно и вопросиком, но такое, честно, вижу в первый раз. Quote (ReadMe) ? вычитание Writeln(8?9); -1 Опять же, процитирую лекса, очень много информации из прошлых уроков. В-пятых, мне не нравится то, что урок не посвещён чему-то одному. Получается так что я читаю про выполнение арефметических действий, а потом вдруг читаю про переменные и циклы О_о ИМХО, но мозг от этого сильно плющит. Опять же, нужно стараться писать как можно проще. Я помнимаю, преинкремент, предекремент - это хорошие, годные и главное нужные слова, но когда задачи такие: Quote Вычислить сумму чисел 0(2)+0.1(2)+...+0.9(2)+1(2). то, тут уже *пф*! Возможно я просто устал и сейчас не в состоянии решать это, но блин что в скобках я не понимаю Т_Т. И ещё раз цитирую лекса: начни с переменных. Он уже рассказывал о них, а ты добавь. Расскажи к примеру о приведении типов, о том что можно делать со строками (функции которые произхводят операции над строками О_о чё сказал?), ну ты понел, (наверное). А так, неплохо.
|
|
|
|
Сообщений: 1307
|
Опубликовано: 06.12.2011, 17:20:09
God, всё ясно. Просто новичок и многое могу не так понять и разъяснить Постараюсь всё исправить. А насчёт в скобках, я забыл указать это степени числа
R.I.P.
|
|
|
|
Сообщений: 164
|
Опубликовано: 06.12.2011, 20:27:10
ReadMe, а ну тогда всё ясно. Это... как бы... ты бы хоть подправил сабж.
|
|
|
|