Вариант 1.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать ее, заменив все символы «*» на «+» в каждом нечетном по порядку слове и удалив все символы «!» в каждом четном по порядку слове.
Вариант 2.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Исключить все группы символов, расположенные между символами «(» и «)», включая сами скобки. Предполагается, что внутри каждой пары скобок нет других скобок.
Вариант 3.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Подсчитать наибольшее количество идущих подряд букв «а» в каждом слове.
Вариант 4.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого короткого слова.
Вариант 5.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Найти количество слов, первый и последний символы которых совпадают.
Вариант 6.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Получить новую строку, поменяв местами первое и последнее слова.
Вариант 7.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Заменить в словах все сочетания «то» на «это» и подсчитать количество таких преобразований.
Вариант 8.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого длинного слова.
Вариант 9.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого длинного слова.
Вариант 10.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «а» на «б».
Вариант 11.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать ее, расположив слова в порядке возрастания их длины.
Вариант 12.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать ее, отсортировав их по первой букве (по алфавиту).
Вариант 13.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В каждом слове найти номера первой и последней по порядку запятой и записать в вектор разность между этими номерами.
Вариант 14.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Выяснить, есть ли в словах пары соседствующих одинаковых символов и составить логический вектор в соответствии с этим.
Вариант 15.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Если количество слов нечетное, то удалить слово из середины строки, в противном случае вставить в строку слово «нет».
Вариант 16.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В каждом нечетном по порядку слове поменять местами первый и последний символы.
Вариант 17.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Поменять местами слова: первое – со вторым, третье – с четвертым и т.д. Если в строке нечетное число слов, последнее оставить как есть.
Вариант 18.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Все слова с нечетным количеством символов удалить, а все слова с четным количеством символом преобразовать, вставив в начало и конец слов буквы А.
Вариант 19.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Поменять местами самое короткое и самое длинное слова.
Вариант 20.
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Удалить из нее слова с четным количеством символов.
Файлы
Файл - это поименованная область памяти на диске или другом внешнем запоминающем устройстве.
Любая программа, использующая существующий файл для ввода или создающая новый файл при выводе, неизбежно содержит шаги:
1. открытие файла (в соответствующем режиме);
2. обработка файла (чтение или запись);
3. закрытие файла.
Имеется ряд общих стандартных процедур для файлов всех типов:
Процедуры и функции | Назначение |
Assign(var f; String) | Связывает файловую переменную f с име-нем физического файла, заданным в строке |
Reset(var f [: File; RecSize: Word]) | Открывает существующий файл с логичес-ким именем f для чтения |
Rewrite(var f: File; [; RecSize: Word]) | Создаёт и открывает новый файл с логи-ческим именем f для записи |
Close(var f) | Закрывает открытый канал ввода-вывода с логическим именем f |
Eof(var f):Boolean | Возвращает значение true, если достигнут конец файла f или false, если файл f пуст |
Erase (var f) | Удаляет закрытый физический файл, свя-занный с файловой переменной f |
Rename (var f; NewName:String) | Переименовывает закрытый физический файл, связанный с файловой переменной f |
В таблице ниже приведены функции и процедуры, реализующие прямой доступ в типизированных файлах:
Процедуры и функции | Назначение |
FileSize(var f): Longlnt | Возвращает реальное число записей в открытом файле f. |
FilePos(var f): Longlnt | Возвращает номер записи, на которую установлен текущий указатель в файле f. |
Seek (var f; n: Longlnt) | Назначает текущую позицию в файле f. |
Truncate(var f) | Удаляет все записи в файле f от позиции текущего указателя до конца файла |
Примеры решения заданий
Задача 1. Создать файл целых данных. Найти сумму всех положительных и число отрицательных компонент этого файла.
Решение: Алгоритм решения задачи представлен на рис. 7.1.
Рис. 7.1. Алгоритм решения задачи 1
Программа в Turbo Pascal будет иметь следующий вид:
Program IntFile;
Uses Crt;
Var f: file of Integer;
i,j,s,k: Integer;
st: String;
Begin
ClrScr; {очистка окна}
Write('Введите имя файла >>');
Readln(st);
Assign(f, st);
Rewrite(f);
Write('Файл пуст! Введите элементы файла ');
Writeln('Конец ввода – любое нецелое >>')
Repeat
{$I-}; {отключаем проверку ошибки ввода-вывода}
Read(j);
{$I+}
i:=IOResult; {i=0 – нет ошибки ввода-вывода}
If i=0 then Write(f,j);
Until i<>0;
Writeln('Число элементов файла =', Filesize(f));
k:=0; s:=0;
Seek(f,0); {перевод указателя файла на начало}
While not(Eof(f)) do
begin
Read(f,j);
Write(j, ' ');
If j>0 then s:=s+j;
If j<0 then k:=k+1;
End;
Writeln;
Writeln('Сумма положительных = ', s);
Writeln('Число отрицальеных = ', k);
Close(f);
End.
Задача 2. Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке.
Решение: Алгоритм решения задачи представлен на рис. 7.2.
Программа в Turbo Pascal будет иметь следующий вид:
Program Filef_to_g;
Uses Crt;
Var f,g: File of Char;
ch: Char;
n,i: Word;
Begin
ClrScr;
Assign(f,'file1.dat');
{$I-}; {отключаем проверку ошибки ввода-вывода}
Reset(f);
{$I+}
{если файл не существует, создаем новый}
If IOResult<>0 then Rewrite(f);
{если файл пустой, заполняем его}
If FileSize(f)=0 then begin
Writeln('Файл пуст! Введите элементы!');
Write('(вводятся символьные элементы)');
Write('Конец ввода – пропуск символа');
Repeat
{$I-};
Readln(ch);
{$I+};
i:=IOResult;
If i=0 then Write(f,ch);
Until i<>0;
End;
Рис. 7.2. Алгоритм решения задачи 2
Assign(g,'file2.dat');
Rewrite(g);
n:=FileSize(f);
Repeat
Dec(n);
Seek(f,n);
Read(f,ch);
Write(g,ch);
Until n=0;
Close(f);
Close(g);
End.
Элементы файла f читаются с конца в цикле и записываются в файл g. Для позиционирования указателя процедура Seek применяется перед чтением каждого символа.
Задача 3. Написать процедуру для создания двумерного массива и записи его в файл.
Программа в Turbo Pascal будет иметь следующий вид:
Procedure Wr_array;
Var i,j: Integer;
Begin
Assign(f,'array.dat');
{$I-}
Reset(f);
{$I+}
If IOResult=0
then
WriteLn('Файл уже существует')
else
begin
Rewrite(f); {открытие файла для
записи}
For i:=l to n do
For j:=l to n do
A[i,j]:=i*j;
Write(f,A); {запись массива в файл}
Close(f);
WriteLn('Создан новый файл');
End;
End;