страницы приведена программа, которая вводит текстовую строку с экрана и выводит ее на экран азбукой Морзе, заодно проигрывая ее. В этой программе используется много нового: работа с модулем Sound, массив из строк, индексация массива не целыми числами, а типом char, функция задержки выполнения Sleep, функция перевода буквы в верхний регистр Upcase, работа с множеством.
Задание 16 1. Внимательно изучите текст программы ABCMorse, задайте преподавателю вопросы. 2. Напишите программу, которая вводит текстовую строку, подсчитывает, сколько в ней гласных букв, согласных букв, знаков препинания. (3 балла) 3. Напишите программу, которая вводит из файла 10 текстовых строк и выводит их в другой файл, отсортированными в алфавитном порядке. Используйте алгоритм сортировки занятия №13, и операцию сравнения строк < или >. (5 баллов) 4. Основываясь на программе ABCMorse придумайте интересную задачу на использование текстовых строк и множеств. (доп. баллы) - 44 - Файл morse.txt ·- -··· ·-- --· -·· · ···- --·· ·· ·--- -·- ·-·· -- -· --- ·--· ·-· ··· - ··- ··-· ···· -·-· ---· ---- --·- --·-- -·-- -··- ··-·· ··-- ·-·-
Program ABCMorze; Uses Sounds,CRT; var A : array ['А '..'Я '] of string [5]; c : char; f : text; s : string; i,j : integer; dash, dot : integer; morze : string [5]; begin // Читаем файл и заполняем массив строк A['А'], A['Б'], A['Я'] азбукой Морзе assign (f,'morze.txt'); reset (f); for c:='А' to 'Я' do readln(f,A[c]); close(f); // Выводим таблицу на экран for c:='А' to 'Я' do write(c,' ',A[c]:5,' '); // Загружаем звуки dash:=LoadSound('dash.wav'); dot:=LoadSound('dot.wav'); // Вводим текстовую строку writeln; write('Введите сообщение '); readln(s); for i:=1 to length(s) do // Разбираем ее по символам if Upcase (s[i]) in ['А '..'Я '] then // Проверка принадлежности begin // Если это русская буква (перевод в заглавные – Upcase) morze:=A[Upcase(s[i])]; // Читаем s[i] элемент массива A в строку morze for j:=1 to Length(morze) do // Разбираем строку Morze и проигрываем её begin write (morze [j]); // Вывод на экран буквы кодом Морзе if morze[j]='-' then begin PlaySound(dash); Sleep(SoundLength(dash)); // играем dash end else begin PlaySound(dot); Sleep(SoundLength(dot)); // играем dot end; Sleep(50); end; write (' '); Sleep (500); // Пауза между буквами 500 мс end; // end к внешнему оператору if end. - 45 -
На первом этапе его решения определяется так называемый дискриминант: d = b2 - 4ac
Далее рассматривают три случая 1. d < 0 – в этом случае вещественных решений нет[17]; 2. d = 0 – один корень, определяемый формулой -b / 2a; 3. d > 0 – два корня, вычисляемых по формуле x1,2 = (-b ± √d)/2a, где знак «+» соответствует первому корню, а знак «–» – второму корню.
Составим программу для решения этой задачи:
Program SquareEquation; var a, b, c : real; // Коэффициенты уравнения d : real; // Дискриминант x1, x2 : real; // Корни уравнения begin write ('Введите a, b, c '); readln (a,b,c); // Ввод исходных данных d:=b*b-4*a*c; // Вычисление дискриминанта if d<0 then writeln('Решений нет') else if d=0 then begin x1:=-b/(2*a); write('x=',x1) end else begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); write('x1=',x1,' x2=',x2) end end.
Последнюю ветвь else можно оптимизировать, убрав повторяющиеся вычисления (особенно вычисление квадратного корня) else begin d:=sqrt(d); a:=2*a; x1:=(-b+d)/a; x2:=(-b-d)/a; write('x1=',x1,' x2=',x2) end - 46 - 01.06.2013
Задание 16 1. Внимательно изучите текст программы ABCMorse, задайте преподавателю вопросы. 2. Напишите программу, которая вводит текстовую строку, подсчитывает, сколько в ней гласных букв, согласных букв, знаков препинания. (3 балла) 3. Напишите программу, которая вводит из файла 10 текстовых строк и выводит их в другой файл, отсортированными в алфавитном порядке. Используйте алгоритм сортировки занятия №13, и операцию сравнения строк < или >. (5 баллов) 4. Основываясь на программе ABCMorse придумайте интересную задачу на использование текстовых строк и множеств. (доп. баллы) - 44 - Файл morse.txt ·- -··· ·-- --· -·· · ···- --·· ·· ·--- -·- ·-·· -- -· --- ·--· ·-· ··· - ··- ··-· ···· -·-· ---· ---- --·- --·-- -·-- -··- ··-·· ··-- ·-·-
Program ABCMorze; Uses Sounds,CRT; var A : array ['А '..'Я '] of string [5]; c : char; f : text; s : string; i,j : integer; dash, dot : integer; morze : string [5]; begin // Читаем файл и заполняем массив строк A['А'], A['Б'], A['Я'] азбукой Морзе assign (f,'morze.txt'); reset (f); for c:='А' to 'Я' do readln(f,A[c]); close(f); // Выводим таблицу на экран for c:='А' to 'Я' do write(c,' ',A[c]:5,' '); // Загружаем звуки dash:=LoadSound('dash.wav'); dot:=LoadSound('dot.wav'); // Вводим текстовую строку writeln; write('Введите сообщение '); readln(s); for i:=1 to length(s) do // Разбираем ее по символам if Upcase (s[i]) in ['А '..'Я '] then // Проверка принадлежности begin // Если это русская буква (перевод в заглавные – Upcase) morze:=A[Upcase(s[i])]; // Читаем s[i] элемент массива A в строку morze for j:=1 to Length(morze) do // Разбираем строку Morze и проигрываем её begin write (morze [j]); // Вывод на экран буквы кодом Морзе if morze[j]='-' then begin PlaySound(dash); Sleep(SoundLength(dash)); // играем dash end else begin PlaySound(dot); Sleep(SoundLength(dot)); // играем dot end; Sleep(50); end; write (' '); Sleep (500); // Пауза между буквами 500 мс end; // end к внешнему оператору if end. - 45 -
Тема №17 Задача о квадратном уравнении
Решение квадратного уравнения выходит за рамки курса математики 7 класса, но мы сочли возможным внести эту классическую задачу программирования в дополнение. Квадратным уравнением называется уравнение вида ax2 + bx + c = 0На первом этапе его решения определяется так называемый дискриминант: d = b2 - 4ac
Далее рассматривают три случая 1. d < 0 – в этом случае вещественных решений нет[17]; 2. d = 0 – один корень, определяемый формулой -b / 2a; 3. d > 0 – два корня, вычисляемых по формуле x1,2 = (-b ± √d)/2a, где знак «+» соответствует первому корню, а знак «–» – второму корню.
Составим программу для решения этой задачи:
Program SquareEquation; var a, b, c : real; // Коэффициенты уравнения d : real; // Дискриминант x1, x2 : real; // Корни уравнения begin write ('Введите a, b, c '); readln (a,b,c); // Ввод исходных данных d:=b*b-4*a*c; // Вычисление дискриминанта if d<0 then writeln('Решений нет') else if d=0 then begin x1:=-b/(2*a); write('x=',x1) end else begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); write('x1=',x1,' x2=',x2) end end.
Последнюю ветвь else можно оптимизировать, убрав повторяющиеся вычисления (особенно вычисление квадратного корня) else begin d:=sqrt(d); a:=2*a; x1:=(-b+d)/a; x2:=(-b-d)/a; write('x1=',x1,' x2=',x2) end - 46 - 01.06.2013