рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ ЛАБОРАТОРНЫЙ ПРАКТИКУМ

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ ЛАБОРАТОРНЫЙ ПРАКТИКУМ - раздел Программирование, Федеральное Агентство По Образованию   Государственное...

ФЕДЕРАЛЬНОЕ АГЕНтСТВО ПО ОБРАЗОВАНИЮ

 

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ

РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)»

 

 

ПРОГРАММИРОВАНИЕ

НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

 

 

Часть 1

 

МОСКВА 2006

ББК 32.973

УДК 002.6   Рецензенты: к.т.н. К.Я Кудрявцев, к.т.н. В.Н. Криницкий.

Колесникова М.Д.

Тихомирова Б.В., 2006

 

 


Введение

 

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

Изучение курса включает:

· самостоятельное освоение всех разделов курса на основе методических указаний и рекомендуемой литературы,

· прослушивание лекций,

· составление алгоритмов и программ на практических занятиях,

· выполнение и защиту лабораторных работ,

· сдачу зачета и экзамена по курсу,

· выполнение и защиту курсовой работы.

Методика проведения лабораторных работ

Лабораторные работы проводятся в локальной сети ЭВМ. Локальная сеть ЭВМ представляет структуру СЕРВЕР - ПЭВМ. На сервере в промежутке между сеансами… Для допуска к выполнению лабораторной работы студент должен иметь в тетради… · запись условия задачи;

Описание лабораторных работ

· изучение принципов работы программного пакета Delphi 7, получение навыков разработки приложений с одной формой, изучение основных операций ввода и… · получение навыков работы с двумя и более формами приложений, создание… · алгоритмизация и программирование линейных и разветвленных структур (лабораторная работа №3);

Лабораторная работа №1

Структура программы на языке Pascal и организация ввода-вывода данных Цель работы:

Begin

End;

Заголовок этой процедуры складывается из имени класса вашей формы TForm1, имени компонента Button1 и имени события On-Click.

9. Закрыть встроенное окно РедактораКода.

10. Написать в обработчике оператор задания надписи метки Label1.Caption:=’’; (Присваивание свойству Caption текста в кавычках). Приложение готово, можно откомпилировать его и запустить (Run, или F9). При запуске приложения на экране появится форма с кнопкой Пуск, щелкнув на которой, вы увидите на форме введенный вами текст, появившийся там, где был расположен объект Label1.

При проектировании приложения Delphi создает набор файлов. Код на языке Object Pascal, с которого начинается выполнение программы и который обеспечивает инициализацию других модулей, содержит файл проекта (.dpr). Delphi создает и модифицирует этот файл без участия пользователя автоматически в процессе разработки приложения. Имя, которое вы даете файлу проекта, когда сохраняете его, становится именем исполняемого файла. Стандартный вид файла проекта, пока в нем ничего не поменяли:

Program Project;

uses Forms, Unit1 in ‘UNIT1.PAS’ {Form 1};{$R *.RES}

Begin

Application.CreateForm (Tform, Form1);

Application.Run (Form1); end.

Текстовый файл модуля (.pas) создается для каждой формы и используется для хранения кода. В случае, когда проект не связан с формой, то в файле… Текст модуля состоит из двух основных разделов: · interface - открытый интерфейс модуля, все информационные объекты (типы, константы, переменные, процедуры, функции)…

Unit Unit1;

Interface //открытый интерфейс модуля

Uses Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

type {Объявление класса формы} Tform1 = class (Tform) private //Закрытый раздел класса. Объявление переменных, функций и процедур, включаемых в класс формы и доступных для…

Задание к лабораторной работе №1

1. Разработать приложение, в котором при щелчке на кнопке "Старт" на форме с именем "Задание №1" появляется номер вашей группы и ваша фамилия.

2. Изменить приложение так, чтобы при щелчке на кнопке "Старт", надпись передвигалась слева направо.

3. Добавить кнопку "Стоп" для остановки надписи.

4. Изменить приложение, чтобы при достижении надписью при движении слева направо правой вертикальной границы формы надпись меняла шрифт и цвет и начинала движение в обратную сторону.

5. Изменить, чтобы надпись двигалась по периметру.

6. Разместить на форме вопрос и две кнопки с ответами "Да" и "Нет". Разработать приложение, при выполнении которого пользователь не может ответить на вопрос утвердительно, т.к. кнопка "Да" при подведении к ней курсора перемещается в пределах формы, при щелчке на кнопке "Нет", на форме появляется бегущая надпись. Сравните свое решение с приведенными ниже примерами.

Пример 1.1 "Бегущая строка"Вид формы:

Описание данных программы:

Имя Семантика Тип Диапазон изменения
a Массив с текстом Array of char(255) Символы, вводимые с клавиатуры
i Счетчик цикла integer 1..100
j Цвет текста integer 20..245
h Выбор цвета integer -10;10
r,g,b Выбор цвета integer 20..245
Col Хранит выбранный цвет char r,g,b,y,m,l
Temp Временное хранение string “ “(пробел)
Z Случайное число integer 0..6

Процедура обработки события "Открытие формы":

procedure TForm1.FormCreate(Sender: TObject);

Var

temp: string;

Begin

j:=25; h:=10; r:=0; g:=0; b:=0; col:='r';

Setlength(a,255);

for i:=1 to 100 - length(label1.caption) do

temp:=temp+' ';

Label1.Caption := Label1.Caption +temp;

for i:=1 to 100 do a[i]:= Label1.Caption[i];

End;

Процедура обработки таймера 1:

procedure TForm1.Timer1Timer(Sender: TObject);

Begin

for i:=100 downto 2 do a[i]:=a[i-1];

a[1]:=a[100];

Label1.Caption :='';

for i:= 1 to 100 do

Label1.Caption:=Label1.Caption +a[i];

End;

Процедура обработки таймера 2:

procedure TForm1.Timer2Timer(Sender: TObject);

var z: integer;

Begin

randomize; if a[1]='П' then

Label1.Top:=random(Form1.Height-Label1.Height-10);

if j<20 then begin z:=random(7);

Case z of

0:col:='r';

1:col:='b';

3:col:='g';

4:col:='y';

5:col:='m';

6:col:='l';

End;

End;

if (j > 245)or(j<20) then h:=-h;

Case col of

'r': r:=j;

'g': g:=j;

'b': b:=j;

'y': begin r:=j; g:=j; end;

'm': begin r:=j; b:=j; end;

'l' : begin g:=j; b:=j; end;

End;

Label1.Caption:=

'('+IntToStr(r)+','+IntToStr(g)+','+IntToStr(b)+')';

Label1.Font.Color:= rgb(r,g,b); inc(j,h);end;

Пример 1.2 "Убегающая" кнопка

На форме появляется текст вопроса “ВыхотелибызакончитьМИРЭА?” и две кнопки “Да”и “Нет”. При попытке нажать кнопку “Да” она убегает. При нажатии на кнопку “Нет” выводится текстовое сообщение “Ну и зря”.

Процедура обработки движения мыши

Procedure TForm1.Button1MouseMove

(Sender: TObject; Shift: TShiftState; X,Y: Integer);

Begin

if x<=Button1.Width div 2 then

Button1.Left := Button1.Left +1

Else

Button1.Left:= Button1.Left -1;

if y<=Button1.Height div 2 then

Button1.Top := Button1.Top +1

else Button1.Top := Button1.Top -1;

if (Button1.Top < 0)or (Button1.Left < 0)or

(Button1.Top >Height-Button1.Height-15)

or (Button1.Left > Width-Button1.Width-15)

Then with Button1 do begin

Left := 128; Top:=224;

End; end;

Процедура обработки щелчка на кнопке "Нет"

procedure TForm1.Button2Click(Sender: TObject);

Begin

Label1.Caption := 'Ну и зря.';

Label1.Left := (Width-Label1.Width) div 2;

End;

Лабораторная работа № 2

Алгоритмизация и программирование решения задач

Линейной и разветвляющейся структуры

С использованием одной формы

· изучить особенности ввода и вывода данных стандартных типов языка Object Pascal, · получить навыки написания программ линейной и разветвляющейся структуры… · получить навыки работы с функциями перевода из строкового представления данных в числовые и обратно.

Пример 2.1 Калькулятор

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

Описание переменных: первый, второй операнды, результат - все вещественного типа.

Алгоритм:

1. Ввести значение первого операнда.

2. Перевести значение первого операнда из строкового представления в вещественное представление.

3. Ввести значение второго операнда.

4. Перевести значение второго операнда из строкового представления в вещественное представление.

5. Обработать выполнение выбранной пользователем арифметической операции.

6. Для операции "деление", проверить не равно ли нулю значение второго операнда, если его значение равно нулю, то вывести сообщение об ошибке.

7. Перевести результат из вещественной формы представления в строковую форму.

8. Вывести результат.

Процедура обработки щелчка на кнопке "Сложить":

procedure TForm1.Button1Click(Sender: TObject);

Begin

edit3.Text:=floattostr(strtofloat(edit1.text)+strtofloat(edit2.text));

End;

Процедура обработки щелчка на кнопке "Вычесть"

procedure TForm1.Button2Click(Sender: TObject);

Begin

edit3.Text:=floattostr(strtofloat(edit1.text)-strtofloat(edit2.text));

End;

Процедура обработки щелчка на кнопке "Умножить"

procedure TForm1.Button3Click(Sender: TObject);

Begin

edit3.Text:= floattostr(strtofloat(edit1.text)*strtofloat(edit2.text));

End;

Процедура обработки щелчка на кнопке "Разделить"

procedure TForm1.Button4Click(Sender: TObject);

Begin

if edit2.text <> '0' then

edit3.Text := floattostr(strtofloat(edit1.text) / strtofloat(edit2.text))

Else

edit3.text:= 'Ошибка. Деление на нуль';

End;

Пример 2.2 Вычисление функции

Вычислить значение функции, где

Описание переменных:

Имя Тип Семантика
x a y вещественный вещественный вещественный аргумент параметр значение функции

Вид формы с компонентами:

Процедура обработки щелчка на кнопке “Расчет”

procedure TForm1.Button1Click(Sender: TObject);

var x,a,y:real;

Begin

X:=StrToFloat(Edit1.text);

if x<=4 then a:=5+2*x

else if x<=5 then a:=3

else a:=sqrt(x+1);

y:=2*x;

Label3.Caption:='a='+FloatToStr(a);

Label4.Caption:='y='+FloatToStr(y)

End;

Процедура обработки щелчка на кнопке “Выход”(ниже в примерах текст данной процедуры приводиться не будет, т.к. полностью идентичен данному)

procedure TForm1.Button2Click(Sender: TObject);

Begin

Close

End;

Сценарий выполнения программы:

- запустить программу (Run);

- в поле Edit1 ввести значение x;

- нажать кнопку “Расчет”;

- просмотреть и проанализировать результаты;

Для завершения работы нажать кнопку “Выход”.

Тесты:

x Эталон Результат
a y a y
4,5

Пример 2.3 Создание приложения с использованием

Переключателей панели RadioGroup

Размещенные компоненты: Компоненты Свойство Значение … Для формирования списка переключателей дней недели выберите в Инспекторе Объектов компонент RadioGroup1, а на странице…

With RadioGroup1 do

begin n:=ItemIndex; Edit1.text:=IntToStr(n+1);

Case n of

0: Edit2.text:='Понедельник';

1: Edit2.text:='Вторник';

2: Edit2.text:='Среда';

3: Edit2.text:='Четверг';

4: Edit2.text:='Пятница';

5: Edit2.text:='Суббота';

6: Edit2.text:='Воскресенье';

end;//case

End; end;

- запустить программу (Run); - выбрать номер дня щелчком по переключателю RadioGroup1;

Лабораторная работа № 3

 

Проект с несколькими формами

· изучение основных принципов организации пользовательского объектно-ориентированного интерфейса; · получение навыков структурирования задачи; · освоение приемов разработки приложения, использующего несколько форм.

Program MyProject1;

Unit UF1;

Unit UF2;

Program MyProject1;

uses Forms, Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2}; {$R *.RES}

Begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

End.

Unit UF1;

Interface

Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm)

Private { Private declarations }

Public { Public declarations } end;

Var Form1: TForm1;

Implementation

Uses UF2;

{$R *.DFM}

End.

Unit UF2;

Interface

Uses Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

Type

TForm2 = class(TForm)

private { Private declarations }

public { Public declarations }

End;

var Form2: TForm2;

Implementation

uses UF1; {$R *.DFM}

End.

Пример 3. Калькулятор

Постановка задачи: Создать приложение, выполняющие сложение (S), вычитание (R), умножение (P) значений переменных X и Y, вводимых пользователем.

Вид Form1 с компонентами:

Вид Form2 с компонентами:

После создания вышеприведенных форм, необходимо выполнить следующие действия:

 

1. В модуле Unit1 раздела Interface в описании переменных (раздел var…) добавить cтроку: X, Y, S, R, P : real;

2. Написать тексты процедур обработки щелчков на кнопках для форм.

Form1 (Unit1)

Var Form1: TForm1; x,y,S,R,P:real;

Implementation

uses Unit2; {$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

//Сумма X+Y

begin S:=x+y; end;

procedure TForm1.Button2Click(Sender: TObject);

//Ввод X,Y

begin x:=StrToFloat(Edit1.text);

y:=StrToFloat(Edit2.text) end;

procedure TForm1.Button3Click(Sender: TObject);

//ВызовForm2

begin Button3.Enabled:=True;

Form2.Show; Button5.SetFocus end;

procedure TForm1.Button4Click(Sender: TObject);

//Разность X-Y

begin R:=x-y end;

procedure TForm1.Button5Click(Sender: TObject);//Вывод R,S

begin Form2.Edit1.Text:=FloatToStr(R);

Form2.Edit2.Text:=FloatToStr(S); end;

End.

Form2 (Unit2)

Implementation

uses Unit1; {$R *.DFM}

procedure TForm2.Button2Click(Sender: TObject); //Выход

Begin Form1.Close end;

procedure TForm2.Button1Click(Sender: TObject);

//Произведение X*Y

begin P:=x*y; end;

procedure TForm2.Button3Click(Sender: TObject); //Вывод P

begin Edit3.Text:=FloatToStr(P); end;

End.

 

3. Сохранить все сделанное командой File/Save All.

4. Запустить программу (Run). При успешном запуске программы на экране появится окно Form1 с компонентами:

 

5. В окна редакторов Edit1 и Edit2 ввести значение переменных X и Y. Замечание: в числах с дробной частью вводить символ “.”, а не “,”.

6. Нажать на кнопки в следующей последовательности:

Ввод X, Y”;

“Сумма X+Y”;

“Разность X-Y”;

“Вывод R, S”;

“Вызов Form2”;

7. Активизировать щелчком мыши Form2 и нажать на кнопки в следующей последовательности:

Умножение X*Y”;

“Вывод P”;

Вид Form2 после выполнения:

8. Просмотреть результаты.

9. Для завершения работы нажать кнопку “Выход”.

Лабораторная работа №4

Алгоритмизация и программирование решения типовых задач циклической структуры

· изучить основные типы циклов процедурного программирования, · получить навыки программирования вложенных циклов. Ниже рассмотрены примеры стандартных задач, для нахождения решения которых используются все виды циклов. Для каждого…

Пример 4.1. Поиск всех делителей целого числа

Постановка задачи: дано натуральное число, найти все его делители. Вид формы с компонентами:

Процедура обработки щелчка на кнопке "Расчет"

procedure TForm1.Button1Click(Sender:TObject);

var x ,i: integer;

pol : integer; {половина исследуемого числа}

tec : integer; {текущее значение делителя}

begin ListBox1.Items.Clear; {очистка списка}

X := abs (StrToInt(Edit1.Text));

pol := x div 2; {половина числа}

tec := 2; {минимальный делитель} i := 0;

while tec <= pol do

Begin

if x mod tec=0 then begin

inc (i);{следующий номер делителя}

ListBox1.Items.Add(IntToStr(i)+

’-й делитель равен’+IntToStr(tec)); end;

Inc(tec); end;

if I=0 then ListBox1.Items.Add(‘простое число’);

End;

Пример 4.2

Нахождение наибольшего общего делителя (НОД) и

Наименьшего общего кратного (НОК) двух чисел

Вид формы с компонентами:

Процедура обработки щелчка на кнопке “Расчет

procedure TForm1.Button1Click(Sender: TObject);

var M,N,NOD,NOK:word; i,k:word;

Begin

M:=StrToInt(Edit1.text); N:=StrToInt(Edit2.text);

if N>M then k:=M else k:=N;

NOD:=1;

for i:=1 to k do

if (N mod i=0) and (M mod i=0) then NOD:=i;

NOK:=NOD*(N div NOD)*(M div NOD);

Label4.Caption:='NOD='+IntToStr(NOD);

Label5.Caption:='NOK='+IntToStr(NOK)

End;

Задания к лабораторной работе

Разработать приложение, в котором при щелчке на кнопке "Решение" на форме появляется решение вашего варианта:

1. Указать число, в двоичном представлении которого больше всего единиц.

2. Разложить на простые множители числа последовательности, сумма цифр которых кратна 7.

3. Указать число, которое делится на каждую из своих цифр.

4. Найти все натуральные числа, не превосходящие заданного N и делящиеся на каждую из своих цифр.

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

6. Найти все совершенные числа последовательности.

7. Найти все симметричные числа последовательности.

8. Для всех простых чисел последовательности найти цифровой корень.

9. Распечатать числа последовательности равные числу А.

10. Определить количество простых чисел палиндромов.

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

12. Распечатать количество чисел, чья сумма цифр кратна заданному числу.

Лабораторная работа №5

Работа с массивами

Цель работы:

· изучить характеристики и основные операции с структурой данных – массив,

· получить навыки ввода и вывода одномерных и двумерных массивов.

Пример 5.1. Нахождение значения и номера максимального элемента одномерного массива

Описание переменных:

Имя Структура Тип Семантика
n a max imax простая массив простая простая целый целый целый целый количество элементов массива заданный массив максимальный элемент номер максимального элемента

 

Для решения данной задачи используется функция GetSubStr(st:string;n:integer):string для выделения подстроки из строки. Данная функция размещается в разделе Implementation модуля формы Unit1. Т.к. вводимые элементы массива записываются в поле редактора Edit2, то функция Getsubstr будет выделять символы в строке Edit2 до пробела, т.е. цифры числа очередного элемента массива.

 

function GetSubStr(st:string;n:integer):string;

var i,p:integer;

Begin

for i:=1 to n-1 do begin

p:=pos(' ',st);

st:=copy(st,p+1,length(st)-p)

End;

p:=pos(' ',st);{найти конец нужной подстроки}

if p <> 0 then result:=copy(st,1,p-1) else result:=st

End;

Вид формы с компонентами:

Процедура обработки щелчка на кнопке "Расчет"

procedure TForm1.Button1Click(Sender: TObject);

const nn=20;// количество элементов массива

type size=1..nn;

var a:array[size]of integer;

i,n,imax:size;

max:integer;

Begin

N:=StrToInt(Edit1.text);

for i:=1 to n do a[i]:=StrToInt(GetSubStr(Edit2.text,i));

max:=a[1]; imax:=1;

for i:=1 to n do

if a[i] > max then begin max:=a[i];imax:=i end;

Label5.Caption:='max='+IntToStr(max);

Label6.Caption:='indexmax='+IntToStr(imax);

End;

Сценарий выполнения программы:

1. Запустить программу (Run).

2. Ввести в поле Edit1 значение количества элементов массива, не превышающее 21.

3. В поле Edit2 ввести элементы массива, разделяя их пробелом.

4. Нажать кнопку “Расчет”.

5. Просмотреть результаты (ниже приведен пример).

6. Для завершения работы нажать кнопку “Выход”.

Пример 5.2 Решение задачи примера 5.1 с использованием ввода элементов массива из строк компонента Memo

Вид формы:

Описание компонентов, размещенных на форме:

Компоненты Свойство Значение
Form1 Label1 Label2 Label3 Label4 Label5 Button1 Button2 Edit1 Memo1 Caption Caption Caption Caption Caption Caption Caption Caption Text Lines Поиск максимального элемента Количество вводимых элементов m= max= indexmax= Ввод Поиск Выход пусто пусто

Используя страницу Standart палитры компонент, поместите в правой части формы компонент Memo (текстовый редактор), измените его параметры, выберите в окне Инспектора Объектов объект Memo1, затем на странице Свойства произведите двойной щелчок на поле значения Strings свойства Lines для формирования и редактирования текста. После этого в окне String List Editor удалите текст Memo1, введите текст в 0-й строке “Вводите массив” и щелкните мышью на кнопке ОК.

Ввод элементов массива и поиск в массиве максимального элемента и его индекса осуществляется в разных процедурах, поэтому описание массива и переменной “m” нужно выполнить в разделе Interface модуля Unit1:

const mm=20;//максимальный размер массива

type size=1..mm;

Var

Form1: TForm1;

a:array[size]of integer;

M:size;

Процедура обработки щелчка на кнопке “Ввод”

procedure TForm1.Button1Click(Sender: TObject);

var i:size;

Begin

M:=StrToInt(Edit1.text);

for i:=1 to m do a[i]:=StrToInt(Form1.Memo1.Lines[i])

End;

Процедура обработки щелчка на кнопке “Поиск”

procedure TForm1.Button2Click(Sender: TObject);

var n:integer;//количество строк в поле Memo1

max:integer; i,imax:size;

st:string;//строка для сообщения

begin n:=Form1.Memo1.Lines.Count;

//подсчет кол-ва строк в Memo1

if n=0 then ShowMessage('исходные данные не введены');

if n > m then begin // в поле Memo1 есть текст

ShowMessage('количество введенных строк'+

#13'превышает размер массива.');

n:=m;//будем вводить "m" строк end ;

{ В поле Memo строки пронумерованы с нуля }

{ Вывод введенного массива в окно сообщения }

if n > 0 then

begin st:='Введенный массив'+#13;

for i:=1 to n do

st:=st+IntToStr(i)+' '+IntToStr(a[i])+#13;

ShowMessage(st)

End;

max:=a[1]; imax:=1;

for i:=1 to n do

if a[i]>max then begin max:=a[i]; imax:=i end;

Label4.Caption:='max='+IntToStr(max);

Label5.Caption:='indexmax='+IntToStr(imax);end;

Сценарий выполнения программы:

1. Запустить программу (Run).

2. Вести в поле Edit1 значение n - количество элементов массива(n).

3. В поле Memo1, начиная со строки с номером 1, ввести элементы массива(по одному числу в строке).

4. Нажать кнопку “Ввод”.

5. Нажать кнопку “Поиск”. Появится окно с сообщением “Количество введенных строк превышает размер массива”(Первая строка ее номер нулевой , содержит текст “Вводитемассив”). Нажать кнопку “ОК”. Появится окно с сообщением “Введенный массив” и после него сами элементы.

 

6. Просмотреть их и нажать “ОК”.

7. Проанализировать результаты.

8. Для завершения работы нажать кнопку “Выход”.

Пример 5.3 Создание приложения с вводом двумерного массива в полеEditи выводом его в таблицуStringGrid

Постановка задачи: в двумерном массиве A(m*n) определить максимальный элемент и его место расположение.

Компонент StringGrid страницы Additional предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Таблица делится на две части: фиксированную и рабочую. Фиксированная служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Центральным свойством компонента является Cells - двумерный массив ячеек. Конкретная ячейка определяется парой чисел – номером столбца и номером ряда, на пересечении которых она находится(нумерация начинается с нуля). Например, Cells[2,3]. Здесь первый индекс 2 – это номер 3-го столбца, а второй индекс 3 – номер 4-го ряда (4-ой строки). Будьте внимательны при выводе в таблицу матрицы по строкам.

 

Вид формы с компонентами:

Размещенные компоненты:

Компоненты Свойство Значение Пояснение
Label(1,10)   Button1 Button2 Edit1 Edit2 Edit3 StringGrid1 Caption   Caption Caption Text Text Text ColCount RowCount FixedCols FixedRow   s Текст на форме Расчет Выход Пусто Пусто Пусто     Количество строк матрицы Количество столбцов Матрица по строкам Количество столбцов таблицы Количество строк таблицы Количество фиксированных столбцов и строк для надписей номеров

Процедура обработки щелчка на кнопке “Расчет”

(Перед процедурой разместить функцию выделения

подстроки из строки GetSubSrt)

function GetSubStr(st:string;n:integer):string;

var i,p:integer;

begin for i:=1 to n-1 do begin p:=pos(' ',st);

st:=copy(st,p+1,length(st)-p) end;

p:=pos(' ',st);//конец нужной подстроки

if p <> 0 then result:=copy(st,1,p-1) else result:=st end;

procedure TForm1.Button1Click(Sender: TObject);

const nn=6; type size=1..nn;

var a:array[size,size]of integer; m,n:size; max:integer;

imax,jmax: size; i,j,k: integer;

Begin

m:=StrToInt(Edit1.text); n:=StrToInt(Edit2.text);

{ Ввод матрицы из Edit3}

K:=1;

for i:=1 to m do

for j:=1 to n do

Begin

a[i,j]:=StrToInt(GetSubStr(Edit3.text,k));

k:=k+1

End;

{Вывод номеров строк в 0-м столбце и столбцов в 0-й строке}

With StringGrid1 do

begin i:=0; //0-й столбец

for j:=1 to RowCount-1 do //вывести номера строк

Cells[i,j]:=IntToStr(j);

J:=0; //0-я строка

for i:=1 to ColCount-1 do //вывести номера столбцов

Cells[i,j]:=IntToStr(i); end;

{ Вывод элементов матрицы в таблицу }

With StringGrid1 do

for j:=1 to n do Cells[j,i]:=IntToStr(a[i,j]); max:=a[1,1]; imax:=1; jmax:=1; for i:=1 to m do

Задание к лабораторной работе № 5

1. Даны переменные К, значения массивов А(К) или А(К,К) и переменные В, С, Д в зависимости от условий задачи варианта (в вариант входят пять самостоятельных задач). Составьте схемы алгоритмов и программы вычисления значений переменных, указанных в варианте задания. Составьте отладочные тесты. Включите в программы операторы выдачи на экран дисплея исходных данных (отладочного теста) и полученных результатов с пояснительным текстом.

Вариант задания Имя переменной Вариант задания Имя переменной
М1,Р5,Р2,Р14,Р26 М6,М10,Р13,Р20,Р30
М2,М7,Р7,Р15,Р27 М12,Р3,Р12,Р21,Р15
М3,М7,Р8,Р16,Р28 М8,Р9,Р11,Р22,Р16
М4,М11,Р5,Р17,Р29 М9,Р4,Р13,Р23,Р17
М5,М8,Р1,Р18,Р25 М10,Р6,М13,Р24,Р18
Р3,М6,Р13,Р19,Р24 Р10,М8,Р2,Р25,Р19

М1 – количество нулевых элементов матрицы А(К,К);

М2 – количество положительных элементов матрицы А(К,К);

М3 – количество положительных элементов вектора А(К);

М4 – количество отрицательных элементов матрицы А(К,К);

М5 – количество нулевых элементов вектора А(К), заключённых между двумя первыми соседними нулями; если в векторе А нет нулевых элементов, то М5=0;

М6 – количество диагональных элементов матрицы А(К,К), равных заданному числу С;

М7 – количество диагональных элементов матрицы А(К,К), не равных заданному числу С;

М8 –количество элементов матрицы А(К), находящихся в пределах ВАiС (В и С заданы);

М9 – количество нулевых элементов вектора А(К), находящихся за первым элементом вектора А, равным заданному числу С;

М10–количество нулевых элементов вектора А(К), предшествующих (имеющих меньший индекс) первому элементу вектора А, равному заданному числу С;

М11 – номер (индекс) минимального элемента вектора А(К);

М12 – номер (индекс) строки максимального элемента матрицы А;

М13 – номер (индекс) столбца максимального элемента матрицы А (К,К);

Р1 – сумма элементов матрицы А(К,К);

Р2 – сумма положительных элементов матрицы А(К,К);

Р3 – сумма элементов вектора А(К), больших заданного числа С;

Р4 – среднее арифметическое значение вектора А(К);

Р5 – сумма отрицательных элементов вектора А(К), имеющих чётный индекс (стоящих на чётных местах);

Р6 – сумма элементов массива А(К), значения которых лежат в пределах ВАiС (В и С заданы);

Р7 – сумма элементов вектора А(К), значения которых удовлетворяют условию: АiC или АiД (С и Д заданы, С<Д);

Р9 – значение максимального элемента матрицы А(К,К);

Р10 – произведение элементов матрицы А(К,К), больших максимального элемента первой строки матрицы А;

Р11 – сумма элементов вектора А(К), стоящих на чётных местах (с чётными индексами) и больших С;

Р12 – сумма положительных элементов вектора А(К), стоящих на нечётных местах;

Р13 – произведение отрицательных элементов матрицы А(К,К);

2. Дан целочисленный массив А(К) (0<К<50; 0<Аi<100). Составьте схемы алгоритмов и программы вычисления значений переменных, указанных в варианте задания:

Р14 – значение элемента, сумма цифр которого максимальна. Если таких элементов несколько, то сумму значений таких элементов;

Р15 – максимальный делитель, оканчивающийся на 3 для максимального числа А(К);

Р16 – наибольший чётный делитель для максимального числа А(К);

Р17 – сумма делителей из заданного диапазона (нижняя граница диапазона n1 и верхняя граница диапазона n2);

Р18 – значение минимального нечётного делителя, большего 1 для М3 (числа равного количеству положительных элементов вектора А(К));

Р19 – количество делителей делящихся на 5, для числа равного сумме положительных элементов А(К), стоящих на нечётных местах (Р12);

Р20–величина простого делителя для максимального числа А(К);

Р21 – сумма простых делителей, заканчивающихся на 3 для максимального элемента А(К);

Р22 – сумма тех элементов массива, у которых совпадают младшая и старшая цифра;

Р23 –сумма элементов, индексы которых являются степенью двойки;

Р24 – максимальный элемент из чисел, встречающихся а А(К) более одного раза;

Р25 – минимальное число среди элементов массива, сумма цифр которых максимальна;

Р26 – наименьшее общее кратное (НОК) простых чисел А(К);

Р27 – НОК элементов А(К), индексы которых кратны 3;

Р28 – произведение элементов, сумма цифр которых максимальна;

Р29 – сумма индексов простых чисел;

Р30 – сумма тех чисел вектора А(К), которые имеют наименьшее количество цифр в своём изображении и являются простыми;

Р31 – индексы элемента вектора А(К), равного заданному числу В.

Лабораторная работа №6

Обработка последовательности символов (строк)

· изучить структуру данных строка; · получить навыки применения стандартных функций языка Pascal. Теоретическое введение

Таблица 1. Строковые функции

Функция Описание
Concat(sl, s2, s3) Возвращает последовательное соединение строк. Эквивалентна оператору sl+s2+s3
Copy(s, pos, len) Возвращает подстроку длиной максимум len символов, начинающуюся в позиции pos строки s
Delete(s, pos, len) Удаляет максимум len символов из строки s, начиная с позиции pos
Insert(sourse, tar-get, pos) Вставляет строку source в строковую переменную target, начиная с позиции pos
Length (s) Возвращает динамическую длину строки
Pos(substring, s) Возвращает место первого вхождения подстроки substring в строку s
SetLength(s, newlen) Задает новую динамическую длину newlen строковой переменной s
SetString Задает содержимое и длину строки
Str(x, s) Преобразует численное значение х в строковую переменную s
StringOfChars Возвращает строку с конкретным числом символов
Val (s, v, code) Преобразует строку s в соответствующее численное представление v

 

Пример 6.1. Определение заданных последовательностей символов в строке

Даны: целое число N, символы S1,S2,…,SN. Определить число входящих в последовательность заданных комбинаций букв.

Вид компонентов на форме:

Процедура обработки щелчка на кнопке "Выполнить"

procedure TForm1.Button1Click(Sender: TObject);

var Str:string; otvet, i, N: integer;

Begin

i =0; otvet:=0; N:=StrToInt(Edit1.Text);

if N<>length (Str) then begin Label5.Caption:= ’Ошибка!

Длина строки должна быть равна числу N’;

Edit1.Text:=’ ’;Edit2.Text:=’ ’; Edit3.Text:= ’ ’; Exit; end;

if Length(Edit3.Text)<>3 then begin

Label5.Caption:=’Ошибка!

Искомая комбинация должна содержать 3 символа’;

Edit1.Text:=”; Edit2.Text:=”; Edit3.Text:=”; Exit; end;

while i<N do begin i:=i+1;

if (str[i]=Edit3.Text[1]) and (str[i+1]=Edit3.Text[2]) and

(str[i+2]=Edit3.Text[3]) then begin i:=i+2;

Otvet:=otvet+1; end; end;

Label5.Caption:=’Ответ: найдено’

+IntTostr(otvet)+’искомых комбинаций’;

End;

Задание к лабораторной работе №6

1. Даны целое число N, символы S1,S2,…,SN. Подсчитать, сколько раз среди данных символов встречается буква X.

2. Даны: целое число N, символы S1,S2,…,SN. Подсчитать:

· сколько раз среди данных символов встречается символ "+" и сколько раз символ "*";

· общее число вхождений символов "+" и "*" в последовательность.

3. Даны целое число N, символы S1,S2,…,SN. Преобразовать последовательность S1,S2,…,SN, заменив в ней:

· все восклицательные знаки точками;

· каждую точку многоточием, т.е. тремя точками;

· каждую из групп, стоящих рядом точек одной точкой;

· каждую из групп стоящих рядом точек (многоточием).

4. Даны: целое число N, символы S1,S2,…,SN, среди которых есть двоеточие:

· получить все символы, расположенные до первого двоеточия включительно;

· получить все символы, расположенные после первого двоеточия включительно;

· получить все символы, расположенные между первым и вторым двоеточием. Если второго двоеточия нет, то получить все символы, расположенные после единственного имеющегося двоеточия;

5. Даны: целое число N, символы S1,S2,…,SN:

· подсчитать наибольшее количество идущих подряд пробелов;

· выяснить, имеются ли в данной последовательности пять подряд идущих букв Е;

6. Даны: целое число N, символы S1,S2,…,SN. Выяснить, имеются ли в последовательности подряд идущие запятая и тире.

7. Даны: целое число N, символы S1,S2,…,SN. Выяснить, имеются ли в последовательности подряд идущие три запятые и тире.

8. Даны: целое число N, символы S1,S2,…,SN. Получить номер первого элемента в данной последовательности, расположенного между двумя буквами А. Если такой элемент отсутствует, то ответ должен быть 0.

9. Даны: целое число N, символы S1,S2,…,SN. Определить число вхождений в последовательность букв: АВС; АВА.

10. Даны: целое число N, символы S1,S2,…,SN. Заменить каждую последовательность букв CHILD на CHILDREN.

11. Даны: целое число N, символы S1,S2,…,SN. Исключить из данной последовательности группы символов, расположенные между круглыми скобками. Сами скобки тоже исключить. Предполагается, что внутри круглых скобок других круглых скобок нет.

12. Даны: целое число N, символы S1,S2,…,SN. Преобразовать последовательность, если нет символов *, то оставить без изменений, иначе заменить каждый символ, встречающийся после первого вхождения символа * на символ –.

13. Даны: целое число N, символы S1,S2,…,SN. Преобразовать последовательность, удалив из нее все запятые, предшествующие первой точке, и заменив знаком + все цифры "3", встречающиеся после первой точки.

14.Даны: целое число N, символы S1,S2,…,SN. Группы символов, разделенных пробелами, одним или несколькими, и не содержащих пробелов внутри себя, будем называть словами:

· подсчитать количество слов в данной последовательности;

· найти количество слов, начинающихся с буквы А;

· найти количество слов, у которых первый и последний символы совпадают друг с другом;

· найти какое-нибудь слово, начинающееся с буквы А.

15. Задан массив строковых переменных F$, каждый элемент которого состоит из фамилии студента и его оценки за экзамен. Составьте программу сортировки элементов массива строковых переменных по алфавиту фамилий. Введите в память ЭВМ массив : IVANOV 4, PETROV 4, SIDOROV 3, VASILIEV 2, FEDOROV 5, ALEKSEEV 4. Используя составленную вами программу, проведите сортировку массива F$ по алфавиту и напечатайте его элементы в следующем виде:

Family name Mark
ALEKSEEV
FEDOROV
…. …………. ………

Кроме того, в Вашу программу должны быть включены операторы расчета количества number различных оценок mark и определения среднего арифметического значения оценок группы студентов middle mark и выдачи этих данных на печать в виде number of.

16. Разработайте и напишите программу анализа текста. Она должна воспринимать фрагмент текста как предложение и вычислять частоту появления входящих в него слов. Таким образом, как только при обработке текста встречается новое слово, оно должно запоминаться в таблице со значением частоты появления, равной 1; если обнаруженное слово не является новым, то определяется его положение в таблице и соответствующее ему значение частоты появления увеличивается на 1. Отсортируйте результаты и изобразите слова в порядке алфавита с указанием частоты их появления.

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

Лабораторная работа №7

Работа с файлами

Цель работы:

· изучить структуру данных - файл, типы файлов,

· получить навыки работы с файлами.

Теоретическое введение

Язык Pascal поддерживает следующих три файловых типа:

1. Текстовые файлы (типа Text) состоят из кодов ASII, включая расширенные и управляющие коды. Текстовые файлы организуются по строкам и обязательно содержат специальный код, называемый концом файла.

2. Компонентные (типизированные) файлы (типа File Of) используются для хранения данных типа компонентов файла, определенных при его объявлении. Типизированные файлы могут содержать данные любых типов, кроме файловых.

3. Нетипизированные файлы (типа File) отличаются тем, что для них не указывается тип компонентов файла. Эти файлы используют для высокоскоростного копирования файлов.

Pascal имеет стандартные процедуры применимые к файлам любых типов (Таблица 2).

Таблица 2. Стандартные процедуры работы с файлами

Процедура или функция Действие
Assign (var f ; FileName : String ) Связывает файловую переменную с именем физического файла, заданным в FileName
Reset (var f) Открывает файл с логическим именем f для чтения
Rewrite (var f) Открывает файл с логическим именем f для записи
Close (var f) Закрывает файл с логическим именем f
Rename (var f;NewName: String) Переименовывает физический файл, ранее связанный с файловой переменной f, в NewName (применима лишь к закрытым файлам)
Erase ( var f ) Стирает физический файл, связанный с файловой переменной f. Стираемый файл должен быть закрыт
EOF(var f): Boolean Возвращает значение True, если достигнут конец файла f, иначе возвращает False

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

Дано: файл F, компоненты которого являются целыми числами. Найти количество нечетных чисел в данном файле.

Вид компонентов на форме:

 

Программа обработки щелчка на кнопке "Создать файл"

procedure TForm1.Button1Click(Sender: TObject);

var f: textfile; i: integer;

begin assignfile(f,'c:1Frr.txt'); rewrite(f);

for i:=1 to 39 do writeln(f,IntToStr(i));

Closefile(f); end;

Программа обработки щелчка на кнопке "Вычислить"

procedure TForm1.Button2Click(Sender: TObject);

var f: textfile; ch:string; i,s: integer;

Begin

Label2.Caption:='нечетныe числa:';

assignfile(f,'c:1Frr.txt'); reset(f); s:=0;

While not eof(f) do begin readln(f,ch);

I:=StrToInt(ch);

if (i mod 2) <> 0 then s:=s+1;

Label2.Caption:=Label2.Caption+ ' '+IntToStr(i); end;

Label3.Caption:=inttostr(s); end;

Дфиуд1юСфзешщтЖ=эколичество нечетных чисел = э+ШтеЕщЫек(ы)ж утвж

Пример 7.2 Преобразование текстового файла

В типизированный

Структура файла IS.txt: Ф.И.О. Возраст Рост … В столбцах 1, 2, 3, 4, 5, 7, 8 данные “прижаты” к левой границе отведенного… Содержимое исходного файла IS.txt:

Begin

With StringGrid1 do

Begin

cells[0, 0]:='ФИО';

cells[1, 0]:='Возраст';

cells[2, 0]:='Рост';

cells[3, 0]:='Цвет глаз';

cells[4, 0]:='Цвет волос';

cells[5, 0]:='Зарплата';

cells[6, 0]:='Машина';

cells[7, 0]:='Квартира'

End

End;

3. Активизируем мышью кнопку “Создание типизированного файла” и в появившемся обработчике запишем текст:

procedure TForm1.Button1Click(Sender: TObject);

type sz=record

fio:string[15];

vozr,rost:integer;

cg:string[10];

cv:string[9];

zp:integer;

car,kv:string[3]

end;// sz

var st,r:string; rzap:sz; i:integer; f1:TextFile;

f2:file of sz;

Begin

AssignFile(f1,'is.txt');

AssignFile(f2,'s1.dat');

Reset(f1);rewrite(f2);

While not SeekEof(f1) do

Begin readln(f1,st);

rzap.fio:=copy(st,1,15);

r:=copy(st,16,2);rzap.vozr:=StrToInt(r);

r:=copy(st,19,3);rzap.rost:=StrToInt(r);

rzap.cg:=copy(st,23,10);

rzap.cv:=copy(st,33,9);

r:=copy(st,42,5);rzap.zp:=StrToInt(r);

rzap.car:=copy(st,48,3);

rzap.kv:=copy(st,52,3);

Write(f2,rzap)

End;

CloseFile(f1); CloseFile(f2);

reset(f2); i:=0;

While not eof(f2) do

begin read(f2,rzap); i:=i+1;

With StringGrid1 do

begin Cells[0,i]:=rzap.fio;

Cells[1,i]:=IntToStr(rzap.vozr);

Cells[2,i]:=IntToStr(rzap.rost);

Cells[3,i]:=rzap.cg;

Cells[4,i]:=rzap.cv;

Cells[5,i]:=IntToStr(rzap.zp);

Cells[6,i]:=rzap.car;

Cells[7,i]:=rzap.kv

End

End

End;

4. Запустим программу. Если тексты обработчиков событий введены правильно, на экране появится форма в таком виде таблицы с “шапкой”:

5. Нажмем кнопку “Создание типизированного файла”. В результате появится форма в виде таблицы, заполненной содержимым сформированного типизированного файла S1.dat

 

6. Завершим работу программы нажатием кнопки “Выход”.

Задание к лабораторной работе

Задание 1

1. Дан файл F, компоненты которого являются действительными числами. Найти сумму и произведение компонент файла F.

2. Дан файл F, компоненты которого являются целыми числами. Найти количество четных чисел среди компонент.

3. Дан текстовый файл F. Получить копию файла F в файле G.

4. Даны текстовые файлы F1 и F2. Переписать с сохранением порядка следования компоненты файлаF1 в файл F2, компоненты файла F2 в файл F1. Использовать вспомогательный файл H.

5. Дан текстовой файл F. В файле F не менее двух компонент. Определить, являются ли два первых символа файла цифрами. Если да, то установить, является ли полученное число четным.

6. Дан файл F, компоненты которого являются целыми числами. Получить в файле G все компоненты файла F:

· являющиеся четными числами;

· делящиеся на 3 и не делящиеся на 7.

7. Дан текстовой файл F. Получить файл G, образованный из файла F заменой всех его прописных букв одноименными строчными.

8. Дан текстовой файл F. Записать в файл G компоненты файла F в обратном порядке.

9. Дан файл F, компоненты которого являются целыми числами. Получить файл G, образованный из файла F исключением повторных вхождений того же числа.

10.Дан текстовой файл F. Добавить в его конец символы "l","n", "d".

11. Даны текстовые файлы F и G. Записать в файл H все начальные совпадающие компоненты файлов F и G.

12. Дан текстовой файл F. Записать в файл G с сохранением порядка следования тех символов файла G:

· которым в этом файле предшествует буква "a";

· после которых в этом файле идет буква "а".

13.Дан текстовой файл F. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Удалить из файла все однобуквенные слова и лишние пробелы. Результат записать в файл G.

14. Дан текстовой файл F. Найти самое длинное слово среди слов, вторая буква в которых есть "a"; если таких слов несколько, то найти последнее. Если таких слов нет вообще, то сообщить об этом.

15. Дан текстовой файл F. Считая, что количество символов в слове не превосходит 20, определить, сколько в файле F имеется слов, состоящих из одного, двух, тех и т.д. символов.

16. Дан текстовой файл F, содержащий сведения о сотрудниках учреждения, записанные по следующему образцу: фамилия_имя_отчество. Копировать эти сведения в файле G.

17.Дан файл F, содержащий сведения о книгах. Сведения о каждой из книг – это фамилия автора, название и год издания. найти названия книг данного автора, изданных в 1960 г. Определить, имеется ли книга с названием «Информатика». Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех.

18. Дан файл F, который содержит номер телефонов сотрудников учреждения: фамилия сотрудника, инициалы и номер телефона. Найти телефон сотрудника по его фамилии и инициалам.

19. Дан файл F, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Найти страны, в которые экспортируется данный товар, и общий объем его экспорта.

20. Дан текстовой файл F. Переписать в файл G все компоненты файла F с заменой в них символа "0" на "1" и наоборот.

Задание 2

Из текстового файла создать типизированный файл, вывести его содержимое в таблицу формы Form1, затем отсортировать типизированный файл по выбранному ключу и вывести отсортированный файл в таблицу формы Form2. Ключ для сортировки выбрать самостоятельно (по своему усмотрению).

Варианты структуры исходного файла:

1. Самолеты

Наименование типа Фамилия конструктора Год выпуска Количество кресел Грузоподъемность, т

2. Расчет движения

Наименование воздушной линии Тип самолета Количество рейсов Налет тыс. км. Пассажиро – оборот, человеко - км

3. Расписание

Номер рейса Наименование рейса Тип самолета Стоимость билета Протяженность линии

4. Сооружение аэропорта

Наименование Площадь Этажность Год сооружения Стоимость млн. руб.

5. Линии московского метро

Наименование Район линии Год пуска Протяжен-ность линии Количество поездов

6. Легковые автомобили

Марка Цвет Стоимость Изготовитель Максимальная скорость

7. Продажа программных продуктов

Наименование Фирма – изготовитель Стоимость тыс. руб. Обьем, Мбайт Максимальная скорость

8. Абонентская плата за телефон

Ф. И. О. абонента Телефон Год установки Количество Абонентов Плата За телефон

9. Детские сады

Наименование детского сада Номер сада Количество детей Район Города Плата за месяц

10. Ведомость зарплаты за текущий месяц

Ф. И. О. Табельный номер Дата рождения Оклад тыс. руб. Стаж работы

11. Сотрудники

Ф. И. О. Табельный номер Дата рождения Оклад тыс. руб. Стаж работы

12. Музеи

Наименование Назначение Адрес Время работы Стоимость

13. Экскурсии

Наименование Страна Стоимость Продолжительность Транспорт

14. Кинофильмы

Наименование кинотеатра Стоимость билета Время сеансов Адрес   Количество мест

15. Книга – почтой

Наименование книги Ф. И. О. автора Номер по каталогу Издательство Стоимость книги

16. Склад товаров

Номер магазина Наименование товара Артикул товара Цена единицы товара Количество товара

17. Телевизоры на складе магазина

Наименование Фирма- изготовитель Стоимость Размер экрана Количество на складе

18. Холодильники на складе магазина

Наименование Фирма- изготовитель Стоимость Емкость камеры Количество на складе

Лабораторная работа №8

Одномерные динамические массивы.

· изучение типа данных “динамический массив”; · получение навыков программирования обработки динамических массивов… Пример 8.1 Основные операции со структурой данных – динамический массив

Unit Unit1;

Interface

Uses Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls,MAS_PP;

Type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Button1: TButton;// ввод массива

Button2: TButton;// вывод массива

Button3: TButton;// показ результатов в Form2

Button4: TButton;// суммирование

Button5: TButton;// максимальный элемент

Label3: TLabel;

Edit3: TEdit;

Button6: TButton;// массив из элементов, кратных "к"

Button7:TButton;//сортировка массива по возрастанию

Button8: TButton;// освобождение памяти и выход

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

End;

Var

Form1: TForm1;

A:arr;

N:integer;

Implementation

Uses Unit2;

{$R *.DFM}

Function GetSubstr(st:string;k:integer):string;

Var i,p:integer;

Begin for i:=1 to k-1 do

Begin

p:=Pos(' ',st);

st:=copy(st,p+1,length(st)-p);

End;

p:=Pos(' ',st);

if p <> 0 then result:=copy(st,1,p-1)

else result:=st

End;

procedure TForm1.Button1Click(Sender: TObject);

// ввод массива

Var i:integer;

Begin

N:=StrToInt(Edit1.Text);

SetLength(A,n); // Выделение памяти

for i:=0 to n-1 do

A[i]:=StrToInt(GetSubstr(Edit2.text,i+1));

{В динамическом массиве индекс 1-го элемента

Равен нулю, а из редактора Edit берется 1-й,2-й ит.д.

элементы}

End;

procedure TForm1.Button2Click(Sender: TObject);

// вывод массива

var i:integer;

Begin

for i:= 0 to n-1 do

Form2.listBox1.items.Add(IntToStr(A[i]))

End;

procedure TForm1.Button3Click(Sender: TObject);

// показ результатов в Form2

Begin Form2.show end;

procedure TForm1.Button4Click(Sender: TObject);

// суммирование

Var k,i,S:integer;

B:arr;

begin k:=0;

SetLength(B,k+1); // Выделение памяти

for i:=0 to n-1 do

if A[i]>0 then

Begin

SetLength(B,k+1); // Выделение памяти

B[k]:=A[i]; k:=k+1 end;

S:=Sum(k,B);

Form2.Edit1.Text:=IntToStr(S) ;end;

procedure TForm1.Button5Click(Sender: TObject);

// максимальный элемент

Var amax,i,kmax:integer;

Begin

amax:=Max(n,A);

kmax:=0;

for i:= 0 to n-1 do

if A[i]=amax then kmax:=kmax+1;

Form2.Edit2 .text:=inttostr(amax);

Form2.Edit3.text:=inttostr(kmax);

End;

procedure TForm1.Button6Click(Sender: TObject);

// массив из элементов, кратных "к"

var B:arr; k,kk,i:integer;

Begin

K:=StrToInt(Edit3.text); Kratn(n,A,k,B,kk);

if kk=0 then Form2.listBox2.items.Add('нет кратных')

else for i:= 0 to kk-1 do

Form2.listBox2.items.Add(IntToStr(B[i]));

B:=nil; end;

procedure TForm1.Button7Click(Sender: TObject);

// сортировка массива по возрастанию

var i:integer;

Begin

Sort(n,A);

for i:= 0 to n-1 do

Form2.listBox3.items.Add(IntToStr(A[i])) end;

procedure TForm1.Button8Click(Sender: TObject);

// освобождение памяти и выход

begin A:=nil; close end;

End.

Модуль формы Form2:

Unit Unit2;

Interface

Uses Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

Type

TForm2 = class(TForm)

Label1: TLabel; ListBox1: TListBox;

Label2: TLabel; Edit1: TEdit;

Label3: TLabel; Edit2: TEdit;

Label4: TLabel; Edit3: TEdit;

Label5: TLabel; Label6: TLabel;

ListBox2: TListBox; Label7: TLabel;

ListBox3: TListBox;

private { Private declarations }

public { Public declarations } end;

Var

Form2: TForm2;

Implementation

{$R *.DFM}

End.

Модуль без формы с подпрограммами

для использования из приложения:

Unit Mas_PP;

Interface

Type arr=Array of Integer;

Function Sum(n:integer;A:arr):integer;

Function Max(n:integer;A:arr):integer;

ProcedureKratn(n:integer;A:arr;k:integer;var B:arr;

var kk:integer);

Procedure Sort(n:integer;var A:arr);

Implementation

Function Sum;

Var S,i:integer;

Begin

S:=0; For i:=0 to n-1 do S:=S+A[i]; Sum:=S

End;

Function Max;

var amax,i:integer;

begin amax:=A[0];

for i:=0 to n-1 do

if A[i]>amax then amax:=A[i];

Max:=amax; end;

Procedure Kratn;

Var i:integer;

Begin kk:=0;

for i:=0 to n-1 do if A[i] mod k =0 then

Begin

SetLength(B,kk+1);

B[kk]:=A[i]; kk:=kk+1 end;

End;

Procedure Sort;

var i,k,x:integer;

Begin

for i:=0 to n-2 do

for k:=i downto 0 do

if A[k]>A[k+1] then

begin x:=A[k];A[k]:=A[k+1];A[k+1]:=x end;

End;

End.

Сценарий выполнения программы:

1. Запустить программу (Run);

2. На форме Form1 ввести в поле Edit1 значение n – количество элементов массива;

3. В поле Edit2 ввести “n” элементов массива целого типа;

4. Нажать кнопки: “Ввод массива”; “Вывод массива”; “Сумма”; “Максимальный элемент”;

5. В поле Edit3 ввести значение “k” – коэффициент кратности;

6. Нажать кнопки: “Кратность”; “Сортировка”; “Показ Form2”;

7. Просмотреть и проанализировать результаты;

8. Активизировать форму From1 и нажать кнопку “Освобождение памяти и выход”;

Ниже приведены вид формы Form1 после выполнения пунктов 2, 3, 4, 5:

 

 

и вид формы Form2 после нажатия кнопки “Показ From2”:

Задание к лабораторной работе

Для массива из n целых чисел сформировать новый массив, согласно выбранному варианту. Если “нужных” элементов нет, выдать соответствующие сообщение.

Варианты:

1. Массив из сверхпростых чисел (Сверхпростым называется число, если оно простое, и “перевертыш” этого числа тоже простое число. Например: 13, 17).

2. Массив из чисел Армстронга (153, 370, 371, 407, 9474, 54748, 92727, 548834 – числа Армстронга. 153 = ; 9474 = ; 548834 = . Натуральное число из N цифр является числом Армстронга, если сумма его цифр, возведенных в степень N, равна самому этому числу).

3. Массив чисел перевертышей, состоящих из “k” цифр.

4. Массив простых чисел, у которых последняя цифра “7”.

5. Массив совершенных чисел (Совершенное число равно сумме своих делителей кроме самого значения. Например: 6 = 1+2+3).

6. Массив чисел – “близнецов” (“Близнецы” – простые числа, разность между которыми равна 2).

7. Массив взаимно – простых чисел (Взаимно простые числа – целые числа, не имеющие общих простых делителей.

8. Массив чисел, представляющих степень двойки

9. Массив чисел, принадлежащих заданному отрезку от А до В;

10. Массив автоморфных чисел (Автоморфным называется число, равное последним разрядам квадрата этого числа. Например: 6/36, 25/625).

11.Массив чисел, не принадлежащих отрезку от А до В;

12. Массив из четных чисел, цифры которых записаны в обратном порядке (Например: , 254).

Лабораторная работа №9

Двумерные динамические массивы

Цель работы:

· изучение типа данных “динамический массив”;

· получение навыков программирования обработки одномерных и двумерных динамических массивов средствами Pascal;

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

Пример 9.1. Операции ввода и вывода двумерного массива с использованием компонент Edit, StringGrid

Дано: матрица размером . (; ). Сформировать вектор элементов, расположенных между min и max элементами матрицы.

Таблица имен переменных:

Имя Структура Тип Семантика
m n k   a   b простая простая простая   одном. массив одном. массив целый целый целый   целый   целый   Количество строк матрицы Количество столбцов матрицы Количество элементов сформированного массива Исходная матрица   Сформированный массив из элементов матрицы, расположенных между min и max элементами матрицы

Размещенные компоненты:

Компонент Свойство Значение
  Label - Label13     Edit1 – Edit5     StringGrid     Caption     Caption     ColCount RowCount FixedCols FixedRows От “Формирование одномерного массива” до “Элементы матрицы, расположенные…”   Пусто   11(количество столбцов) 11(количество строк) 1(количество фикс. столбцов) 1( количество фикс. строк)

Вид формы с компонентами:

Отметим, что максимальные размеры матрицы:

m = 10 – количество строк; n = 10 – количество столбцов;

В таблице количество строк и столбцов на 1 больше, т.к. в таблице есть фиксированная часть.

Процедура обработки щелчка на кнопке “Ввод”

(формирование двумерного массива – вводом элементов из поля Edit3, перед процедурой необходимо разместить функцию GetSubstr в разделе Implementation)

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k:integer;

Begin

m:=StrToInt(Edit1.text); n:=StrToInt(Edit2.text);

SetLength(a,m);

for i:=0 to m-1 do SetLength(a[i],n);{Ввод матрицы из Edit3}

K:=1;

for i:=0 to m-1 do

for j:=0 to n-1 do

begin a[i,j]:=StrToInt(GetSubStr(Edit3.text,k));

k:=k+1

End;end;

Процедура обработки щелчка на кнопке “Вывод”

(Вывод введенной матрицы в таблицу)

procedure TForm1.Button2Click(Sender: TObject);

var i,j:integer;

Begin

{Вывод номеров строк в 0-м столбце и столбцов в 0-й строке}

With StringGrid1 do

begin i:=0; //0-й столбец

for j:=1 to RowCount-1 do //вывести номера строк

Cells[i,j]:=IntToStr(j);

J:=0; //0-я строка

for i:=1 to ColCount-1 do //вывести номера столбцов

Cells[i,j]:=IntToStr(i);

End;

with StringGrid1 do {Вывод элементов матрицы в таблицу}

for i:=0 to m-1 do

for j:=0 to n-1 do Cells[j+1,i+1]:=IntToStr(a[i,j]);

End;

Процедура обработки щелчка на кнопке “Расчет”

(Развертывание матрицы в вектор, поиск максимального и минимального элемента этого вектора, а также индексов этих элементов, а затем формирование массива из тех элементов, которые располагаются между min и max элементами (или между max и min)).

procedure TForm1.Button3Click(Sender: TObject);

var b:vec; n1,i,j,k:integer;

bmax,bmin,nom,imax,imin:integer;

begin n1:=m*n; SetLength(b,n1); k:=-1;

for i:=0 to m-1 do

for j:=0 to n-1 do begin k:=k+1; b[k]:=a[i,j] end;

for i:=0 to n1-1 do Edit4.text:=Edit4.text+' '+IntToStr(b[i]);

K:=length(b);

Maxel(k,b,bmax,imax); minel(k,b,bmin,imin);

Label9.Caption:='Максимальный элемент

вектора='+IntToStr(bmax);

Label10.Caption:='Его номер='+IntToStr(imax);

Label11.Caption:='Минимальный

элемент вектора='+IntToStr(bmin);

Label12.Caption:='Его номер='+IntToStr(imin);

if imax>imin then begin nom:=imin+1; k:=imax-imin-1

End

else begin nom:=imax+1; k:=imin-imax-1

End;

b:=copy(b,nom,k);

for i:=0 to k-1 do

Edit5.text:=Edit5.text+' '+IntToStr(b[i]);

a:=nil; b:=nil; end;

Модуль без формы с подпрограммами

для использования из приложения

Внимание! Общие ресурсы для всех процедур Unit1 объявлены в этом модуле. Поэтому необходимо модуль UnitPP подключить к Unit1.

Uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Grids,UnitPP;

Unit UnitPP;

Interface

type vec=array of integer; matr=array of vec;

var a:matr; m,n:integer;

procedure maxel(n:integer;x:vec;var max,imax:integer);

procedure minel(n:integer;x:vec;var min,imin:integer);

Implementation

Procedure maxel;

var i:integer;

begin max:=x[0]; imax:=0;

for i:=0 to n-1 do

if x[i]>max then begin max:=x[i];imax:=i end

End;

Procedure minel;

var i:integer;

begin min:=x[0]; imin:=0;

for i:=0 to n-1 do

if x[i]<min then begin min:=x[i];imin:=i end

End;

End.

Сценарий работы программы:

1. Запустить программу (Run);

2. В поле Edit1 ввести значение m;

3. В поле Edit2 ввести значение n;

4. В поле Edit3 ввести построчно элементов матрицы, разделитель элементов пробел;

5. Нажать кнопку “Ввод”;

6. Нажать кнопку “Вывод”;

7. Нажать кнопку “Расчет”;

8. Просмотреть и проанализировать результаты;

9. Для завершения обработки матрицы нажмите “Выход”;

Результат обработки матрицы ():


Приложение 1

Задание к первой части лабораторной работы №2

Постановка задачи: пользователь вводит координаты точки (Х,У). Определить принадлежит ли данная точка заштрихованной области графика вашего варианта. Вывести сообщение.

 

 

 

 

 
 

 

 

 

 

 

Приложение 2

Задание ко второй части лабораторной работы №2

Постановка задачи:

Найдите значение функции У(а,х) вашего варианта, выведите его на экран монитора, указав ветвь, по которой шел расчет. Значение аргумента Х вводится пользователем с клавиатуры.

 

Вариант 1 Вариант 2

Y=, где Y=2/х+а3 ,где

a=

 

 

Вариант 3 Вариант 4

Y=, где Y=, где

a= a=

 

Вариант 5 Вариант 6

 

Y=3x+a2-x/(2ax), где Y=7,3-a/(1+x)+x3a, где

а= a=

 

 

Вариант 7 Вариант 8

 

Y=2/x+a3+ex, где Y=a+2x+(x2+a2)/(x+a), где

a= a=

 

 

Вариант 9 Вариант 10

 

Y=a+2,8x+(x+a)/3, где Y=a+a/(a+1)+2,5x, где

a= a=

 

 

Вариант 11 Вариант 12

Y=2,5a2+ Y=a-x2

 

a= a=

 

Вариант 13 Вариант 14

Y=, где Y=, где

a= a=

Вариант 15 Вариант 16

Y=3x+a2-x/(8a-x), где Y=7,3-a/((1+x)+x3a), где

а= a=

 

Оглавление

Введение. 3

Лабораторная работа №1. 5

Лабораторная работа № 2. 12

Лабораторная работа № 3. 18

Лабораторная работа №4. 22

Лабораторная работа №5. 25

Лабораторная работа №6. 35

Лабораторная работа №7. 40

Лабораторная работа №8. 50

Лабораторная работа №9. 58

Приложение 1. 63

Приложение 2. 65


Андрианова Елена Гельевна

Колесникова Маргарита Дмитриевна

Тихомирова Белла Владимировна

 

ПРОГРАММИРОВАНИЕ

НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

 

Лабораторный практикум

 

Редактор А.Л.Краснов

 

 

Изд. лицензия № 020456 от 04.03.97.

Подписано в печать 00.00.0000. Формат 60´84 1/16.

Бумага офсетная. Печать офсетная.

Усл. печ. л. 0,00.Усл. кр.-отт. 00,00. Уч.-изд. л. 0,00.

Тираж 000 экз. С 00.

 

 

Государственное образовательное учреждение высшего профессионального образования "Московский государственный институт радиотехники, электроники и автоматики (технический университет)"

117454, Москва, просп. Вернадского, 78

 

– Конец работы –

Используемые теги: Программирование, языках, высокого, уровня, Лабораторный, Практикум0.103

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ ЛАБОРАТОРНЫЙ ПРАКТИКУМ

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Все языки программирования делятся на языки низкого, высокого и сверхвысокого уровня
ОГЛАВЛЕНИЕ ВВЕДЕНИЕ ЗАДАНИЕ ЗАДАНИЕ... ВВЕДЕНИЕ...

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ
На сайте allrefs.net читайте: ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Российской Федерации...

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ
На сайте allrefs.net читайте: МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОГО ПРОЕКТА...

Лабораторный практикум по языку программирования Pascal
Лабораторный практикум по языку программирования Pascal... Ярославль Печатается по решению...

Применение языков программирования высокого уровня для реализации численных методов
Повышается уровень подготовки студентов вузов, которые уже с первых курсов приобщаются к использованию ЭВМ и простейших численных методов, не… В связи с этим можно констатировать, что применение ЭВМ приобрело массовый… И здесь на помощь пользователю приходят описания языков программирования высокого уровня далее ЯВУ и численные методы…

ЭЛЕКТРОННЫЙ СБОРНИК ЗАДАНИЙ ПО ДИСЦИПЛИНАМ «ИНФОРМАТИКА» И «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ»
МОСКОВСКИЙ АВТОМОБИЛЬНО ДОРОЖНЫЙ ИНСТИТУТ... ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ... КАФЕДРА...

В первом семестре рассматриваются основные конструкции языка Си и базовая технология программирования структурное программирование
В первом семестре рассматриваются основные конструкции языка Си и базовая технология программирования структурное программирование... Структурное программирование это технология создания программ позволяющая... Компиляторы и интерпретаторы Трансляторы бывают...

Понятие литературный язык. Место литературного языка среди других форм существования языка
Литературный язык это язык государственных и культурных учреждений школьного обучения радио и телевидения науки публицистики художественной... Современный литературный язык многофункционален Он используется в различных... Основные сферы использования литературного языка телевидение и кино наука и образование печать и радио...

Два объекта истории русского языка: живой язык диалектный и литературный язык
Новые общественные функции приобретает русский язык по мере сложения новой исторической общности советского народа он становится межнациональным... Современный период... Горшкова Хабургаев ИГРЯ...

Информатика Лабораторный практикум По программированию На Турбо-Паскале
РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ГИДРОМЕТЕОРОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ... В А БОЛЬШАКОВ Г И ВОРОНОВ Л А САВВАТЕЕВА...

0.053
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам