Turbo Pascal задачи на строки.
Здравствуйте. помогите плиз я уже не знаю что делать.
Если вы в строках понимаете, то тут 3 лёгкие задачи для вас:
1. Дана строка длиной не более 255 символов. Словом назовём последовательностью символов без пробела. Подсчитать количество слов в строке. ПРимер: «раз два раз два раз два три» Ответ: 3.
2. Дана строка не более 255 символов. Словом назовём последовательность букв латинского алфавита. Подсчитать кол-во слов в строке.
Пример: «Hello!My name is Peter.» Ответ: 5. Хм и я заметил что в примере после ! нету пробела. так что это не моя опечатка, так написано.
3. Заменить все гласные латинские буквы на *. Пример: «Hello! My name is Peter.» Ответ: «H*ll*! M* n*m* *s P*t*r.»
а вот тут есть пробел после !.
Плиз помогите.
Лучший ответ
1. k:=0;
for j:=0 to length(s) do
if (s[j]=’ ‘) then k:=k+1;
writeln(k);
если в слове будут повторяющиеся подряд пробелы, будет считать не правильно — проверяй тогда чтобы s[j+1]<>‘ ‘. так же, если начинается строка с пробела, будет неверно.
2. k:=0;
for j:=0 to length(s) d
if (s[j]>=’ ‘) or (s[j]=’!’) or (s[j]=’.’) or (s[j]=’,’) then k:=k+1;
writeln(k);
опять же, если любые из этих символов будут идти подряд — работать верно не будет. отсутствие пробела после воскл. знака намекает что такого не должно быть) )
3. for j:=0 to length(s) do
if (s[j]=’a’) or (s[j]=’e’) or (s[j]=’i’) or (s[j]=’o’) or (s[j]=’u’) or (s[j]=’y’) then s[j]=’*’;
вроде все гласные латинские буквы перечислил? не забудь потом вывести строку если что.
Остальные ответы
«помогите плиз я уже не знаю что делать. «
Учить Паскаль, вот что 🙂
ASCII код
Выведите 10 символов, которые следуют за данным в таблице ASCII.
Формат входных данных
Первая строка содержит символ, код которого находится в диапазоне \([32 \ldots 116]\) .
Формат результата
Выведите следующие 10 символов.
Примеры
| входные данные | результат |
|---|---|
| a | bcdefghijk |
| t | uvwxyz<|>~ |
| + | ,-./012345 |
Префикс алфавита
Дана последовательность символов. Проверьте является ли она префиксом строки abcdefghijklmnopqrstuvwxyz .
Формат входных данных
Дана непустая строка длиной не более 100 символов. Все символы это строчные латинские буквы.
Формат результата
Выведите YES , если данная строка является префиксом строки abcdefghijklmnopqrstuvwxyz . Выведите NO в противном случае.
Примеры
| входные данные | результат |
|---|---|
| abcd | YES |
| abcdf | NO |
Строка из уникальных символов
Дана строка. Необходимо проверить, что все символы в ней уникальны.
Формат входных данных
Дана строка длиной не более 100 символов. Все символы имеют ASCII коды из диапазона \([32..126]\) .
Формат результата
Выведите YES , если все символы уникальны (встречаются ровно один раз). Выведите NO в противном случае.
Примеры
| входные данные | результат |
|---|---|
| abcd | YES |
| abcda | NO |
Палиндром
Палиндром — это строка, которая одинаково читается слева направо и справа налево. Составьте программу, которая проверяет, является ли заданный текст палиндромом. Не забудьте, что при чтении пробел никак не произносится.
Формат входных данных
Дана строка длиной не более 255 символов, состоящая из строчных латинских букв и пробелов.
Формат результата
Выведите YES если строка является палиндромом и NO в противном случае.
Примеры
| входные данные | результат |
|---|---|
| no lemon no melon | YES |
| korosteli leteli leteli leteli let sorok | YES |
| lesha na polke klopa nashel | NO |
Примечание
Последняя фраза является палиндромом если её записать кириллицей. Но, по условию задачи, строка состоит из латинских букв и, чтобы написать текст на русском языке, приходится использовать символы транслитерации.
Анаграммы
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
Формат входных данных
Даны два слова на отдельных строках. Слова состоят из строчных латинских букв. Длины слов не превышают 255.
Формат результата
Требуется вывести YES , если введенные слова являются анаграммами друг друга, и NO , если нет.
Примеры
| входные данные | результат |
|---|---|
| ravnovesie svoenravie |
YES |
| apelsin spaniel |
YES |
| tommarvoloriddle iamlordvoldemort |
YES |
Шифр Цезаря
Для шифрования сообщения кодом Цезаря необходимо каждую букву заменить на другую, находящуюся на \(K\) позиций правее в алфавите (после z следует a). Необходимо по заданной шифровке определить исходный текст.
Формат входных данных
В первой строке дана шифровка, состоящая из строчных латинских букв и не превышающая по длине 255 символов. Во второй строке задано число \(K\) ( \(1 \le K \le 10\) ).
Формат результата
Требуется вывести исходное сообщение.
Примеры
| входные данные | результат |
|---|---|
| tdippm 1 |
school |
| bbb 5 |
www |
Подстрока из одинаковых символов
Дана строка. Найдите в ней подстроку максимальной длины, состоящую из одинаковых символов.
Формат входных данных
Дана строка длиной не более 100 символов. Все символы имеют ASCII коды из диапазона \([32..126]\) .
Формат результата
Выведите наибольшую подстроку, состоящую из одинаковых символов. Если таких несколько, то выведите первую.
Примеры
| входные данные | результат |
|---|---|
| green | ee |
| aaabbb | aaa |
Наибольшая подстрока — 1
Даны две строки. Найдите длину максимальной подстроки, входящей в обе строки.
Формат входных данных
Даны две строки длиной не более 100 символов. Все символы имеют ASCII коды из диапазона \([32..126]\) .
Формат результата
Выведите длину наибольшей подстроки.
Примеры
| входные данные | результат |
|---|---|
| green red |
2 |
| school chocolate |
3 |
Строковый тип данных в языке Pascal
Познакомимся с типом данных, который относится к числу структурированных. Это строковый тип данных (строка). Строка это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной . Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в Turbo Pascal является то, что с ней можно работать как с массивом символов, с одной стороны, и как с единым объектом, с другой. За счет этого обработка строк достаточно гибка и удобна. Строковая константа есть последовательность символов, заключенная в апострофы. Например: ‘это строковая константа’, ‘272’. Строковая переменная описывается в разделе описания переменных следующим образом:
Var Name : string[20];
Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине 255. Например: Var slovo : string.
Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.
Символы внутри строки индексируются (нумеруются) от единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например: N[5], S[i], slovo[k+l]. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания.
Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.
Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.
Операция сцепления (конкатенации) (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.
Пример: ‘Мама ‘ + ‘мыла ‘ + ‘раму’. В результате получится строка: ‘Мама мыла раму’. Длина результирующей строки не должна превышать 255.
Операции отношения: =, , =, <>. Позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
| Выражение | Результат |
| ‘True1’ ’MOTHER’ | True |
| ‘Мама ‘ <> ‘Мама’ | True |
| ‘Cat’=’Cat’ | True |
Функция 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 |
| ‘abcdefg’ | Delete(S, 3, 2) | ‘abefg’ |
| ‘abcdefg’ | Delete(S, 2, 6) | ‘a’ |
В результате выполнения процедуры уменьшается текущая длина строки в переменной S .
Процедура Insert(S1, S2, Poz) вставка строки S1 в строку S2, начиная с позиции Poz.
| Исходное значение S2 | Оператор | Конечное значение S2 |
| ‘ЭВМ РС’ | Insert(‘IBM-‘, S2, 5) | ‘ЭВМ IBM-PC’ |
| ‘Рис. 2’ | Insert(‘N’, S2, 6) | ‘Рис. N 2’ |
- Как можно объявить величину строкового типа?
- К каким типам данных относятся строки?
- Какова максимально возможная длина строки?
- С величиной какого типа данных совместим по присваиванию отдельный символ строки?
- Расскажите об операциях, которые можно выполнять над строковыми величинами.
- Расскажите о функциях, определенных для величин строкового типа.
- Расскажите о процедурах, определенных для величин строкового типа.
- Как осуществляется доступ к отдельному символу строки?
- Почему значение отношения ‘Мама’<>‘мама’ равно TRUE?
- Дан фрагмент программы:
S:= ''; For I:= '0' to '9' do S:=S+I;
Type String40 = String[40]; M = Array[1..100] Of String40; Var A : M; I, J, Min, N : Byte; Vsp : String40; Begin Write('N? '); ReadLn(N); For I := 1 To N Do ReadLn(A[I]); For I := 1 To N-1 Do Begin Min := I; For J := I + 1 To N Do If A[J] < A[Min] Then Min := J; Vsp := A[I]; A[I] := A[Min]; A[Min] := Vsp; End; WriteLn('Ответ: '); For I := 1 To N Do WriteLn(A[I]) End.
Var S : Array[1..100] Of String;
Лекция 4. Строки
Строка - последовательность символов. Минимальная длина строки равна нулю. Это - пустая строка. Строки похожи на одномерные массивы, но могут изменять длину во время работы программы. В Turbo Pascal 7 есть 2 типа данных для работы со строками.
A) Тип string - это строка длиной не более 255 символов.
Можно указать максимальную длину строки, например - string[50]. Рассмотрим программу:
var ss: string; st: string[20]; begin ss:= 'Это пример строки'; st:= copy(ss,1,11)+ ss[5]+'рограммы !'; writeln (st); readln; end. ------- Результат: Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International Это пример программы
В примере строка st описана с указанием максимальной длины (лишние символы справа отбрасываются), поэтому результат равен: st ='Это пример программы'.
ss[5] - это 5-й символ строки ss, т е 'п'. Copy - это функция, которая (здесь) возвращает 11 символов строки ss, начиная с 1-го символа. Знак + соединяет строки. Цепочка символов, заключенная в апострофы есть КОНСТАНТА строкового типа.
Каждый символ строки занимает при хранении в памяти один байт. В памяти хранится код символа, т е число 0..255. Длину строки можно увидеть в нулевом символе, т е ss[0] = 17 и st[0] = 20, но чтобы это увидеть в программе, требуется преобразование к типу Byte, например:
writeln('Длина строки ss = ', byte(ss[0]));
Существует много подпрограмм для работы со строками (но в Delphi их еще больше, а в PHP - много)
--------------- procedure Delete (var S: string; Index,Count:Integer); Удаляет подстроку из строки S. Параметр S - переменная строкового типа. Index и Count - целочисленные выражения. Delete удаляет Count символов из строки S, начиная с позиции Index. --------------- procedure Insert (Source: string; var S: string; Index: Integer); Вставляет подстроку в строку. Параметр Source - выражение строкового типа. Параметр S - переменная строкового типа любой длины. Index - выражение целочисленного типа. Процедура Insert вставляет строку Source в строку S в позиции с номером Index. Если возникающая в результате строка длиннее 255-и символов, то она усекается после 255-го символа. --------------- procedure Str (X [: Width [: Decimals ]]; var S) Преобразовывает число в строку. Преобразовывает числовое значение X в строковое представление этого числа, Необязательные: Width - ширина поля вывода, Decimals- число цифр дробной части. -------------- procedure Val (S; var V; var Code: Integer) Преобразовывает строковое значение в его числовое представление. Где: S - переменная строкового типа. Должна представлять последовательность символов, формирующих число. V - переменная типа Real или Integer Code - переменная типа Integer Преобразовывает строковое значение (S) в его числовое представление, как это происходит при чтении из текстового файла с помощью Read. Code - позиция, в которой произошла ошибка при преобразовании, или нуль, если ошибки не было. ------------------ function Copy (S; Index, Count: Integer): string; Возвращает подстроку строки. Параметр S - выражение строкового типа. Index и Count - выражения целочисленного типа. Функция Copy возвращает подстроку строки S, содержащую Count символов, начиная с символа с номером Index. ---------------- function Length (S): Integer; Возвращает динамическую длину строки. ----------------- function Pos (Substr: string; S: string): Integer; Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль. ------------- Примечание: подробнее - читайте в справочной системе Турбо-Паскаль7
Эти же подпрограммы есть в Делфи. Чтобы найти их и другие подпрограммы, поступим так:
1. В окне редактора (среды IDE Делфи), где виден текст разрабатываемого модуля допишем lehgth к какому-нибудь комментарию, например: < Public declarations length >
2. Поставим курсор внутрь lehgth (это имя одной из строковых функций) и нажмем клавишу F1. Далее в окошке "Найденные разделы" выберем Length function ( Object . Щелкнем "Показать". Получим справку об этой функции. НО САМОЕ ВАЖНОЕ - здесь же список подпрограмм для работы со строками (string handling routines). Щелкаем эту ссылку и видим список. Незнающим английский не стоит комплексовать, так как разобраться в синтаксисе можно, зная только Паскаль. Однако имена подпрорамм понимать очень полезно.
3.Например,
function AnsiEndsText(const ASubText, AText: string): Boolean; возвращает true, если строка ASubText является суффиксом (окончанием) строки AText. Здесь ANSI-кодировка (1 символ в 1 байте), Ends- конец, Text- вероятно, угадаете.
4.Аналогично можно найти тригонометрические функции Делфи, "зацепившись" за sin (Category - trigonometry routines), или арифметические, начав с sqrt - корень квадратный.(Category -arithmetic routines)
Б) ASCIIZ - строка размером до 64Кб, оканчивающаяся кодом 0
Этот тип данных введен в 7-й версии Turbo Pascal. Определение типа:
type PChar = ^Char;
То есть это просто УКАЗАТЕЛЬ на один символ. (Тип данных - указатели будет рассмотрен далее). Однако в режиме "Расширенный синтаксис" компилятора (это режим - по умолчанию) переменные типа PChar можно использовать как переменные типа:
type PChar = array[0..K] of Char;
где K < 64*1024 - число символов в строке ( не считая завершающего нуля). Использование переменных этого типа немного отличается от использования переменных типа string.
1. Если s1: PChar; s2:string; то s1[0] и s2[1] - крайние левые символы строк.
2. Для типа PChar используются другие подпрограммы. Пример на Turbo Pascal7
uses strings; var ss: string; ssP,stP: PChar; ii:Integer; begin ssP:= 'Это пример строки'#0; ss:= Copy(StrPas(ssP),1,11)+ ssP[4]+'рограммы !'; StrPCopy(stP, ss); for ii:=0 to StrLen(stp) do write(stp[ii]); readln; end.
В этом примере работа со строками выполняется над данными типа string, а показанные здесь функции StrPas StrPCopy выполняют только преобразование типов. Для использования этих подпрограмм необходимо подключить модуль strings. Тип PChar необходим для обращения к функциям ОС Windows, т е при использовании WinAPI (для этого в Делфи есть модуль Windows, а в TPas7 - WinProcs, WinTypes) Рассмотрим аналогичный пример в Делфи (консольная программа). Комментарии в тексте.
program PChar1; uses sysutils; var pss,pst: PChar; ss: string; begin pss:= 'Eto primer stroki'; ss:= copy(StrPas(pss),1,11) + pss[4]+'rogrammi !'; < StrPas(pss) - преобразует строку pss к типу string copy - функция, рассмотренная ранее для Turbo Pascal >GetMem(pst,Length(ss) + 1); < GetMem - выделяет переменной pst память на 1 больше размера строки ss>pst := StrPCopy(pst,ss); writeln('Result= ',pst); readln; end.
В) Для работы со строками в Делфи можно использовать типы данных:
1. ShortString - это тип, который в Паскале назывался string. Допускается ограничение длины: string[20];
2. AnsiString - в работе с переменными этого типа используются те же подпрограммы и методы, как для коротких строк. Можно хранить строки не длинее 2Гб. Однако при объявлении таких переменных память для них не выделяется. Она будет выделена при присваивании или процедурой SetLength. Присваивание таким строкам значений типа PChar требуется предварительное преобразование типов, например,
var ss: string; sp: PChar; begin . . . ss:= PChar(sp);
Примеры преобразований можно видеть в предыдущем примере.
3. WideString - тип, предназначенный для хранения текстов в кодировке UniCode. Для каждого символа отводится 2 байта. В остальном он похож на AnsiString.
4. Под типом string в Делфи понимают, в зависимости от настройки компилятора, или AnsiString или WideString.
5. И, конечно, PChar, такой же, как в Паскале, но может хранить до 2Гб.
Примеры программ и варианты заданий по этой теме можно найти в справочнике-задачнике. Запустите его, щелкните кнопку "Задания", выберите: Турбо-Паскаль, Задание 3-а.