Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бабалова Алгоритмизация задач и структурирование программ 2013

.pdf
Скачиваний:
2
Добавлен:
12.11.2022
Размер:
1.29 Mб
Скачать

3.26.Вводятся две последовательности целых чисел A и B. С помощью процедуры обеспечить поиск элементов, не входящих в одну из последовательностей или A, или B. Вывести исходные последовательности и результаты поисков.

3.27.Дана последовательность слов B. С помощью процедуры создать новую последовательность, в которую элементы последовательности B входят только по одному разу.

3.28.Задана некоторая последовательность це-

лых чисел из 49 значений. Расположить эти числа в квадратной матрице по спирали с помощью процедуры. Вывести матрицу в обычном и преобразованном видах.

3.29. Задан некоторый текст, заканчивающийся точкой. Текст состоит из произвольного количества строк. Каждая

трока заканчивается “;”. Слова в тексте записаны не менее чем через один пробел. Подсчитать с помощью функции количество одинаковых букв в тексте и вывести результат обработки в виде:

<буква>. < количество >. <номер строки текста>.

3.30.Задана некоторая строка длины не более 80 символов. Описать функцию, определяющую количество вхождений подстроки SS

вту часть строки, которая начинается с K-й позиции. Вывести исходную строку, подстроку SS и результат обработки.

3.31.Заданную последовательность целых чисел проверить с помощью функции на характер последовательности: арифметическая прогрессия, геометрическая прогрессия или произвольная. Вывести заданные последовательности и результат их проверки.

3.32.Дана матрица размерности N*M целых чисел. Обеспечить с помощью процедуры K сдвигов вправо при вводе знака +K или влево при вводе –K. Обеспечить вывод исходной матрицы и результата ее преобразования.

3.33.Дана последовательность целых чисел. С помощью функции обеспечить запись этой последовательности в двоичной системе счисления. Вывести исходные числа и результат преобразования.

3.34.Дана последовательность целых чисел. С помощью функции обеспечить запись этой последовательности в шестнадцатеричной системе счисления. Вывести исходные числа и результат преобразования.

51

3.35.Дана последовательность слов A размерности n. Упорядочить последовательность методом вставки. С помощью процедуры создать новую последовательность, в которую элементы последовательности A входят только по одному разу. Вывести результаты.

3.36.Дана последовательность целых чисел длиной M. С помощью процедуры расположить последовательность в виде матрицы максимальной размерности n. Размерность матрицы n определяется количеством элементов в последовательности m=n*n. Матрица должна получиться квадратной. Дополнить строку нулями, если количество чисел будет меньше n.

3.37.Дана матрица размерности M*N. Упорядочить с помощью процедуры по возрастанию элементы первой строки матрицы, а во всех остальных строках расположить элементы в соответствии с исходными номерами элементов первой строки. Вывести исходную матрицу и результат преобразования с номерами элементов первой строки.

3.38.С помощью процедуры обеспечить заполнение матрицы размерности n*n числами 1, 2, 3, 4 таким образом, чтобы в строках, столбцах и на главной диагонали не было одинаковых рядом стоящих чисел. Вывести результирующую матрицу.

3.39.В каждой строке матрицы размерности M*N обеспечить поиск максимального и минимального элементов. Поменять их местами. Все действия по поиску значений и перестановке элементов матрицы записать в процедурах и функциях.

3.40.Вводится матрица из n*m значений. В матрице могут быть одинаковые строки. Обеспечить удаление лишних строк и вывести результирующую матрицу с указанием ее размерности. Все действия над матрицей описать процедурами. Выводить исходную и результирующую матрицы.

52

Тема 4. РАБОТА С ФАЙЛАМИ РАЗНЫХ ТИПОВ

Определение файла. Файл – это именованная последовательность данных одного типа на внешнем носителе. В языке программирования определение файла обеспечивается объявлением соответствующего типа данных.

Type <имя> = file of <типданных>; <имя> = textfile;

<имя> = file;

Файлы в программе обрабатываются методами операционной системы (типа Windows). Для работы с файлами всех типов в программе должны быть выполнены следующие действия.

1.Объявление типа файла.

2.Создание файловой переменной.

3.Связывание файловой переменной и файла в памяти.

4.Открытие файла на запись, чтение или запись/чтение.

5.Работа с файлами методами программы (запись или чтение данных).

6.Закрытие файла.

Файл в памяти связывается с данными программы с помощью файловой переменной. На рис. 23 это переменная ff. При прочтении или записи одного поля данных файловая переменная перемещается к следующей записи файла. Движение по файлу продолжается при чтении до конца файла. Конец файла имеет свой код, который в программе считывается функцией eof(ff).

Рис. 23. Структура файла в памяти

Файловая переменная ff при считывании одного значения из файла перемещается на позицию следующего значения, хранимого в файле. В файле все его компоненты пронумерованы. Нумерация всегда начинается со значения 0. В конце файла должен быть всегда признак конца файла (код #26).

53

Рассмотрим запись перечисленных действий на языке.

1.Объявление типа данных – файл: Type ss=string[20];

rec=record

name:ss;

mark:integer;

end; ff_s=file of ss;

//Это файл из строк конечной длины ff_rec=file of rec; //Это файл из записей

2.Объявление файловой переменной: Var fs:ff_s;

f_r:ff_rec; ft:textfile;

3.Связывание файловой переменной и файла в памяти: Assignfile(<имя файловой переменной>, <имя файла>);

Assignfile (fs,’My_file.dat’); Assignfile(f_r,’My_rec.dat’); Assignfile(ft,’My_text.txt’ );

4.Открытие файла для чтения данных:

Reset(fs);

read(fs, Mas_str [ i]) ;

5.Открытие файла только на запись: Rewrite (f_r);

write(f_r, aa_rec [i]) ;

6.Закрытие файла:

close(fs) ; closefile(f_r);

Перейдем к работе с типизированными файлами.

Пример 4.1. Ввести последовательность целых чисел, сохранить ее в файле и прочитать этот массив из файла.

Разработка программы должна начинаться с создания алгоритма программы. Для этого воспользуемся структурированием программы. Все действия по обработке данных с файлами представим простейшими методами: создание данных, запись данных в файл и чтение данных из файла.

Структура программы показан на рис. 24.

54

Рис. 24. Структура программы для обработки типизированных файлов

В структуре есть три процедуры для создания файла, записи чисел в файл и чтение записанного из файла с выводом на экран. program Project_file;

{$APPTYPE CONSOLE} uses

SysUtils; label 10;

type aa=array of integer; ff=file of integer;

var a:aa; n,i:integer; g:integer; f:ff;

Filename:string;

procedure Create_m(var b:aa;var k:integer); var i:integer;

begin Randomize;

n:=Random(10)+2;

Setlength(a,n);

//Обязательное действие по определению

//текущей длины динамического массива for i:=0 to n-1 do

55

b[i]:=random(30);

end;

procedure write_file(var f1:ff;var b:aa); var i:integer;

begin assignfile(f1,Filename); rewrite(f1);

for i:=0 to n-1 do write(f1,b[i]);

closefile(f1);

end;

procedure read_file(var f1:ff;var b:aa;var fn:string);

// Для поиска файла надо самому пользователю ввести имя файла label 10;

var i:integer; begin

Assignfile(f1,fn); {$I-}

reset(f1); //Файл открывается для чтения

{$I+}

if IOResult <> 0 then begin

writeln('File not found'); goto 10;

end;

i:=0;

while not eof(f1) do begin

writeln(' Array from file '); for i:=0 to n - 1 do

begin read(f1,b[i]);

writeln('**********',b[i]:5);

writeln;

end;

end;

closefile(f1);

10 : writeln('File new');

56

end; begin

writeln('Create data'); Create_m(a,n); writeln(' Result'); for i:=0 to n - 1 do

write( a[i]:5); writeln;

Filename:='My_file.dat'; write_file(f,a);

Writeln(' Enter the name of file'); Readln(Filename);

read_file (f,a,filename); readln;

{ TODO -oUser -cConsole Main : Insert code here } end.

Результаты работы программы приведены на рис. 25.

а

б

Рис. 25. Сгенерированная последовательность случайных чисел, считанная из файла (а) и ошибка чтения из файла (б)

57

Сгенерированные данные были записаны в файл и прочитаны из него. При попытке прочитать данные из другого файла вырабатывается ошибка чтения данных.

Работа со стандартными визуальными компонентами для обработки файлов в среде Delphi. На рис. 26 приведено окно формы для работы с файлами в среде Delphi. Окно для ввода данных – это компонент TStringGrid.

Рис. 26. Окна формы для ввода и вывода данных

Для вывода результата предложено окно TListBox. Все данные в этих окнах рассматриваются средой как строки.

Пример 4.2. Список из данных следующего формата: фамилия, группа – должен быть сохранен в файле и прочитан из файла.

Структура программы идентична структуре в примере 4.1. Приводим пример программы, обеспечивающей запись в типи-

зированный файл указанных сведений: unit Unit_open;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, Buttons; type

TForm1 = class(TForm)

58

Edit1: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; BitBtn4: TBitBtn;

StringGrid1: TStringGrid; Label1: TLabel; ListBox1: TListBox;

OpenDialog1: TOpenDialog;

procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure FormCreate(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

type ss=string[30]; spisok=record

ffn:ss;

number:integer;

end; // Определение типа данных ff=file of spisok; // Файл из записей

aa=array of spisok;

//Массив записей для выполнения действий var

Form1: TForm1; f:ff;

a:aa;

n:integer; implementation {$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject); var i:integer;

begin

59

i:=1;

while Stringgrid1.cells[0,i]<> '' do begin

setlength(a,i); with a[i-1] do begin

ffn:= Stringgrid1.cells[0,i];

number:= strtoint(Stringgrid1.cells[1,i]); i:=i+1;

end; n:=i-1;

end; // Считываем данные из окна ввода в массив

end;

procedure TForm1.BitBtn2Click(Sender: TObject); var k:integer;

sp:spisok;

begin

if OpenDialog1.execute then assignfile(f,openDialog1.Filename) else

begin

Showmessage(' File not found'); exit;

end;

reset(f);

k:=filesize(f);

label1.caption:=' k=' +inttostr(k); Edit1.Text:= openDialog1.Filename;

while not eof(f ) do begin

read(f,sp); // Читаем данные для вывода в окно формы

ListBox1.items.add(sp.ffn +' '+inttostr(sp.number)); end;

closefile(f);

end;

procedure TForm1.BitBtn3Click(Sender: TObject); var i:integer;

begin

60