Задания для контрольной работы. Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя

Вариант 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;