Часто в программировании требуется грамотно считать входную строку. Обычно это делают двумя способами: считывают целиком, запоминая в переменную, или читают посимвольно, что более удобно, во всяком случае, для меня.
Итак, в этой статье мы разберем эти методы.
Начнем с первого, итак, наша задача — считать строку, запомнив в переменную, довольно проста, но дальше необходимо ее разделить на составляющие, которые нам, допустим, нужны дальше. Сейчас я покажу, как можно считывать строку вида .
Все ее составляющие будут даны через пробел. Допустим, нам нужно считать несколько строк, их количество будет определять число, вводимое пользователем в самом начале. Нам нужно оставить только фамилии, запомнить их в строковый массив. Его обработкой, например, сортировкой и выводом мы заниматься пока не будем, об этом поговорим в следующих статьях. Итак, вот часть наша программка.
const K = 100; var st:string; i, N:integer; mas: array[1 .. K] of string; Begin readln(N); for i:=1 to N do mas[i] := ‘ ‘; for i:=1 to N do begin readln(st); mas[i] := copy (st, 1, pos(‘ ‘, st) — 1); end; for i:=1 to N do writeln(mas[i]); End.
Правую границу массива задаем константой К. нам нужна также переменная st для того, чтобы в нее считывать входные данные ( ).
Паскаль для новичков 4-ввод информации и компиляция программы
Кроме того, объявим массив и 2 переменные i и N .
Рассмотрим основную часть программы.
Сначала мы считываем число входных строк ( readln(N) ;). Далее мы инициализируем наш массив, заносим туда значение пробела, чтобы там не хранился так называемый «мусор», ну так просто принято. Далее в цикле идет обработка каждой строки по следующему алгоритму: считывается очередная строка, далее в ячейку массива с номером ‘i’ записывается значение фамилии, то есть результат работы вот этой конструкции « copy (st, 1, pos(‘ ‘, st) — 1); «. Здесь работают 2 стандартные функции паскаля, работающие со строкой st .
Для начала обсудим алгоритм, по которому мы будем преобразовывать нашу строку. Мы просто копируем ту ее часть, которая есть до первого пробела. То есть, pos(‘ ‘, st) возвращает числовое значение, равное позиции пробела в исходной строке. Из этого числа мы вычитаем 1, так получаем правую границу нашей строки, то есть, функция Copy копирует часть строки st, с первого символа до символа с номером, который получается из « pos(‘ ‘, st) — 1 «. В последнем цикле мы выводим весь наш массив с фамилиями, чтобы программа давала какой-то результат.
Вот, примерно так можно объяснить этот алгоритм, он, в принципе, прост, удобен для тех, кто хорошо знает стандартные функции Паскаля, но он не везде удобен, поэтому и существует второй — символьный способ.
Этот способ заключается в том, что мы читаем строку в цикле, как массив символов и, возможно, сразу же делаем необходимую проверку или другие действия.
Напишем программку, которая из строки , заканчивающейся восклицательным знаком, выведет все цифры. Вот ее код.
var c: char; st: string; begin st := »; c := ‘ ‘; while c <> ‘!’ do begin read(c); if c in [‘0’.. ‘9’] then st := st + c + ‘ ‘; end; writeln(st); end.
Здесь мы объявляем всего лишь 2 переменные с:char для того, чтобы в нее считывать каждый символ. В st:string мы будем записывать нашу получившуюся строку.
Pascal ABC.NET | Урок 1 | Вывод текста на экран
осле инициализации переменных мы запускаем цикл, который будет выполняться до тех пор, пока очередным символом с строке не станет «!». При каждом его проходе считывается очередной символ, далее следует проверка, является ли символ цифрой, здесь удобно использовать множества, главное здесь, записать границы в кавычках, потому что мы проверяем переменную с, а она символьного типа.
Источник: kvodo.ru
Текстовые файлы в Паскаль.
Для текстовых файлов в Паскаль помимо процедур Read и Write определены процедуры Readln и Writeln. Дело в том, что при использовании строковой переменной с помощью процедуры Read можно считывать лишь первую строку файла в эту переменную.
Например, создадим текстовый файл «text.txt» и запишем в него 3 строки: «pascal», «admin» и «turbo».
А теперь запустите программу «file1» из первого урока, посвященного файлам.
Как видите, на экран вывелось одно слово «pascal», а слова «admin» и «turbo» не вывелись, т.к. они расположены во 2-й и 3-й строке. Для того чтобы из файла были прочитаны все строки необходимо использовать цикл с признаком конца файла. Кроме того, процедура Read не приспособлена для считывания последовательности строк. Ввместо нее необходимо использовать процедуру Readln.
Текстовые файлы в Паскаль.
Program file5; Uses crt; var fl:text; str:string; begin clrscr; assign (fl, ‘programstext.txt’); reset (fl); while not Eof(fl) do begin readln (fl,str); write(str); end; close(fl); readln end.
В строке №9 записываем цикл. Функция Eof при чтении файла (при использовании процедуры Reset) обозначает конец файла. Таким образом, цикл в строке №9 будет продолжаться до тех пор, пока не наступит конец файла (т.е. пока не будет прочитана последняя строка в файле). В цикле записано 2 операции (они заключаются в операторные скобки begin..end).
Строка №11. Первая операция в цикле – это операция чтения из файла и присвоение переменной «str» значения файловой переменной «fl». В результате работы процедуры Readln из файла будет прочитана первая строка, а указатель перейдет на начало второй строки. Таким образом, в цикле будут прочитаны все 3 строки.
Строка №12. Вторая операция — вывод значения переменной «str»на экран.
Как видите, на экран вывелись все 3 слова, записанные в текстовом файле «text.txt». Правда, все эти слова вывелись в одну строку. Для того чтобы они вывелись в 3-х строках необходимо вместо процедуры Write использовать процедуру Writeln (т.е. строка №12 должна иметь вид: writeln (str)). В результате получится:
Дополнение к материалу.
- Процедура Readln производит чтение файла построчно. Т.е. сначала будет прочитана первая строка, затем 2-ая, затем 3-я. В нашем примере мы применяли цикл для чтения файла и вывода его содержимого на экран. Если мы уберем операторные скобки begin..end, то цикл будет действовать только на процедуру Readln (в строке №11), а процедура Writeln выведет на экран не все слова, а лишь последнее слово(turbo), записанное в переменную «str».
- В случае использовании оператора Read вместо оператора Readln в строке №11 произойдет зацикливание программы, так как она не сможет найти признак конца файла. Для остановки программы необходимо нажать Ctrl+Break
Источник: mojainformatika.ru
Набрать программу text получить результат паскаль
Модуль c rt содержит процедуры и функции, предназначенные для работы с экраном консоли в текстовом режиме. Как и ряд других стандартных модулей, crt встроен в компилятор и содержится в файле t urbo.tpl.
Экран в текстовом режиме разбивается на отдельные строки, а каждая строка — на позиции, причем в каждую позицию может быть помещен только 1 символ из набора ASCII .
Для полного описания экранной позиции кроме символа следует задать еще и атрибут, содержащий информацию о цвете символа и фона на экране. Символ и атрибут занимают в памяти по 1 байту. Структура байта-атрибута показана на рис. 24.1.
Рис. 24.1. Структура байта-атрибута консоли
Старший бит 7 управляет мерцанием символа (символ на экране мерцает, если он установлен в 1), биты 4-6 содержат цвет фона (кодируется двоичными числами от 0 до 7 включительно), а биты 0-3 — цвет символа (от 0 до 15). Разумеется, программисту обычно не приходится заполнять байт атрибута по битам, для этого есть стандартные коды цветов. Основные цвета кодируются цифрами от 0 до 15, причем цвет текста может быть любым, а цвет фона — только из первых 8 цветов. Все цвета описаны в табл. 24.1.
Табл. 24.1. Коды и наименования стандартных цветов
Можно обращаться к цвету как по цифровому коду, так и по англоязычному имени.
Широко используемые текстовые режимы имеют в окне консоли 25 строк по 80 столбцов (позиций) в строке. Нумерация строк и позиций начинается с 1 и считается слева направо и сверху вниз. Весь экран в текстовом режиме может быть описан парой координат (1, 1), (80, 25). Обратите внимание на порядок записи — столбец, затем строка.
Ниже рассмотрены основные процедуры и функции модуля. Везде для краткости введены следующие обозначения:
x , x 1, x 2 — координаты столбцов экрана;
y , y 1, y 2 — координаты строк экрана;
c — значение цвета.
Особенность модуля c rt состоит в том, что он позволяет работать не только со всем экраном, но и с выделенным на нем прямоугольным окном. При этом весь ввод, вывод и прокрутка текста происходят в пределах окна. По умолчанию размеры окна совпадают с размерами экрана, но можно явно установить их обращением к стандартной процедуре Window ( x 1, y 1, x 2, y 2); , где ( x 1, y 1) и ( x 2, y 2) — соответственно, левый верхний и правый нижний угол окна.
Цвет фона окна c задает процедура textbackground ( c ); , а цвет символов — textcolor ( c ); .
Процедура без параметров clrscr ; очищает текущее окно цветом фона.
Для установки текстового курсора в позицию окна с координатами ( x , y ) определена процедура gotoxy ( x , y ); .
Программно определить текущее положение курсора позволяют 2 стандартные функции Wherex : char ; и Wherey : char ; , возвращающие, соответственно, текущие x — и y -координату курсора.
Процедура ClrEol ; удаляет все символы от позиции курсора до конца строки включительно, заполняя этот участок цветом фона.
Процедура Delline ; полностью удаляет строку, в которой находится курсор, а Insline ; вставляет пустую строку на экране в месте расположения курсора и заполняет ее цветом фона. Обе процедуры обеспечивают прокрутку содержимого окна.
Процедура Sound ( F : word ); включает встроенный динамик с частотой F герц, обеспечивая выдачу звукового сигнала.
Процедура Delay ( T : word ); задает задержку выполнения программы, равную T миллисекунд (1000 мс = 1 сек.). Эта процедура используется для организации задержек выполнения программы, а также всегда вызывается после sound , чтобы определить время звучания динамика.
Процедура без параметров NoSound ; выключает динамик. Обязательно используется после пары Sound и Delay .
Наконец, в модуле crt определены 2 стандартных функции для работы с кодами нажатых клавиш. Функция readkey : char ; возвращает код символа, прочитанный из буфера клавиатуры. Функция keyPressed : boolean ; возвращает значение true , если была нажата клавиша на клавиатуре (за исключением вспомогательных клавиш Alt, Shift, Ctrl и т. д.). Использование последней функции позволяет организовать циклы, выполняющиеся до нажатия какой-либо клавиши.
При запуске программы из оболочки Паскаля монитор находится обычно в текстовом режиме и устанавливать его не нужно. Тем не менее, существует стандартная процедура textMode ( Mode : integer ), устанавливающая текстовый режим с номером Mode .
Стандартный цветной текстовый режим 25*80 позиций имеет номер 3, цветной текстовый режим 25*40 позиций — номер 1.
Модуль c rt содержит также системные переменные, которые можно изменять в соответствии с указанным для них типом.
Переменная CheckBreak : boolean ; управляет реакций программы на прерывание по сочетанию клавиш Ctrl+ B reak. По умолчанию переменная имеет значение true (реакция включена).
Если переменная DirectVideo : boolean ; имеет значение true , процедуры вывода на экран пишут данные непосредственно в видеопамять, не используя операционную систему. Это ускоряет вывод, но может использоваться только на полностью IBM-совместимых ЭВМ.
Переменная textAttr : integer ; содержит текущий атрибут текста, сформированный по описанным выше правилам.
Приведем пример программы, определяющей коды нажатых клавиш. Конструкция repeat . until в этой программе является образцом обработки ввода с клавиатуры. Проблема состоит в том, что функция readkey возвращает однобайтовый код клавиши, а ряд клавиш и сочетаний клавиш имеют двухбайтовые коды. С этим связан второй вызов функции readkey в программе.
writeln (‘Программа выводит коды клавиш;’,
writeln (‘Нажмите клавишу:’);
Источник: nickolay.info