Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


if pos(decimalseparator,Cells[Col,Row])<>0 then

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

Обработка одномерных массивов

 

Цель работы: формирование первичных умений в разработке простых циклических программ с использованием массивов.

 

Что нужно знать для выполнения работы

1. Структуру цикла, назначение и порядок следования его отдельных частей.

2. Структуры: цикл-пока и цикл-повторить.

3. Операторы цикла for …to (downto) … do.

4. Описание и использование массивов.

 

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу нахождения суммы элементов данного массива а, состоящего из n элементов.

Решение. Основная часть цикла – добавление очередного элемента к накапливаемой сумме. Для нахождения суммы всех элементов достаточно повторить цикл, изменяя номер элемента массива от 1 до n с шагом 1 (рис. 4.1).

На данной схеме вывод исходных данных и вывод результата записаны в одном блоке, так как алгоритм вывода элементов массива аналогичен циклу ввода.

 

 

 
 

 

 


Рис. 4.1. Схема алгоритма программы

 

Текст программы

 

program lr4_1_1;

{ Сумма элементов массива. }

{ $APPTYPE CONSOLE }

Uses

SysUtils;

Const

max n =100;{ Максимальное количество элементов массива }

Var

n, i:integer;

s:real;

a: array [1..maxn] of real;

Begin

write('n= ');

readln(n);{ Ввод реального количества элементов массива }

writeln('Vvedite elementi massiva a ');

for i:=1 to n do

Begin

write('a [ ', i, ' ] = ');

readln(a [ i ]);

end;

s:=0;

for i:=1 to n do

s:= s + a [ i ];

writeln('Исходный массив a, состоящий из', n:4, ' элементов');

for i:=1 to n do

write(a [ i ]:8:2);

writeln;

writeln('S = ',s:8:2);

readln;

end.

 

Как и в лабораторной работе 3 в данной работе можно считать заданиями повышенной сложности (второго уровня) задания, выполненные с использованием компонентов Delphi.

Для отображения элементов массивов целесообразно использовать компоненты StringGrid. Для ввода элементов массива в ячейки таблицы необходимо свойство Options(goEditing) положить равным true.

Для рассмотренного примера форма приложения может быть как показано на рис. 4.1.

 

Рис. 4.1 Форма приложения примера 4_1

 

Текст Unit-a

 

unit Unit1;

//нахождение суммы элементов массива

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Grids, Buttons;

 

Type

TForm1 = class(TForm)

lbl1: TLabel;

lbledt1: TLabeledEdit;

btn1: TButton;

sd: TStringGrid;

btn2: TBitBtn;

lbl2: TLabel;

procedure lbledt1KeyPress(Sender: TObject; var Key: Char);

procedure btn1Click(Sender: TObject);

procedure sdKeyPress(Sender: TObject; var Key: Char);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

Form1: TForm1;

Implementation

{$R *.dfm}

Var

n:Integer;

a:array[0..10] of Real;

s:Real;

procedure TForm1.lbledt1KeyPress(Sender: TObject; var Key: Char);

//Разрешено вводить только цифры и нажимать клавиши

//Backspace и Enter

Var

i:Integer;

Begin

Case Key of

'0'..'9',#8:;

#13: begin

//Задание свойств компонента StringGrid

sd.ColCount:=strtoint(lbledt1.Text);

n:=sd.ColCount;

sd.Options:=sd.Options+[goEditing];

sd.Width:=n*(sd.DefaultColWidth+2);

for i:=0 to n-1 do

sd.Cells[i,0]:='Элемент '+inttostr(i);

sd.SetFocus;

End

Else

key:=#0;

end;

end;

 

procedure TForm1.btn1Click(Sender: TObject);

Var

i:Integer;

Begin

f o r i:=0 to n-1 do

a[i]:= strtofloat(sd.Cells[i,1]);

s:=0;

fo r i:=0 to n-1 do

s:=s+a[i];

sd.ColCount:=sd.ColCount+1;

sd.Width:=(n+1)*(sd.DefaultColWidth+2);

sd.Cells[n,0]:='Сумма ';

sd.Cells[n,1]:=FloatToStrF(s,ffFixed,8,3);

end;

 

procedure TForm1.sdKeyPress(Sender: TObject; var Key: Char);

//обработка нажатых клавиш в ячейках StringGrid

Begin

With sd do

Case Key of

'0'..'9',#8:;

'-': begin

if (Cells[Col,Row]='') then

key:='-'

Else

if (Cells[Col,Row]<>'') and ((copy(Cells[Col,Row],length(Cells[Col,Row]),1)='E') or

(copy(Cells[Col,Row],length(Cells[Col,Row]),1)='e'))then

key:='-'

Else

key:=#0;

end;

'+': begin

if (Cells[Col,Row]='') then

key:='+'

Else

if (Cells[Col,Row]<>'') and ((copy(Cells[Col,Row],length(Cells[Col,Row]),1)='E') or

(copy(Cells[Col,Row],length(Cells[Col,Row]),1)='e')) then

key:='+'

Else

key:=#0;

end;

',','.': begin

key:=decimalseparator;

if pos(decimalseparator,Cells[Col,Row])<>0 then

key:=#0

end;

'E','e': begin

key:='E';

if ((pos('E',Cells[Col,Row])<>0) or (pos('e',Cells[Col,Row])<>0))

or ((length(Cells[Col,Row])=1)

and ((copy(Cells[Col,Row],1,1)='-') or

(copy(Cells[Col,Row],1,1)='+'))) or

((length(Cells[Col,Row])=0)

And

((pos('E',Cells[Col,Row])=0) or (pos('e',Cells[Col,Row])=0))) then

key:=#0;

e n d;

#13: if col<colcount-1 then

col:=col+1;

 

Else

key:=#0;

end;

 

end;

 

end.

 



<== предыдущая лекция | следующая лекция ==>
Створення текстових файлів | 
Поделиться с друзьями:


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 294 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2557 - | 2402 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.014 с.