p align="left">В переменную S попадает строковое представление числа X. Это нужно, например, при необходимости выводить на экран числа в графическом режиме, так как стандартные процедуры вывода на экран там работают только со строковыми величинами. Для иллюстрации рассмотрим задачу: "Найти сумму цифр введенного натурального числа". Program Str5; Var S : String; I,X,A,C : Integer; Begin Writeln('Введите натуральное число'); Readln(S); {Число вводится в строковую переменную} A:=0; For I:=1 To Length(S) Do Begin Val(S[I],X,C); {Цифровой символ превращается в число} A:=A+X {Цифры суммируются} End; Writeln('Сумма цифр равна ',A) End. Стандартные процедуры и функции. Рассмотрим наиболее важные процедуры и функции, предназначенные для обработки строк: Функция Copy (S, Pozition, N) копирует из строки S подстроку длиной N символов, начиная с позиции Pozition. При этом исходная строка не меняется. Здесь N и Pozition -- целочисленные выражения. Пример: |
Значение S | Выражение | Результат | | `Мама мыла раму' | Copy(S, 6, 4) | `мыла' | | `Маша ела кашу' | Copy(S, 1, 8) | `Маша ела' | | |
Функция Concat (S1, S2, …, SN) выполняет сцепление (конкатенацию) строк S1, S2, …, SN в одну строку. Пример: |
Выражение | Результат | | Concat('Маша ', 'ела ', 'кашу') | 'Маша ела кашу' | | |
Функция Length (S) -- определяет текущую длину строки S. Результат -- значение целого типа. Пример: |
Значение S | Выражение | Результат | | 'test-5' | Length(S) | 6 | | '(A+B)*C' | Length(S) | 7 | | |
Функция Pos (S1, S2) -- обнаруживает первое появление в строке S2 подстроки S1. Результат -- целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0. Пример: |
Значение S2 | Выражение | Результат | | 'abcdef' | Pos('cd', S2) | 3 | | 'abcdcdef' | Pos('cd', S2) | 3 | | 'abcdef' | Pos('k', S2) | 0 | | |
Процедура Delete (S, Poz, N) -- удаление N символов из строки S, начиная с позиции Poz. В результате выполнения процедуры уменьшается текущая длина строки в переменной S. Пример: |
Исходное значение S | Оператор | Конечное значение S | | 'abcdefg' | Delete(S, 3, 2) | 'abefg' | | 'abcdefg' | Delete(S, 2, 6) | 'a' | | |
Процедура Insert (S1, S2, Poz) -- вставка строки S1 в строку S2, начиная с позиции Poz. Пример: |
Исходное значение S | Оператор | Конечное значение S | | 'abcdefg' | Delete(S, 3, 2) | 'abefg' | | 'abcdefg' | Delete(S, 2, 6) | 'a' | | |
Для примера описания строкового типа данных приведем пару примеров: 1. программа выводит на экран длину введенной пользователем строковой величины. Program Str1; Var S : String; Begin Writeln('Введите последовательность символов'); Readln(S); Writeln('Вы ввели строку из ',Length(S), ' символов') End. 2. Введенную строку вывести на экран по одному символу в строке экрана. Program Str2; Var S : String; I : Byte; Begin Writeln('Введите строку'); Readln(S); For I:=1 to Length(S) do {организуем цикл, начиная с первого символа} Writeln(S[I]) {строки, до последнего (номер последнего} {совпадает с количеством символов строки S) } End. Глава II Постановка задачи Написать программу - телеграф, который принимает от пользователя сообщения и выводит его на экран в виде последовательности точек и тире. Вывод точек и тире можно сортировать звуковым сигналом соответствующей длительности Азбука Морзе для букв русского алфавита приведена ниже: |
А .- | Б -… | В .- - | Г - - . | | Д - .. | Е | Ж …- | З - - .. | | И .. | Й . - - - | К - . - | Л . - .. | | М - - | Н - . | О - - - | П . - - . | | Р . - . | С … | Т - | У .. - | | Ф .. - . | Х …. | Ц - . - . | Ч - . - - . | | Ш - - - - | Щ - - . - | Ъ - .. - | Ы - - - . | | Ь - .. - | Э .. - . | Ю .. - - | Я . - . - | | |
Блок- схема алгоритма решения задач. 14 Обоснование выбранного языка программ. Язык Паскаль относится к процедурно-ориентированным языкам высокого уровня. Разработан американским ученым Никласом Виртом в 1971г. в качестве языка для обучения программированию. Базой при разработке явился язык Алгол. Достоинства языка Паскаль: 1) относительная простота (т.к. разрабатывался с целью обучения программированию); 2) идеология языка Паскаль близка к современным методикам и технологиям программирования, в частности, к структурному программированию и нисходящему проектированию (метод пошаговой детализации) программ. Паскаль может использоваться для записи программы на различных уровнях ее детализации, не прибегая к помощи схем алгоритмов; 3) гибкие возможности в отношении используемых структур данных; 4) высокая эффективность программ; 5) наличие средств повышения надежности программ, включающих контроль правильности использования данных различных типов и программных элементов на этапах трансляции, редактирования и выполнения. В связи с этим язык Паскаль в настоящее время находит самое широкое распространение для решения большого круга разнообразных практических и научных задач. Листинг программы {Телеграф-передача сообщений при помощи азбуки Морзе} Program_Oksana; Uses Crt; Const Morse: array[128..159] of [4]= ( `.-` , `-…' , `.---` , `--. ` , {А, Б, В, Г} `-.. ` , `. `,'…-` , `--..' , {Д, Е, Ж, З} {И, Й, К, Л,} {М, Н, О, П} {Р, С, Т, У} {Ф, Х, Ц, Ч} {Ш, Щ, Ъ, Ы} {Ь, Э, Ю, Я} ); {Параметры передачи} TONE=100; {частота сигнала (Гц)} L1=50; {длительность (мс) «точки»} L2=100; {длительность (мс) «тире»} L3=50; {пауза (мс) между точками и тире одной буквы} L4=100; {пауза (мс) между буквами} L5=150; {пауза (мс) между словами} Var mes : string; {сообщение} sim : string[4]; {символ в кодировке Морзе - последовательность точек и тире} znak : string[1]; {“ передаваемый“ знак - тире или точка} I, j : integer; {номер символа и знака} begin clrscr; writeln (`*** телеграф ***'); writeln (`Введите сообщение, которое надо передать `); writeln (`(используйте только большие русские буквы )`); write (` -> `); readln (mes); for i=1 to Length (mes) do begin if (mes [i] > = `A') and (mes[i] <= 'Я') then begin {определим код очередной буквы (функция ord) сообщения и получим из таблицы кодировки соответствующий элемент массива - последовательность точек и тире} sim := morse [ord (mes[i])]; j :=1; repeat if (sim[j]= `-' ) or (sim[j]= `.' ) then begin write (sim [j]); sound (1000); case sim[j] of `.': Delay (50); `_': Delay (100); end; Nosound; Delay (50); end; j:=j+1; until ((sim[j]=' ` ) or (j>4)); Delay (100); {пауза между буквами} end else if mes [i]= ` ` then {пробел между символами} begin write (` `); {пробел между словами сообщения} Delay (150); end; end; writeln writeln (` Сообщение передано! `); writeln (` Для завершения работы с программой нажмите `, `<Enter>'); readln; end. Инструкция программиста В данной программе были использованы различные функции, операторы, процедуры. Такие как: Составной оператор Begin и End Составной оператор представляет собой последовательность некоторых операторов, выполняющихся в том порядке, в каком они представлены в тексте программы. Program<Имя программы>; <Раздел описаний> Begin <Тело программы> End. Зарезервированные слова Begin и End являются так называемыми операторными скобками, в которые заключены операторы, входящие в составной оператор. Когда в зависимости от определённого условия, требуется обеспечить последовательное выполнение некоторого набора операторов, без составного оператора не обойтись.
Страницы: 1, 2, 3
|