При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!16) Оператор присваиванияВ этом принципиальное отличие компьютера от калькулятора. Калькулятор выполняет работу с конкретными числами, а программа представляет собой реализацию алгоритма - универсального способа решения не просто конкретной задачи, а целого класса задач без привязки к определенным значениям. Возьмем для примера способ расчета так называемой личной триграммы по методу фэн-шуй.
Фэн-шуй - древнее китайское учение, объясняющее, как надо планировать и обустраивать свой дом, жить в гармонии с природой и использовать ее энергию для счастливой жизни.
Способ расчета основан на магическом :) квадрате Ло-Шу, цифры в котором расположены вот так: И по горизонтали, и по диагонали, и по вертикали сумма всегда равна 15.
Способ подсчета для мужчин. Надо вычесть из ста число, образованное двумя последними цифрами года рождения. То, что получиться, надо разделить на 9, а по значению остатка и будет определено подходящее направление. Если значение этого остатка - 0, то значением будет 9. Если же значение равно 5 , то направление считается юго-западным (2). Если такие вычисления выполнять на калькуляторе, то для каждого нового человека придется всю последовательность действий повторять вручную с самого начала. Для программы на компьютере это не так. Достаточно записать алгоритм на универсальном языке программирования, выделив для хранения числа года рождения отдельную ячейку (переменную), после чего для определения триграммы (направления света) пользователю потребуется просто ввести новое число. Все вычисления компьютер выполнит автоматически и покажет полученное направление. При этом программе не важно, какое конкретно значение хранится в переменной (ячейке памяти). Все действия над ним будут выполнены по неизменному указанному алгоритму. Таким образом мы получаем возможность создавать универсальные приложения, не связанные с конкретными числовыми величинами! Именно в этом ценность компьютерных программ - они обрабатывают входные данные автоматически по заданному алгоритму без участия пользователя. Ему достаточно только задать начальные значения и получить ответ. Чтобы программа формировала правильный ответ, в переменной должны быть записаны корректные величины, отвечающие нуждам пользователя. Поэтому одной из самых популярных и распространенных команд, существующая во всех языках программирования, считается команда записи в переменную некоторого значения. Такая команда называется командой (или оператором) присваивания. Этот оператор записывает в указанную переменную (в соответствующую ей ячейку памяти) новое значение. Происходит присваивание этой переменной новой величины. Оператор присваивания записывается в Delphi очень просто: переменная := значение ; В левой части оператора указывается название переменной, в правой - присваемое ей значение. Две части разделяются комбинацией символов ":=" (так получилось потому, на старых компьютерах такой комбинации соответствовал один символ; пробел между : и = вставлять, конечно, нельзя). В результате значение, записанное справа от этого символа, заносится в переменную, указанную слева от него. После выполнения следующего оператора X := 5 ; в переменной X окажется значение 5. Старое значение, которое было записано в переменной X, будет стерто. Например, если мы запишем в программе подряд два оператора присваивания:
X := 0; то после выполнения первого оператора в переменной X окажется значение 0, а после выполнения второго оператора - 1. При этом, очевидно, такая последовательность команд в программе не имеет смысла. Ведь если мы сначала записали в переменную X значение 0, а затем сразу - 1, то первое значение 0 тут же будет стерто, а в программе оно нигде не использовалось. Последовательность команд в следующем примере Var X: Integer;
begin показывает, как сначала в переменную X заносится значение 5, а затем содержимое этой переменной (число 5) выводится на экран. Не забывайте, что перед любым использованием переменной в программе ее предварительно надо декларировать с помощью команды Var. Для ввода значения в переменную с клавиатуры можно воспользоваться уже знакомой командой ReadLn(). Только теперь в ней указываются не пустые скобки - в этих скобках записывается название переменной, в которую сразу попадает введенное с клавиатуры значение. ReadLn(x); Когда в ходе выполнения программы встречается такой оператор, то ее работа останавливается, и программа ожидает ввода человеком числа с клавиатуры и нажатия Enter. Вот как будет выглядеть вариант программы, в которой сначала выводится значение переменной x, занесенное в нее с помощью оператора присваивания, а затем новое значение x вводится с клавиатуры, и оно же сразу выводится на экран:
var x: integer; Последний readln; нужен, чтобы увидеть результат вывода, иначе программа сразу закроется.
В Бейсике .NET вместо комбинации символов ':=' в операторе присваивания используется один символ '='. Так же и в Си. x = Console.ReadLine() В ходе его выполнения происходит запрос ввода с клавиатуры числа, и затем оно попадает (присваивается) в перменную x. Вот как такая же программа запишется:
Module Module1 В Си++ (я иногда использую название Си,иногда Си++ - это потому, что пока все, что мы изучаем, работает и в Си, и в Си++!) как обычно, будет немного посложнее. Для вывода мы использовали команду cprintf(). Для ввода будем использовать схожую cscanf(). Знание этих команд пригодится в будущем очень хорошо, потому что это целый класс такой. print / scan - печать (вывод), сканирование (ввод). Различается только первая буква: cprintf() - консольная печать (c); sprintf() - печать строки (s); fprintf() - печать (вывод) в файл (f). Есть и просто printf() :) Соответственно, и scanf() есть в версиях cscanf, sscanf итд. По аналогии с cprintf() запись cscanf() для, например, ввода значения в переменную x (целого типа) по идее должна бы записываться так: cscanf("%d", x ); Однако такая запись будет некорректной. Чтобы данная команда выполняла нужные нам действия, перед именем переменой (x) придется предварительно поставить символ "&" (амперсанд). cscanf("%d", & x ); Если объяснять, зачем символ & требуется, то только больше запутаемся сейчас. Идеологически такая запись объясняется повышенными требованиями Си к эффективности. В нем немало подобных особенностей записи, которые при правильном использовании могут дать значительный выигрыш в производительности программы. Они затрудняют подчас ее составление, но зато такие усилия при кодировании окупаются сторицей в готовом продукте. Поэтому на Си делаются операционные системы, драйверы, игры часто создаются (прежде всего движки трехмерные, где высокая скорость работы важна) итд. Еще немного про printf/scanf. Они предназначены для форматированного ввода/вывода. Строчка, что сначала в них указывается, описывает формат ввода/вывода (отсюда и последняя буква f (format) в команде cprintf). Если, например, она равна "%d", то буковка d в этом формате означает требование ввести/вывести число целого типа (int). Буква f ("%f") - дробное. Итд. Мы структуру форматного обмена будем попозже более подробно изучать, а кому сейчас интересно, может посмотреть в справке по Си по этой команде. Кроме того, в строку формата можно включать произвольный текст, который будет 1:1 выводиться на экран: "Vvedite chislo: %d". Сами форматные элементы начинаются с символа %, за которым следует конкретный спецификатор формата (d или f например). Текст без предваряющего % вообще никак не обрабатывается и просто выводится. А чтобы произошел перевод на новую строчку, надо включить, как уже говорилось ранее, комбинацию двух символов "\n". Там, где она в строке формата встречается, и будет произведен перевод строки. Вот наша программа (заголовочные файлы не забудьте включить):
main() Последняя команда нужна, чтобы задержать работу и увидеть результат предыдущего вывода. Достаточно ввести произвольное число для завершения программы здесь, и все. А getch() у меня в этом месте не работает :) По моему, так хитро консольный ввод устроен, если что-то было ранее введено, то нажатие одной клавиши уже не ловится. Или я ошибаюсь, в чем тут дело, кто подскажет? Забавно, что в cprintf() амперсанд не ставится, а в cscanf() ставится? Такие вроде бы нестыковки для Си характерны (хотя логическое объяснение этому имеется :). Но некоторые именно за это Си и любят :) Главное, чтобы язык был хороший :) В правой части оператора присваивания может стоять не только одно число, но и целое выражение. Попробуйте написать программу, в которой переменной присваивается результат произвольного выражения, затем значение переменной выводится на экран. X := 2 + 2; Только не забывайте, что если результат будет не целый точно, а дробный, то тип переменной тоже должен быть дробным (Real, Double, float, в зависимости от языка программирования). Иначе ошибки будут возникать, если во время работы программы дробное число будет заноситься в ячейку памяти (переменную), отведенную для целого числа. (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
А перекачать их одним архивом можно отсюда: |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||