Раздел 4 Тема 4.1. Этапы решения задач на ЭВМ.ppt
- Количество слайдов: 30
1 Раздел 4 Основы программирования на язык PASCAL Тема 4. 1. Этапы решения задач на ПЭВМ Решение задач с помощью компьютера включает в себя следующие основные этапы, часть из которых осуществляется без участия компьютера.
ЭТАПЫ РЕШЕНИЯ ЗАДАЧ НА ЭВМ 1. Постановка задачи. 2. Математическая модель. 3. Конструирование алгоритма. 4. Перевод алгоритма в программу. 5. Ввод и испытание программы. 6. Получение и анализ результатов решения задачи.
Постановка задачи: • сбоp инфоpмации о задаче; • фоpмулиpовка условия задачи; • опpеделение конечных целей pешения задачи; • определение формы выдачи результатов; • описание данных (их типов, диапазонов величин, структуры и т. п. ). Анализ и исследование задачи, модели: • анализ существующих аналогов; • анализ технических и программных средств; • pазpаботка математической модели; • разработка структур данных. Разработка алгоритма: • выбор метода проектирования алгоритма; • выбор формы записи алгоритма (блок-схемы, псевдокод и др. ); • выбоp тестов и метода тестиpования; • проектирование алгоритма.
Пpогpаммиpование: • выбор языка программирования; • уточнение способов организации данных; • запись алгоpитма на выбpанном языке пpогpаммиpования. 5. Тестиpование и отладка: • синтаксическая отладка; • отладка семантики и логической стpуктуpы; • тестовые pасчеты и анализ pезультатов тестиpования; • совершенствование пpогpаммы. 6. Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2 — 5. 7. Сопровождение программы: • доработка программы для решения конкретных задач; • составление документации к pешенной задаче, к математической модели, к алгоpитму, к пpогpамме, к набору тестов, к использованию.
Математическая модель — это система математических соотношений — формул, уравнений, неравенств и т. д. , отражающих существенные свойства объекта или явления. Какие основные этапы содержит процесс разработки программ? Процесс разработки программы можно выразить следующей формулой: На начальном этапе работы анализируются и формулируются требования к программе, разрабатывается точное описание того, что должна делать программа и каких результатов необходимо достичь с ее помощью. Затем программа разрабатывается с использованием той или иной технологии программирования (например, структурного программирования). Для каждой программы обязательно проводятся работы по обеспечению качества и эффективности программного обеспечения, анализируются и улучшаются временные характеристики.
Для чего нужны отладка и тестирование? Отладка программы — это процесс поиска и устранения ошибок в программе, производимый по результатам её прогона на компьютере. Тестирование (англ. test — испытание) — это испытание, проверка правильности работы программы в целом, либо её составных частей. Отладка и тестирование — это два четко различимых и непохожих друг на друга этапа: • при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования; • в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок. Тестирование устанавливает факт наличия ошибок, а отладка выясняет ее причину. Английский термин debugging ("отладка") буквально означает "вылавливание жучков". Термин появился в 1945 г. , когда один из первых компьютеров — "Марк-1" прекратил работу из-за того, что в его электрические цепи попал мотылек и заблокировал своими останками одно из тысяч реле машины.
В чем заключается отладка? В современных программных системах (Turbo Basic, Turbo Pascal, Turbo C и др. ) отладка осуществляется часто с использованием специальных программных средств, называемых отладчиками. Эти средства позволяют исследовать внутреннее поведение программы. Программа-отладчик обычно обеспечивает следующие возможности: • пошаговое исполнение программы с остановкой после каждой команды (оператора); • просмотр текущего значения любой переменной или нахождение значения любого выражения, в том числе, с использованием стандартных функций; при необходимости можно установить новое значение переменной; • установку в программе "контрольных точек", т. е. точек, в которых программа временно прекращает свое выполнение, так что можно оценить промежуточные результаты, и др. При отладке программ важно помнить следующее: • в начале процесса отладки надо использовать простые тестовые данные; • возникающие затруднения следует четко разделять и устранять строго поочередно; • не нужно считать причиной ошибок машину, так как современные машины и трансляторы обладают чрезвычайно высокой надежностью.
8 Программирование на языке Паскаль
Алгоритм (ПОВТОРЕНИЕ) Алгоритм – это четко определенный план действий для исполнителя. Свойства алгоритма • дискретность: состоит из отдельных шагов (команд) • понятность: должен включать только команды, известные исполнителю (входящие в СКИ) • определенность: при одинаковых исходных данных всегда выдает один и тот же результат • конечность: заканчивается за конечное число шагов • массовость: может применяться многократно при различных исходных данных • корректность: дает верное решение при любых допустимых исходных данных 9
Программа – это • алгоритм, записанный на каком-либо языке программирования • набор команд для компьютера Команда – это описание действий, которые должен выполнить компьютер. • откуда взять исходные данные? • что нужно с ними сделать? 10
Языки программирования • Машинно-ориентированные (низкого уровня) каждая команда соответствует одной команде процессора (ассемблер) • Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера • для обучения: Бейсик, ЛОГО, Паскаль • профессиональные: Си, Фортран, Паскаль • для задач искусственного интеллекта: Пролог, ЛИСП • для Интернета: Java. Script, Java, Perl, PHP, ASP 11
12 Язык Паскаль 1970 – Никлаус Вирт (Швейцария) • язык для обучения студентов • разработка программ «сверху вниз» Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3 • разнообразные структуры данных (массивы, структуры, множества)
Из чего состоит программа? program <имя программы>; const …; {константы} var …; {переменные} { процедуры и функции } begin … {основная программа} end. комментарии в фигурных скобках не обрабатываются 13
Из чего состоит программа? Константа – постоянная величина, имеющая имя. Переменная – изменяющаяся величина, имеющая имя (ячейка памяти). Процедура – вспомогательный алгоритм, описывающий некоторые действия (рисование окружности). Функция – вспомогательный алгоритм для выполнения вычислений (вычисление квадратного корня, sin). 14
Имена программы, констант, переменных Имена могут включать • латинские буквы (A-Z) заглавные и строчные буквы не различаются • цифры имя не может начинаться с цифры • знак подчеркивания _ Имена НЕ могут включать • русские буквы • пробелы • скобки, знаки +, =, !, ? и др. Какие имена правильные? ? AXby R&B 4 Wheel Вася “Pes. Barbos” TU 154 [Qu. Qu] _ABBA A+B 15
Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Типы переменных: • integer { целая } • real { вещественная } • char { один символ } • string { символьная строка } • boolean { логическая } Объявление переменных (выделение памяти): var a, b: integer; Q: real; s 1, s 2: string; 16
Еще одна интересная операция - остаток от деления a на b. Понятно, что остатком от деления 17 на 5 будет число 2: 17 mod 5 = 2, а вот чему будет равен остаток от деления меньшего числа на большее, например, 46 mod 200? Оказывается, в этом случае, результатом операции будет число 46. Вот другие примеры: 34 mod 125 = 34, 120 mod 6 = 0.
Комментарии В программе очень удобно помещать комментарии, чтобы при последующем прочтении она была понятна другим пользователям и программистам. Комментарии - это тексты, объясняющие программу, но не влияющие на ее исполнение. Это различные объяснения, заголовки отдельных частей программы и т. д. Компьютер печатает комментарии вместе с текстом программы, но, выполняя программу, игнорирует их. Программа выполняется так, словно комментариев нет. Программа Program Problem; uses Win. Crt; var a, c, s, d, e, b, r : integer; begin write('Введите трехзначное число '); readln(a); c : = a; {Запоминается первоначальное число} e : = a mod 10; (* Цифра единиц *) a : = a div 10; d : = a mod 10; (* Цифра десятков *) s : = a div 10; (* Цифра сотен *) b : = e*100 + d*10 + s; (* Число, записан. в обратном пор. *) r : = c - b; (* Разность чисел *) writeln('Искомая разность равна ', r) end.
Рекомендации Очень важно, чтобы текст программы был расположен наглядно не только ради красоты, но (и это главное!) ради избежания ошибок. (Найти ошибки в наглядном тексте значительно легче. ) 1. Каждый оператор следует писать с новой строки, за исключением коротких и по смыслу связанных операторов. Например, write. . . readln. . . - записываются в одной строке, короткие операторы присваивания можно записать в одну строку: Операторы, включенные в другой оператор, следует сдвинуть вправо на несколько позиций (желательно одинаково). begin write. . . readln. . . if. . . then begin. . . end else begin. . . end; end.
Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Простейшее решение: program qq; var a, b, c: integer; begin read ( a, b ); c : = a + b; writeln ( c ); end. 20
21 Задача: ввести строку с клавиатуры и заменить все буквы «а» на буквы «б» . program qq; var s: string; ввод строки i: integer; begin длина строки writeln('Введите строку'); readln(s); for i: =1 to Length(s) do if s[i] = 'а' then s[i] : = 'б'; writeln(s); вывод строки end.
22 Удаление и вставка Удаление части строки: s : = '123456789'; Delete ( s, 3, 6 ); строка меняется! 6 штук '129' с 3 -его символа Вставка в строку: начиная с 3 -его символа s : = '123456789'; Insert ( 'ABC', s, 3 ); что вставляем '123456789' '12 ABC 3456789' куда вставляем Insert ( 'Q', s, 5 ); '12 ABQC 3456789'
23 Поиск в строке: s[3] var n: integer; s : = 'Здесь был Вася. '; n : = Pos ( 'е', s ); 3 if n > 0 then writeln('Буква е – это s[', n, ']') else writeln('Не нашли'); n = 11 n : = Pos ( 'Вася', s ); s 1 : = Copy ( s, n, 4 ); Особенности: • функция возвращает номер символа, с которого начинается образец в строке • если слова нет, возвращается 0 • поиск с начала (находится первое слово)
Преобразования «строка» - «число» Из строки в число: s : = '123'; Val ( s, N, r ); { N = 123 } { r = 0, если ошибки не было r – номер ошибочного символа} s : = '123. 456'; Val ( s, X, r ); { X = 123. 456 } 24 var N: integer; X: real; s: string; Из числа в строку: N : = 123; Str ( N, s ); { '123' } X : = 123. 456; Str ( X, s ); { '1. 234560 E+002' } Str ( X: 10: 3, s ); { ' 123. 456' }
25 Файлы Файл – это область на диске, имеющая имя. Файлы Текстовые Двоичные только текст без оформления, могут содержать любые не содержат управляющих символы кодовой таблицы символов (с кодами < 32) *. doc, *. exe, ACSII (1 байт на символ) UNICODE (2 байта на символ) *. bmp, *. jpg, *. txt, *. log, *. html *. wav, *. mp 3, *. avi, *. mpg Папки (каталоги)
Пример решения задачи 26 Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы» . Пример: Введите имя, фамилию и отчество: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В. А. Алгоритм: • найти первый пробел и выделить имя • удалить имя с пробелом из основной строки • найти первый пробел и выделить отчество • удалить отчество с пробелом из основной строки • «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…
Программа program qq; var s, name, otch: string; n: integer; begin writeln('Введите имя, отчество и фамилию'); readln(s); n : = Pos(' ', s); name : = Copy(s, 1, n-1); { вырезать имя } Delete(s, 1, n); n : = Pos(' ', s); otch : = Copy(s, 1, n-1); { вырезать отчество } Delete(s, 1, n); { осталась фамилия } s : = s + ' ' + name[1] + '. ' + otch[1] + '. '; writeln(s); end. 27
Программа program qq; var c: char; i, N, count, Year, Gol: integer; begin writeln('Количество футболистов'); readln(N); count : = 0; for i: =1 to N do begin repeat read(c); until c = ' '; read(Year); readln(Gol); if (1988 <= Year) and (year <= 1990) and (Gol = 0) then count : = count + 1; end; writeln(count); end. 28
29 Пример Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output. txt их сумму. ? Можно ли обойтись без массива? Алгоритм: 1. Открыть файл input. txt для чтения. 2. S : = 0; 3. Если чисел не осталось, перейти к шагу 7. 4. Прочитать очередное число в переменную x. 5. S : = S + x; цикл с условием «пока есть данные» 6. Перейти к шагу 3. 7. Закрыть файл input. txt. 8. Открыть файл output. txt для записи. 9. Записать в файл значение S. 10. Закрыть файл output. txt.
30 Программа program qq; var s, x: integer; f: text; begin assign(f, 'input. txt'); reset(f); s : = 0; while not eof(f) do begin readln(f, x); s : = s + x; end; close(f); логическая функция, возвращает True, если достигнут конец файла assign(f, 'output. txt'); rewrite(f); writeln(f, 'Сумма чисел ', s); close(f); end. запись результата в файл output. txt


