русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Титры фильма


Дата добавления: 2015-09-15; просмотров: 765; Нарушение авторских прав


Задача: Написать программу "титры фильма". Нужно, чтобы строчка выезжала сбоку экрана до середины, затем уходила вниз. Затем следующая выезжала.... После вывода всех строк цикл повторяется после некоторой паузы.

Перед тем, как начать пистать программу, как всегда давайте определимся, что же нужно для ее реализации. Здесь очевидно, что будет использоваться несколько строк, которые поочередно будут обрабатываться. Содержать эти строки удобно будет в массиве, с элементами которого мы и будем работать. Реализовать такой массив совсем несложно. Можно так:

 
var
A: Array[1..10] of String;
 
begin
A[1] := 'Одна из строк массива';
A[2] := 'Очередная строка массива';
............
A[10] := 'Очередная строка массива';
end.

А можно и так:

 
Const
A: Array[1..10] of String =
('Одна из строк массива',
'Очередная строка массива',
............
'Очередная строка массива');
 
begin
.......
end.

Это знакомый нам вариант с предопределением переменных.

После того, как мы создали такой массив, весь рабочий материал для программы готов и можно думать о алгоритме. Начнем с того, что разберемся с самим движением строк.

Представьте себе строку, движущуюся по экрану - сначала горизонтально к центру, а потом падающую вниз. Что это? Это пример самой, что ни на есть анимации. Реализовываться она путем вывода строки с последующим ее затиранием. Похожий пример мы разбирали в задаче N1, где выводились здезды с последующим затиранием их пробелом.

Итак, мы нужно выводить строки и после их затирать. Это несложно, как мне кажестся. Дальше нужно разобраться с самим движением, а точнее со способом передвижения строки по экрану. Из предыдущих задач известно, что для отображения строки в определенном месте экрана надо перевести курсор в место с необходимыми координатами, после чего уже вывести строку. Координаты нужно изменять в двух циклах - сначала будем двигаться горизонтально от края к центру, после вниз до конца. И опять, по новой - но уже с другим элементом массива, то есть с другой строкой.



Циклы предстоит реализовать вам :) равно как и необходимые действия по анимации. Я же расскажу, как состаить общий план алгоритма работы, которого вам предстоит придерживаться.

Итак, программа будет работать следующим образом:

  • Пока пользователь не захочет выйти (не нажата клавиша Esc и т.п.) делаем:
    • Увеличиваем индекс строки (новая строка массива)

1. Выводим текущую строку в ее координаты (горизонтально);

2. Выполняем необходимые действия по анимации;

3. Изменяем координаты;

4. Выводим текущую строку в ее координаты (вертикально);

5. Выполняем необходимые действия по анимации;

6. Изменяем координаты;

Вот такие вот действия. Все достаточно просто, однако вам уже предстоит выполнить больше действий, чем в прошлых программах. Но они очень простые, так что думаю, что сложностей не возникнет. Посмотреть, как работает предложенный нами вариант программы можно как всегда на сайте http://prog.agava.ru.


Домашнее задание

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

Итак, задачи:

 
Написать программу, чтобы слово съезжалось с боков экрана по буквам
Написать программу, к-ая переворачивает вводимое слово задом наперед.
Написать программу-меню. Выбор какого-либо пункт осуществляется по вводу его номера с клавуатуры. При этом должны писаться разные сообщения.
Написать программу "строки состояния". Строка экрана постепенно заполняется минусами "-". Строка останавливается каждый раз в разном месте. В следующей строчке выводится процент заполнения. Вариант: строка до конца, процент заполнения выводится динамически.
Написать программу-калькулятор (Мы также вместе замемся этим в дальнешем, я предложу свой вариант калькулятора)
Написать программу "ввода пароля". Запрашивается пароль, очищается экран, затем дается три попытки его ввести.

Решения всех задач будут к следующему выпуску выложены на сайте рассылки. Кроме того, сегодня я уже поместил туда несколько дополнительных задач, которые, возможно, будут вам полезны при выполнении ДЗ. В любом случае, они содержат новые алгоритмы и приемы программирования, так что советую посмотреть и поразбираться самостоятельно.

Занимайтесь, ибо это и есть двигатель на пути к успеху!


Вопросы- ответы

Вопрос 1. Программа подсчитывает дискриминант! В конце запрос: "Вы хотите еще найти дискриминант? y/n" Как сделать чтобы при нажатии на "y" программа начаналась сначала, а при нажатии на "n" выходила?

uses crt;{подключаем библиотеку}

var

c:char;

...................{другие переменные}

begin

repeat

................... {считаем то, что нужно}

writeln('Хотите еще y/n');

c:=readkey; {ожидаем нажатия клавиши}

until(c='n')or(c='N'); {если буква N - прекращаем работу}

end.

Вопрос 3. Что можно использовать вместо программы Turbo Pascal 7.0 для изучения программирования? Так как эта программа работает под DOS, то очень не удобно одновременно читать Ваши уроки в Windows и делать упражнения в DOS.

Первое, что приходит в голову, это Borland Pascal for Windows (BPW). Он входит в стандартную поставку BP 7.0 (напомню, что в эту же стандартную поставку еще входят TP 7.0. и BP 7.0). При помощи BPW вы можете делать тоже, что и в ДОСе, во время выполнения программы вместо окна ДОСа открывается обычное окно Виндовс, а все остальное то же самое. Это если вы хотите иметь в windows Паскале то же, что и в ДОСе.

Если же вы хотите создать для своей программы красивый и удобный Виндовс интерфейс, то добро пожаловать в Дельфи и объектно-ориентированное программирование, однако, это несколько другая и более сложная песня.

Существуют и другие Паскали, правда я никогда с ними не имел дела, но слышал и читал много хорошего. Virtual Pascal 2.0. знающие люди очень хвалят (работает по Виндовс), поищите в сети. Free Pascal (http://www.ru.freepascal.org) (говорят, не хуже).

Вопрос 4. У меня вот такой вопрос- как в программе описать массив X, если заранее неизвестна его размерность (т.е. кол- во элементов, как я понимаю) ?

Два варианта:

  • Объявить массив заведомо большего размера и работать только с нужными элементами. Кушает много памяти, да и вообще ее может нехватить (сегмент статич. данных в Пасе только 64К).
  • Поможет динамическая память:
 
=============Начало программы===========================
{$R-}
type
mass=array[1..1]of integer {массив нужного типа}
Parr=^mass;
 
var
D:Parr;
i,n:integer;
begin
randomize;
write('Введите размер массива ');
readln(n);
GetMem(D,n*sizeOf(integer)); {выделяем память под массив}
for i:=1 to n do {запоняем случайными числами и}
begin {печатаем}
D^[i]:=random(100);
write(D^[i],' ');
end;
FreeMem(D,n*sizeOf(integer)); {освобождаем память}
end.

Вопрос 5. Как можно запустить программу?

Если имеется в виду запустить внешнюю программу из своей, то с помощью процедуры Exec из модуля DOS:

 
{$M 4096,0,10000}
uses Dos;
.......
.......
begin
............
............
SwapVectors;
Exec(Путь&ИмяВашейПрограммы, Доп_Параметры);
SwapVectors;
.....................
.....................
end.

Вопрос 6. а). Я пользуюсь программой Borland Pascal 7.0. При подключении дополнительных модулей (crt, graph) после запуска программы Pascal выдает сообщение: "Error 200: Division by zero" - деление на ноль. После запуска утилиты CPU Grabber, замедляющей работу процессора примерно на 60 %, программа выполняется нормально. Как можно исправить положение? Заранее спасибо.

б). При попытке в паскале использовать функцию очистки экрана, возникает сообщение "Error 200:Division by zero", а в пользовательском окне (ALT-F5) сообщение runtime error 200 at 0014:0091, что такое?

Эти два вопроса - одно и тоже.

В связи с кривизной модуля CRT на быстрых машинах типа iPentium II/III, iCeleron программы откомпиленные на BP7/TP7 при запуске вылетают с run-time error 200 - деление на ноль. Причём ошибка эта появляется при подключение модуля даже если вы и не вызывали процедуру Delay, которая там криво написана.

Суть проблемы состоит в том, что в этом модуле время измерялась через производительность процессора - в то давнее древнее время, как сами понимаете, не было столь быстрых процессоров и не было этой ошибки. Для того, чтобы ваши программы не вылетали вам нужно установить пропатченный вариант CRT, который Вы сможете скачать с сайта Библиотека программиста - http://prog.agava.ru

Вопрос 7. При запуске Паскаля всё время появляется старая программа и приходится закрывать окно с этим текстом и открывать свежее. Как от этого избавится?

После того, как вы открыли "свежее", сделайти следующие действия: F10-Options-Save. Теперь каждый раз при запуске у вас бедет открываться новое окно.

Вопрос 8. В рассылке N11 Вы рассказывали про форматный вывод .Чтобы реализовать это, мы приписывали к переменной, стоящей в процедуре два числа, разделив их двоеточием: Write('Real: ', A:5:2);

После запятой цифры реагируют на команду, а вот до запятой совершенно не реагирует.

А теперь попробуйте:

 
var
a:array[1..10]of real;
................
begin
...............
for i:=1 to 10 do write(a[i]);
writeln;
for i:=1 to 10 do write(a[i]:10:4);
writeln;
for i:=1 to 10 do write(a[i]:5:4);
...............................
end.

И почуствуйте разницу

Вы давно знакомы с понятием процедуры и функции языка Паскаль, а также разницей между ними. Однако до сегодняшнего дня я не рассказывал о том, как можно создавать собственные процедуры и фукнции. Зачем они нужны? Давайте зададимся этим вопросом и на примерах постараемся в нем разобраться.

Для начала попробуем поставить себе задачу. Пусть необходимо написать программу, в которой будет определенная, часто повторяющаяся, последовательность действий. К примеру, сложение двух чисел.

Давайте теперь сформулируем задачу следующим образом: написать программу, которая будет складывать два числа. Далее спрашивает, стоит ли повторить. Если ответ утвердительный, то повторяет сначала. Обратите внимание, складывать числа мы будем не один раз, возможно два-три раза или больше. Здесь было бы очень удобно оформить тот кусок программы, который отвечает за сложение и вызывать его каждый раз при необходимости - то есть не писать его все время заново. Здесь мы и подходим к определению процедуры (подпрограммы) языка Паскаль.

Что же такое подпрограмма? Подпрограмма (процедура, функция) - это оформленная обособленно часть программы, к которой потом можно обратиться из любого места основной программы (вызвать ее). Написать и использовать подпрограмму очень просто. При этом она будет обладать следующими свойствами:

  • Подпрограмма - это фактически отдельная программа. Она может иметь свои переменные, метки, константы, равно как и вложенные подпрограммы.
  • Она может использовать переменные, общие для всей программы (глобальные переменные), с учетом того, что они были описаны в основной программе до самой подпрограммы.
  • Если подпрограмма - функция, она может использоваться внутри стандартных конструкций, в качестве параметра для процедур, присваиваться переменным и т.д., то есть обладает всеми возможностями функций.

Это основное, что касается использования данных в подпрограммах. Теперь давайте посмотрим, как они описываются в программе. Начнем с процедур.

Создание своих процедур

Создаваемая процедура в Паскале имеет следующие элементы:

  • Служебное слово Procedure;
  • Собственное имя, по которому она будет использоваться в программе. Оно идет после служебного слова Procedure
  • Параметры, передаваемые программе (необязательно).
  • Свои разделы var, const, label (необязательно).

· Собственный раздел begin - end, причем end - это конец подпрограммы. После него всегда ставиться точка с запятой: ";"

· Внутри этой конструкции - любые элементы языка: циклы, сравнения, дополнительные блоки begin - end.

Примера ради давайте напишем указанную выше программу (сложение двух чисел). Действовать будет по следующему принципу:

1. До основной программы составим процедуру, в качестве параметров которой будет передаваться два числа. В этой процедуре будет:

1. Числа, переданные как параметры складываются друг с другом;

2. Получившееся значение выводиться на экран;

2. Сделаем цикл repeat - until. Внутри след. действия:

1. Запрашиваем 1-е число;

2. Запрашиваем 2-е число;

3. Вызываем нашу процедуру, передав ей в качестве параметров эти два числа;

4. Спрашиваем - повторить?

3. Цикл повторяется, пока ответ "ДА".

Вот такая вот простая программка. Исходный код:

 
Program P1;
uses Crt;
 
Procedure Add(a, b: Integer);
var
C: Integer;
 
begin
C := A + B;
Write(C);
end;
 
var
N1, N2: Integer;
C: Char;
 
begin
repeat
{ Очищаем экран }
ClrScr;
 
{ Читаем переменные }
Write('Введите число N1: ');
Readln(N1);
Write('Введите число N2: ');
Readln(N2);
Writeln;
 
{ Вызываем нашу процедуру }
Add(N1, N2);
 
{ Спрашиваем - Выйти? }
Writeln;
Write('Выйти? (Y/N): ');
Readln(C);
until UpCase(C) = 'Y';
end.

Теперь давайте разберемся, как создается процедура.

В первую очередь, посморите на служебное слово Procedure. Это и есть подпрограмма, являющаяся в нашем случае процедурой (помните, есть еще функции). Дальше идет имя процедуры - Add, по этому имени мы обращаемся к ней в программе.

Следующий шаг - определение параметров, передаваемых процедуре. Они указываются в скобках сразу после имени, причем в следующем формате:



<== предыдущая лекция | следующая лекция ==>
Обработка строк | Список_переменных: тип


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.