Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Часть I. Основы программирования на Паскале↑ Стр 1 из 12Следующая ⇒ Содержание книги
Поиск на нашем сайте
УДК 621.398 Б28
Утверждено учебным управлением МЭИ Подготовлено на кафедре экономики и управления
Рецензенты: канд. техн. наук, профессор А.А. Крюков (СТАНКИН), канд. техн. наук, доцент К.Г. Меньшикова (МЭИ)
Батасова В.С. Начальный курс программирования на основе алгоритмического языка Паскаль. Учебное пособие по курсу «Высокоуровневые методы информатики и программирования». – М.: Издательство МЭИ, 2006.–116 с. Излагаются основы алгоритмизации и программирования. Главный акцент делается на анализ задачи и разработку принципиальной схемы алгоритма без привязки к алгоритмическому языку. Даются основные приемы кодирования алгоритмов на Паскале. Рассматриваются такие разделы программирования как типы и структуры данных, основные алгоритмические структуры, подпрограммы, модули, обработка текстов и документов сложной структуры, файлы. Для студентов Гуманитарно-прикладного института,
© Московский энергетический институт, 2006
ВВЕДЕНИЕ Настоящее пособие представляет собой попытку изложения общих основ программирования, независимых от алгоритмического языка. Конкретный язык программирования – в данном случае, Паскаль – используется для приобретения практических навыков кодирования алгоритмов и отладки программ. Это уже вторая попытка: настоящее пособие представляет собой результат переработки [1], как бы перевод его с СИ на Паскаль. Возможность такого перевода еще раз подтверждает тезис: «Не важно, на каком алгоритмическом языке программируешь, а важно, какие задачи решаешь». Любая программа, независимо от алгоритмического языка, на котором она написана, состоит из описания данных и описания действий, выполняемых с этими данными. "Алгоритмы+структуры данных = программы" - это название книги [2] классика современного программирования Н. Вирта является важнейшим принципом разработки программ. Существующие в настоящее время универсальные алгоритмические языки (т.е. языки, содержащие все основные средства современного программирования), такие как Паскаль, Си, Фортран, Бейсик, практически не отличаются по своим возможностям. Различия в правилах построения фраз языка не являются принципиальными, освоение этих правил - дело практики, а приверженность программиста к какому-то алгоритмическому языку обычно является следствием многолетней привычки. Выбор алгоритмического языка Паскаль для данного пособия объясняется тем, что в настоящее время он является признанным языком для обучения программированию, а пособие предназначено, прежде всего, для тех, кто учится программировать «с нуля». Автор надеется, что пособие поможет и при изучении Паскаля как второго (или следующего) языка. Чтобы начать писать программы на каком-либо алгоритмическом языке, надо знать: 1. Какова структура простейшей (не использующей нестандартные подпрограммы) программы, в каком порядке в ней размещаются инструкции языка. 2. Какие типы и структуры данных приняты в языке и как они определяются (описываются), какие операции над данными различных типов допустимы в языке, как строятся с их помощью выражения и как они вычисляются. Заметим, что на начальном этапе овладения языком необязательно глубоко изучать все допустимые в нем типы и структуры, достаточно знать те, которые необходимы для решения интересующего вас класса задач. 3. Как записывать операторы преобразования данных: оператор присваивания, с помощью которого осуществляются все преобразования внутренних данных, операторы ввода (передачи данных с внешних устройств в память компьютера) и вывода (передачи данных из памяти компьютера на внешние устройства). 4. Как записать алгоритм (порядок, организацию обработки данных). Современные алгоритмические языки, как правило, имеют избыточный набор управляющих операторов для кодирования алгоритмов. На первом этапе изучения языка можно познакомиться с тремя-пятью из них, достаточными для программирования основных алгоритмических структур, с помощью которых можно записать любой алгоритм. Изложению перечисленных сведений посвящена первая часть пособия. Дальнейшее изучение программирования связано с подпрограммами, организацией многомодульных программ (этот материал излагается во второй части), а также со сложными типами данных (третья часть). В четвертой части излагаются правила работы с динамическими массивами. Объектно-ориентированное и визуальное программирование не входит в данное пособие. Следует заметить, что овладение конструкциями алгоритмического языка еще не означает умения программировать. Главную роль в создании программных средств играет умение анализировать задачу и разрабатывать принципиальную схему алгоритма без привязки к алгоритмическому языку. Однако обучение начальным навыкам алгоритмизации не укладывается в формальные рамки, и написать пособие по этой теме также трудно, как самоучитель по чтению и письму. Чтобы помочь начинающим программистам, в пособии, наряду с программами на Паскале, используются блок-схемы, которые, пожалуй, являются наиболее общим и наглядным способом описания алгоритмов. Для читателей, впервые столкнувшихся с программированием, поясним, что программа, написанная на алгоритмическом языке, должна быть переведена в коды компьютера. Процесс такого перевода называется трансляцией, а специальная программа-переводчик - транслятором. Существует два способа трансляции: компиляция и интерпретация. При компиляции программа сначала полностью переводится в коды, а затем выполняется без участия компилятора. При интерпретации последовательно чередуются перевод группы инструкций языка в коды и их выполнение. Алгоритмический язык Паскаль (также как Си и Фортран) требует именно компиляции. Откомпилированная программа (так называемый объектный модуль) далее подвергается редактированию связей [1] (процесс подключения к программе подпрограмм) и загрузке в оперативную память. В результате такой обработки получается готовая к выполнению программа, которая называется исполняемой программой или загрузочным модулем. Трансляторы обычно входят в состав систем программирования, включающих в себя также редактор для набора и исправления текстов программ, редактор связей, загрузчик, средства для работы с файлами, программу-отладчик и среду, обеспечивающую удобную работу с этими программами. Примеры пособия ориентированы на систему программирования Borland Pascal 7.0 и операционную систему MS DOS или на режим консольного приложения среды Delphi. Среда программирования Borland Pascal предполагает использование алгоритмического языка с тем же именем, являющегося расширением стандартного языка Паскаль; более ранняя среда (и язык) Turbo Pascal с точки зрения основ программирования мало отличается от Borland Pascal и может использоваться читателем для отладки программ. Среда Delphi имеет в своей основе язык Object Pascal. Краткое описание основных приемов работы в этих средах дано в Приложениях; подробнее с этими средами и соответствующими версиями языка можно ознакомиться, например, в [3-5]. Имея целью начальное обучение программированию, мы рассмотрим только подмножество языка Borland Pascal (или Object Pascal в Delphi), позволяющее писать простые и практически важные программы. Пособие не имеет своей целью полное описание этих языков. Данные и операции над ними Типы данных Кроме разделения данных на переменные и константы, существует классификация данных по типу. Описание переменных прежде всего состоит в объявлении их типа. Тип данных характеризует форму их представления в памяти компьютера, и, следовательно, область значений. Каждый тип характеризуется набором выполняемых над данными операций. Традиционно в универсальных языках программирования имеются такие стандартные типы, как целый, вещественный, символьный и логический[5]. Существование двух числовых типов (целого и вещественного) связано с двумя возможными формами представления чисел в памяти компьютера. Данные целого типа хранятся в форме представления с фиксированной точкой. Для нее характерны абсолютная точность представления чисел и выполнения операций над ними, а также ограниченный диапазон значений чисел. Целый тип используется для данных, которые в принципе не могут иметь дробной части (количество людей, машин, и т. д., номера и счетчики). Тип вещественный соответствует форме представления чисел с плавающей точкой, для которой характерны приближенное представление числа с заданным количеством значащих цифр (знаков мантиссы) и большим диапазоном порядка числа, что обеспечивает возможность представления как очень больших, так и очень малых по абсолютной величине чисел. В силу приближенного представления данных вещественного типа сравнение их на равенство является некорректным. В современных реализациях универсальных языков программирования обычно существует несколько целых и несколько вещественных типов, каждый из которых характеризуется определенным размером отводимой под одно значение памяти и, соответственно, определенным диапазоном значений чисел, а для вещественных типов - и определенной точностью (числом цифр мантиссы). Данные символьного типа принимают значения на всем множестве допустимых для данного компьютера символов. Каждому символу соответствует двоичный код, все коды символов собраны в специальные стандартные таблицы кодирования. В настоящее время используются таблицы ANSI (в которой для хранения одного символьного значения отводится один байт) и UNICODE (код одного символа занимает два байта). Эти таблицы совместимы: первые 256 кодов UNICODE совпадают с кодами ANSI. Существование двух кодовых таблиц объясняется необходимостью поддержки приемственности программного обеспечения при развитии компьютерной техники: для уже устаревших 16-разрядных компьютеров используется таблица ASCII, первая половина которой совпадает с ANSI. В Паскале для описания данных символьного типа используется ключевое слово char. В версии Borland Pascal используется только система кодированияANSI. В Object Pascal, кроме типа char, имеется тип widechar, поддерживающий кодировку UNICODE. Данные логического типа в Паскале описываются с помощью ключевого слова boolean. Используемые в различных версиях Паскаля целые и вещественные типы представлены в таблицах 1-4. Таблица 1. Стандартные целые типы данных Borland Pascal
Таблица 2. Стандартные целые типы данных Object Pascal
Таблица 3.
Таблица 4.
Заметим, что помнить эти таблицы совершенно необязательно. Для написания программ первой части пособия нам потребуются всего два числовых типа: вещественный real и целый integer. Все рассмотренные в этом параграфе типы относятся к стандартным (т. е. встроенным в язык) типам Паскаля. У пользователя имеется возможность задать собственные, нестандартные типы в разделе TYPE программы – об этом см. §§1.5.2, 1.6. Правила записи констант Мы рассмотрим простейшие[9] правила записи явных констант. Целая десятичная константа - это последовательность десятичных цифр, например, 12678909. Последовательность шестнадцатеричных цифр (0, 1,..., 9, A, B, C, D, E, F), перед которой записан символ доллара $, представляет собой целую шестнадцатеричную константу; например, $FF - шестнадцатеричное представление числа 255. Простейшие правила записи вещественных констант состоят в следующем: разделителем между целой и дробной частью числа является точка; можно использовать показатель десятичного порядка Е (большую или малую латинскую букву). Пример вещественных констант: 100.01, 3.44Е3 (значение 3.44*103), 1.0 Е-2 (значение 0.01). Для представления числовых констант в памяти компьютера выбирается подходящий тип в соответствии с таблицами 1-4. Естественно, при этом следует выбирать минимальный диапазон и минимальное число значащих цифр. Такой выбор не только уменьшает память и время работы программы, но и повышает ее надежность, так как компилятор может обеспечить контроль над значениями переменных (чтобы они находились в указанных границах). Символьная константа - это соответствующий символ клавиатуры, заключенный в апострофы. Примеры: 'a', '5', '?'. Другой способ задания констант - в виде # код, например, #32 –пробел, #90 буква Z. Уже при написании простейших программ при записи операторов вывода (а иногда и ввода) нам потребуется понятие строковой константы. Это последовательность символов, заключенная в одинарные кавычки (апострофы). Например: ‘Введите исходные данные'. Логические константы обозначаются следующим образом: false – ложь, true - истина 1.2.4. Описание переменных и именованных констант Пока мы рассматриваем данные, занимающие одну ячейку памяти. Такие данные называются простыми. Простые переменные описываются в разделе переменных после слова Var с помощью инструкций вида: Var список_имен_переменных: тип; Слово список при описании фрагментов алгоритмического языка обычно означает, что элементы списка перечисляются через запятую. Инструкции в Паскале разделяются точкой с запятой (обратите внимание на этот знак в конце описания). Пример описания: Var a, b:real; n,i, j,k:integer; Именованные константы описываются в разделе констант после ключевого слова Const с помощью инструкций вида: Const имя_константы=значение константы; Здесь ключевое слово const показывает, что определяемое данное имеет постоянное значение, т. е. доступно только для чтения. Тип константы определяется по ее значению. Общепринятый (обязательный для стандартной версии Паскаля, но необязательный в реализациях) порядок следования разделов такой: сначала идет раздел констант, потом раздел переменных. В Паскале требуется, чтобы все используемые имена (в том числе переменные и константы) были описаны.
Выражения Выражения в Паскале, как и в других алгоритмических языках, различаются по типу (в зависимости от участвующих в выражении операндов и операций) и бывают арифметическими (числовыми), логическими (булевскими), символьными. Напомним очевидное определение: выражение - это операнды, соединенные знаками операций. Тип операндов должны быть согласован с операциями, используемыми в выражении. Операнд - это либо константа, либо переменная (простая или с индексами), либо указатель функции, либо выражение, заключенное в скобки. Особенность логических операндов состоит в том, что логическим операндом может быть и соотношение. Правила записи выражений в различных алгоритмических языках отличаются допустимым набором операций, их обозначениями, приоритетом выполнения. В алгоритмическом языке Паскаль имеются следующие операции: Арифметические: * (умножение), div (деление нацело), mod (остаток от целочисленного деления), / (деление), + (сложение), - (вычитание). Логические: NOT (отрицание), OR (дизъюнкция), AND (конъюнкция). Соотношения: = (равно), <> (неравно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно), IN (вхождение в множество). Операции DIV и MOD, естественно, применимы только к целым операндам. Действия выполняются слева направо с учетом следующих приоритетов (перечислены в порядке убывания): 1) NOT; 2) мультипликативные операции: *, /, div, mod, AND; 3) aддитивные операции: +, -, OR; 4) соотношения: =, <>, <, >, <=, >=, IN. Программистам, привыкшим к СИ и Фортрану, следует быть внимательными: приоритеты отличны от принятых в этих языках. Например, в паскалевском выражении (a>0.1) AND (b<0) скобки обязательны: при их отсутствии первой будет выполняться операция AND, что логически неверно. Заметим, что компилятор при этом выдаст сообщение о несоответствии типа операндов (0.1 и b) типу операции AND. Смешивать типы операндов допустимо лишь для арифметических выражений (один операнд типа integer, другой - типа real). Тип результата в этом случае определяется следующим образом: операции *, +, - при целых операндах дают целый результат; если хотя бы один операнд вещественный, то эти операции дают вещественный результат. Операция / дает вещественный результат при любых операндах (в отличии от СИ и Фортрана). В таблице 5 приведены некоторые часто используемые стандартные функции Паскаля. Таблица 5. Некоторые встроенные функции Паскаля
1.3. Операторы преобразования данных Оператор присваивания Оператор присваивания осуществляет преобразование внутренних данных. Он имеет вид <переменная>:=<выражение> Оператор присваивания означает, что вычисляется выражение, стоящее справа от знака присваивания (:=), и вычисленное значение присваивается переменной, стоящей слева от знака присваивания. Переменная может иметь индексы. Переменная и выражение должны иметь одинаковый тип; имеются два исключения из этого правила: § можно использовать вещественные или целые типы разной мощности (например, integer – shortint), при этом значение результата должно принадлежать диапазону допустимых значений для типа переменной – см. таблицы 1-4; § переменой вещественного типа можно присваивать выражение целого типа (но не наоборот!). Очень часто переменная, стоящая слева от знака присваивания, участвует и в выражении, стоящем справа. В этом случае новое значение переменной вычисляется через предыдущее (старое) ее значение. Такие ситуации называются накапливанием. Примеры k:=k+1;{увеличение значение k на единицу} S:=S+a; {значение переменной S увеличивается на a} p:=p*i; {значение переменной р увеличивается в i раз} Необходимо, чтобы накапливаемой переменной до оператора накапливания было задано некоторое начальное значение. Операторы такого вида обычно используются в циклах (см. §1.4.4). Понятие ввода и вывода Под вводом понимается процесс передачи данных с внешних устройств в память компьютера, под выводом - передачи данных из памяти компьютера на внешние устройства. Ввод и вывод являются важнейшими операторами, так как с их помощью осуществляется общение пользователя с программой. Без операторов вывода программа вообще не имеет права на существование: если она ничего не сообщает пользователю, то зачем она нужна? Вводу подлежат исходные данные. Это переменные, начальные значения которых меняются от одного выполнения алгоритма к другому. Выводятся, естественно, результаты программы. Соответствующие данные называются выходными данными. Все остальные данные называются промежуточными. Разделение данных на исходные, выходные и промежуточные называется классификацией данных по функциональному признаку. Определение, какие данные будут исходными, а какие выходными, является первым и важнейшим этапом разработки алгоритма и программы. Последовательность значений на входном (или выходном) устройстве часто называют потоком. В Паскале для ввода и вывода используются встроенные в язык стандартные подпрограммы, и операторы ввода и вывода являются обращениями к этим подпрограммам. В этом разделе пособия мы рассмотрим только операторы ввода с клавиатуры и вывода на экран монитора. Работа с внешней памятью (файлами на магнитных дисках) будет рассмотрена в третьей части пособия. Оператор вывода Оператор вывода имеет вид: WRITE(V1,V2,...,VN) и означает вывод на экран монитора значений выражений V1,V2,...,VN (без перехода к следующей строке по окончании вывода). Последовательность V1,V2,...,VN называется списком вывода. В частности, элементом списка вывода Vi, i=1,...,M, может являться переменная (простая или с индексом[11]) или константа. Оператор WRITELN означает переход к новой строке (т.е. вывод символа конца строки). Оператор WRITELN(V1,V2,...,VN) эквивалентен двум операторам WRITE(V1,V2,...,VN); WRITELN Вместо Vi (i=1,2,...,N) может стоять группа: Vi:Li:Mi, где Li - минимальная длина поля значения переменной (если длина поля избыточна, то поле слева заполняется пробелами; если недостаточна, то транслятор автоматически увеличивает длину); если Li не указано, то используется стандартное для данной среды программирования значение. Mi - длина дробной части, указывается только для вещественных чисел; если параметр Мi указан, то вещественное число выводится в формате с фиксированной точкой, иначе - в экспоненциальном формате, причем используется стандартный для данной среды программирования вид экспоненциального формата. Программисты, работавшие с Фортраном, будут разочарованы: в Паскале (как и в Си) массивы вводятся и выводятся только поэлементно. Пример. Var s:real; a,b:integer; begin… writeln(‘a=’,a, ‘ b=’,b); writeln(‘ s=’, s:4:1);… end. На экран будет выведена информация в виде: a=<a> b=<b> s=<s> Здесь конструкция <имя переменной> означает значение этой переменной. Заметим, что следующие значения будут выводиться с новой строки, так как для вывода s использовался оператор writeln. Такое схематичное изображение выводимой (или вводимой) информации называется формой вывода (ввода). Если a=-2, b=93, s=3.22, то на экране получим: a=-2 b= 93 s= 3.2 Примеры оператора WRITELN также представлены на рис.1.
Оператор ввода Оператор READ(V1,V2,...,VN) означает ввод значений переменных V1,V2,..., VN. Переменные могут иметь индексы. Константы и выражения в списке ввода недопустимы, так как не подлежат изменению. Встретив оператор ввода, компьютер приостанавливает выполнение программы до окончания задания значений исходных данных пользователем (в профессиональной терминологии программистов - организуется прерывание для ввода). Вводимые значения могут разделяться пробелами (одним или несколькими) или переводом строки (нажатием клавиши Enter); допустимы в качестве разделителей значений исходных данных и некоторые другие символы. Обратите внимание, что после последнего введенного значения надо обязательно нажать Enter. До нажатия клавиши Enter вводимые значения накапливаются в буфере ввода, нажатие этой клавиши служит командой для передачи этих значений в память. Приведенный выше оператор эквивалентен последовательности операторов: READ(V1);READ(V2);...;READ(VN) Оператор READLN предусматривает пропуск вводимых символов до нажатия клавиши Enter, т. е. до ввода символа конца строки (END OF LINE). Оператор READLN(V1,V2,...,VN) эквивалентен двум операторам READ(V1,V2,...,VN); READLN или последовательности операторов READ(V1);READ(V2);...;READ(VN);READLN Оператор ввода с клавиатуры всегда предваряется выводом фразы, приглашающей к вводу. Иначе пользователь может только догадываться, по какой причине программа находится в состоянии ожидания; такая ситуация является необъяснимым остановом и может интерпретироваться как “зависание” компьютера. Пример. Var i:integer; a:real; begin writeln(‘Введите i и a’); { вывод приглашения к вводу } readln(i, a);...{оператор ввода} Форма ввода: Введите i и a В фигурные скобки принято заключать альтернативные фрагменты формы ввода или вывода. В данном примере значения i и a можно располагать на одной строке экрана, разделяя их пробелами, а можно на разных строках, разделяя их нажатием клавиши Enter. Следование Эта структура, изображенная на рис. 3, предполагает последовательное выполнение входящих в нее операторов. Последовательно выполняемые операторы в программе на Паскале записываются друг за другом и разделяются точкой с запятой. 2. Ветвление (развилка) Ветвление, блок-схема которого приведена на рис. 4, применяется в том случае, когда выполнение алгоритма может развиваться по двум альтернативным ветвям. Ветви обязательно должны соединяться в одной точке, т. е. дальнейшее выполнение алгоритма должно происходить по одному пути; кроме того, ветви алгоритма не должны пересекаться, т. е. не должны иметь общих блоков. Ветвление предполагает проверку некоторого условия. Если на момент проверки условие истинно, то будет выполнен оператор 1, иначе оператор 2. В Паскале ветвление кодируется с помощью условного оператора: if условие then Оператор 1 Else оператор 2 В принципе можно было бы записать оператор в одну строку или расположить его по строкам каким-либо другим способом, но практика показывает, что в приведенном виде фрагмент программы легче читается, и такая запись считается хорошим стилем программирования. Возможна ситуация, когда ветвь “Нет ” не содержит операторов В этом случае в условном операторе слово else и оператор 2 отсутствуют. Если операторы 1 или 2 состоят из нескольких операторов (являются составными), то входящие в них операторы окаймляются операторными скобками begin-end: if условие then begin оператор 1_1; оператор 1_2; … оператор 1_N End Else Begin оператор 2_1; оператор 2_2; … оператор 2_M End Таким образом, операторные скобки begin-end позволяют объединить несколько операторов в один составной. Цикл
цикла) и цикл с постусловием или цикл-до (сначала выполнение тела, а затем анализ).
На Паскале циклы кодируются следующим образом:
Тело цикла должно представлять собой один оператор – простой или составной. Замечания 1. Каждая из трех рассмотренных базовых структур имеет один вход и один выход. Это очень важно, так как любой прямоугольник на рисунках 3 – 5 может представлять собой одну из базовых структур. 2. В теории алгоритмов доказано, что для построения любого алгоритма достаточно иметь три базовых структуры: следование, ветвление, цикл. Это положение называется принципом Дейкстры. Причем безразлично, какую циклическую структуру – до или пока – выбрать в качестве базовой. Практика программирования, однако, сложилась так, что равноправно используются обе эти структуры. Кроме того, в программировании широко используется еще одна базовая структура (избыточная), которая называется параметрическим циклом (см. рис.6). Этот цикл управляется переменной (так называемым параметром цикла, на блок-схеме для него выбрано имя i), которая меняется от начального значения до конечного с заданным шагом (в Паскале шаг равен единице). Разработчиками компилятора параметрический цикл может быть реализован и как цикл с предусловием, и как цикл с постусловием. Учитывая практику последнего времени, мы считаем, что параметрический цикл реализован как цикл с предусловием. Для кодирования параметрического цикла в Паскале используется оператор: for i:= нач_знач to кон_знач do тело цикла; Существует также вариант оператора for, в которомпараметр изменяется с шагом –1: for i:= нач_знач downto кон_знач do тело цикла; Как и для предыдущих операторов, тело цикла – один оператор, простой или составной. Примеры разработки программ Пример 1. Программа решения квадратного уравнения ax 2 + bx + c=0 Исходные данные: a, b, c - коэффициенты уравнения, вещественные переменные. Выходные данные: х1, х2 - значения двух корней уравнения, если дискриминант неотрицателен, и значения вещественной и мнимой частей комплексно-сопряженных корней, если дискриминант отрицателен; это также вещественные переменные. Промежуточные данные: d - дискриминант уравнения, вещественная переменная. Блок-схема алгоритма представлена на рис.7. Алгоритм должен разделяться на две ветви в зависимости от знака дискриминанта, поэтому он использует базовую структуру ветвление. Ввод исходных данных,вычисление и анализ d соединены последовательно (используется базовая структура следование). По этой блок-схеме написана программа: Program kv_ur; Var a,b,c,x1,x2,d:real; Begin Writeln ('введите коэффициенты уравнения'); Readln(a,b,c); d:=sqr(b)-4*a*c; if d>=0 then begin x1:=(-b-sqrt(d))/2/a; x2:=(-b+sqrt(d))/2/a; writeln('действ. корни уравнения х1=', x1, ' x2=',x2) end else begin x1:=-b/2/a; x2:=sqrt(-d)/2/a; writeln(‘уравнение имеет комплексно-сопряженные корни’); writeln('мнимая часть компл. корней х2=',x2); writeln('действит. часть компл. корней х1=',x1) end; Readln;{для задержки экрана с результатами} End. Пример 2. Составить программу решения следующей задачи. На начало первого из рассматриваемых месяцев вклад клиента в банке был равен a руб. В течение каждого следующего месяца со счета снимается b руб.; в конце каждого месяца на остаток вклада начисляется р%. Вывести величину вклада на начало 1, 2,...n месяца. Исходные данные: a, b, p - вещественные переменные, n - целая переменная. Выходные данные: i - номер месяца, v - величина вклада на начало месяца. Блок-схема алгоритма приведена на рис. 8.
Program primer2; Var a,b,p,v:real; n,i:integer; Begin Writeln('Введите a,b,p,n'); Readln(a,b,p,n); If a<b then writeln('a,b недопустимы') else begin v:=a; i:=1; while (i<=n) and (v>=b) do begin writeln(i:7, v); v:=v-b; v:=v*(1+p/100); i:=i+1 end end; Readln; End. Обратите внимание, что при v<nb возможна ситуация, когда цикл выполнится меньше, чем n раз. Массивы 1.5.1. Понятие массива. До сих пор мы рассматривали только простые данные, т. е. данные, занимающие одну ячейку памяти. Значение простого данного представляет собой единое целое, не разделяется на компоненты. Существуют сложные данные, состоящие из нескольких компонент (и, соответственно, занимающих несколько ячеек памяти). Примером сложных данных (иногда говорят о данных сложной структуры или сложного типа) является массив. Массив - это сложноеданное, состоящее из конечного числа упорядоченных компонент, имеющих одно имя, одинаковый тип и расположенных в последовательных ячейках памяти компьютера. Массивы применяются очень часто, так как многие задачи связаны с обработкой информации, представляющей собой конечное множество однотипных данных. Например, массивы оценок в студенческой ведомости, массивы выплат сотрудникам некоторого предприятия, массивы фам
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 215; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.221.252 (0.016 с.) |