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

Int j1,j2,j3,j4;

Лабораторная работа № 2 | Лабораторная работа№ 3 | Лаборатоная работа № 6 | Лабораторная работа № 7 | Функции обработки строк типа AnsiString | Лаборатоная работа № 8 | Теоретические сведения | Сведения о гражданине ind1 | Лабораторная работа № 9 | Лабораторная работа № 10 |


float p,t,q=3;

Label1->Caption=" Четырехзначное число, равное кубу суммы своих цифр ";

Label2->Caption="";

for(j1=1;j1<=9;j1++)

{

for(j2=1;j2<=9;j2++)

{

for(j3=1;j3<=9;j3++)

{

for(j4=1;j4<=9;j4++)

{

p=(j1*1000+j2*100+j3*10+j4);

t=pow((j1+j2+j3+j4),q);

if (p==t)

{

Label2->Caption=Label2->Caption+" "+ FloatToStr(p);

}

}

}

}

}

Return;

}

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

Тема: Обработка элементов одномерного массива.

Цель работы: Описание, ввод/вывод, обработка массивов в среде Си++Builder, создание программ с использованием компонентов StringGrid, RadioButton, Listbox.

Время выполнения: 2 часа.

1 Порядок выполнения лабораторной работы:

1.1 Знакомство с теоретическим материалом, соответствующим теме лабораторной работы

1.2. Ответить на следующие вопросы:

1. Что такое массив?

2. Какие данные следует хранить в массивах?

3. Для чего могут служить одномерные, многомерные массивы?

4. Как объявляются одномерные, многомерные массивы?

5. К какому типу относится массив?

6. Что такое итерация в операторе цикла?

7. Какой алгоритм применяется для накопления суммы элементов массива?

8. Объясните работу цикла с предусловием?

9. Объясните работу цикла с постусловием?

10. Использование операторов цикла для обработки элементов массива и его особенности

11. Особенности ввода элементов массива.

12. Особенности ввода элементов массива.

13. Что такое вложенные циклы?

14. Что называется внутренним циклом?

15. Укажите правильно конструкцию оператора цикла с параметром:

a) for i=1 to 20 do <оператор>;

b) for (i=1..15; i++) < оператор>;

c) for (i=10; i> 1; i++) <оператор>;

d) for (i=’d’; i>= ‘a’; i--) <оператор>;

e) for (i=1; i> 0; i++) <оператор>;

10.Укажите правильный оператор присваивания, если float a[8][10], x[8][10]:

a) a=x;

b) x=a[1][1];

c) a=a[4][5];

d) x[1][1]=a[10][7];

e) a[5][3]=x[7][9];

11. Найдите ошибку во фрагменте программы:

a) y=1; for (x=-0.5; x< 0.19; x+=0.1) y=y+sin(x);

b) x=5; for (k=1; k<x; k++) k=k*3;

c) k=4; for (x=1; x<=16;x+=1) k=k*3;

d) k=4; for (x=16; x>= 1; x++) k=k*3;

e) k=4; for x=-5 to 5 do begin k=k*3; y=sin(x) end;

f) k=4; for (x=16; x>= 1; x--) k=k*3;

12. Определите правильно составленный фрагмент программы:

a) k=9; for (x=1; x< k; i++) k=i*3;

b) f=0; for (x=0.1;x<=1.8; x++0.2) f=f-x;

c) k=4; for (x=5; 16;x--) k=k*3;

d) k=5; i=1; for (; i<= k;) i=2*i; k=k*i;

e) for (sum=data[0], i=1; i<10; sum+=data[i++]);

13. Укажите какое значение получит S после выполнения следующих операторов:

s=0; і=4; whіle (і>1) { s=s+і; і=і-1;}

14. укажите правильно описанные массивы:

a) Var mass: array [1..20] of byte;

b) byte mass [10];

c) char mass[10];

d) float mass[1,10];

e) int mass [-10..3];

f) double mass[12][10];

15. Укажите что будет подсчитываться в данном фрагменте программы в переменной s[i]: for (і=1;i<10;i+=1) { for (j=1;i<10;i+=1) s[і]=s[і]+a[і][j]; s[і]=0;}

 

Задание

Задание для группы А: сформировать массив по рекурентной формуле соглавно варианту (табл.9) и выполнить действия над элементами массива в указанном порядке:

1. сформировать массив по рекурентной формуле;

2. определить минимальный элемент массива и его порядковый номер;

3. определить максимальный элемент массива и его порядковый номер;

4. определить сумму элементов масива;

5. определить произведение элементов масива;

6. расположить элементытмассива по убыванию

а) метод «пузырька»;

б) сортировка выбором;

в) сортировка вставкой;

г) сортировка обменом.

7. расположить элементытмассива по возрастанию

а) метод «пузырька»;

б) сортировка выбором;

в) сортировка вставкой;

г) сортировка обменом.

Группа А Таблица 9

Вариант Порядок выполнения Математическое выражение Исходные данные
  1,7б,4,2,3,5,6а x1=0,53; x2=0,69; i=3,4,…,30
  1,2,3,4,5,6б,7а a1=9,385; a2=5,03; k=3,4,…,25
  1,7в,6г,2,3,4,5 b1=2,75; b2=3,01; b3=1,56; j=4,5,…,25
  1,3,5,6г,4,7а,2 z1=0,05; z2=0,17; m=3,4,…,25
  1,5,3,2,7г,4,6а fi=3,33; f2=0,56; i=3,4,…,15
  1,3,5,7б,2,4,6в c1=1,17; c2=-0,85; n=3,4,…,15
  1,3,5,6а,2,4,7в d1=0,35; i=1,2,…,15
  1,2,6б,4,3,5,7а q1=-0,75; q2=0,05; k=2,3,…,15
  1,4,7г,2,3,6б,5 s1=1,05; s2=1,4; i=3,4,…,15
  1,7б,2,5,3,4,6г x1=0,20; x2=0,97; i=3,4,…,15
  1,6в,2,5,4,7а,3 z1=1,35; z2=2,56; k=3,4,5,…,15
  1,7б,2,3,4,5,6г s1=1,07; s2=1,6; i=3,4,…,15
  1,4,6б,2,3,5,7г x1=3,02; x2=3,42; i=3,4,5,…,15
  1,7в,6б,4,3,2,5 y1=0,21; y2=0,71; i=3,4,5,…,15
  1,4,5,7б,3,6в,2 x1=2,15; x2=3,75; n=2,3,…,15
  1,7а,4,6г,2,3,5 x1=1,05; x2=1,75; k=3,4,5,…,14
  1,6г,3,5,7в,4,2 q1=1,08; q2=2,05; k=2,3,4,…,15
  1,7а,5,6в,4,2,3 b1=2,85; b2=3,25; j=3,4,5,…,15
  1,6в,3,5,7г,2,4 z1 =2,17; z2=3,02; z3=1,58; k=4,5,…,15
  1,7б,2,3,5,4,6в m1=1,75; m2=1,4; k=2,3,…,12

 

Группа В Таблица 10

Вари ант Массив Действия Условие
  X(10) Вычислить сумму и количество элементов массива X. 0<=xi<=1
  A(20) Вычислить среднее арифметическое значение элемента массива A. ai>0
  X(20) Переписать элементы массива массив X в Y и подсчитать их количество. -1<=xi<=1
  B(30) Определить максимальный элемент массива В и его порядковый номер. xi>0
  C(20) Вычислить минимальный элемент массива С и его номер. xi<0
  D(30) Найти максимальный и минимальный элементы массива D и поменять их местами.  
  Y(20) Вычислить среднее геометрическое элемента массива Y. yi>0
  Z(20) Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z.  
  N(50) Определить сумму элементов массива N, кратных 3 ni/3*3=ni
  X(N) Вычислить сумму и количество элементов массива X. xi>0, N<=20
  A(N) Найти среднее геометрическое элементов массива A. ai>0, N<=10
  X(N) Переписать в массив Y подряд положительные элементы массива X. xi>0, N<=20
  X(N) Переписать подряд в массив Y положительные и в массив Z отрицательные элементы массива X. N<=20
  B(K) Определить максимальный элемент массива B и его порядковый номер. xi<0, K<=40
  C(K) Определить минимальный элемент массива C и его порядковый номер. K<=20 -1<=xi<=1 K<=20
  D(40) Найти максимальный и минимальный элементы массива D и поменять их местами.  
  C(30) Вычислить минимальный элемент массива С и его номер. xi<0
  X(N) Переписать в массив Y подряд положительные элементы массива X. xi>0, N<=15
  Z(20) Расположить в массиве R сначала отрицательные, а затем положительные элементы массива Z.  
  B(20) Определить максимальный элемент массива В и его порядковый номер. xi>0

 

Примеры

Пример 2.1 Используя компоненту Label выведем названия месяцев в отсортированном виде (рис. 17 - результат вывода элементов массива).

Для вывода элементов массива необходимо воспользоваться оператором цикла с параметров for, в этом случае параметр-счетчик можно использовать как индекс элементов массива.

Решение задачи: 1. учитывая, что в году 12 месяцев, объявим количество месяцев как константу, т.е.

const n=12;

2. Названия месяцев – это одномерный массив из строк, поэтому его можно объявить как:

const AnsiString month[]={"январь", "февраль", "март", "апрель", "май", "июнь", "июль","август", "сентябрь", "октябрь", "ноябрь", "декабрь"};

3. Функция на щелчок компоненты Button1:

void __fastcall TForm1::Button1Click(Sender: TObject);

{ const n=12;

AnsiString s;// Название месяцев

int i; //индекс,номера элементов массива

for (i=0; i<n; i++) //цикл с параметром

s=s+IntToStr(i+1) + " "+ month[i]+"\n";

Label1->Caption=s; // вывод списка

}

Пример 2.2 используя компонент StringGrid для ввода данных, вычислить сумму и среднее арифметическое элментов одномерного массива.

Решение задачи: 1. Для ввода массива удобно использовать компонент StringGrid. Значок компонента StringGrid находится на вкладке Additional.

 

Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов. Таблица делится на две области: фиксированную и рабочую. Первая область используется для описания заголовков стоблцов и строк таблицы и управления вручную их шириной. Во многих случаях эта область занимает левую колонку и верхнюю строку. Но с помощью свойств FixedCols и FixedRows можно изменить количество фиксированных колонок и строк. Если их значения равны 0, то фиксированных областей не будет (рис.19).

В таблице11 перечислены некоторые свойства компоненты StringGrid.

Свойства компонента StringGrid Таблица 11

Свойство Определяет
Name Имя компонента. Используется в программе для доступа к свойствам компонента
ColCount Количество колонок таблицы
RowCount Количество строк таблицы
Cells Соответствующий таблице двумерный массив. Ячейка таблицы, находящаяся на пересечении столбца номер col и строки номер row определяется элементом cells [col, row]. Однако нужно учитывать, что колонки таблицы и строки, нумеруются с нуля.
FixedCols Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и при горизонтальной прокрутке таблицы остаются на месте
FixedRows Количество зафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте
Options-> goEditing Признак допустимости редактирования содержимого ячеек таблицы. True — редактирование разрешено, False — запрещено
Options-> goTab Разрешает (True) или запрещает (False) использование клавиши <ТаЬ> для перемещения курсора в следующую ячейку таблицы
Options-> GoAlways-ShowEditor Признак нахождения компонента в режиме редактирования. Если значение свойства False, то для того, чтобы в ячейке появился курсор, надо начать набирать текст, нажать клавишу <F2> или сделать щелчок мышью
DefaultColWidth Ширину колонок таблицы
DefaultRowHeight Высоту строк таблицы
GridLineWidth Ширину линий, ограничивающих ячейки таблицы
Left Расстояние от левой границы поля таблицы до левой границы формы
Top Расстояние от верхней границы поля таблицы до верхней границы формы
Height Высоту поля таблицы
Width Ширину поля таблицы
Font Шрифт, используемый для отображения содержимого ячеек таблицы
ParentFont Признак наследования характеристик шрифта формы

После добавления компоненты StringGrid к форме нужно выполнить его настройку в соответствии с таблицей 12:

Таблица 12

Свойства компоненты Значение
ColCount 5 (число столбцов таблицы)
FixedCols 0 (объявление количества зафиксированных столбцов – обратите внимание на рисунок-24а)
RowCount 1 (число строк таблицы)
DefaultRowHeight 24 (высота строки по умолчанию)
Height  
DefaultColWidth 64 (ширина столбца по умлочанию)
Width  
Options->goEditing True (разрешено редактирование ячейки таблицы)
Options-> AlwaysShowEditing True (разрешено редактирование ячейки, имющей фокус ввода)
Options->goTabs True (разрешено обходить ячейки клавишей Tab (Shift+Nab))

 

2. Устанавливаем на форме кнопку BitBtn1, задаем свойство Kind равной bkOK, Значок этого компонента как и StringGrid находится во вкладке Additional палитры компонентов и используется как командная кнопка.

3. Основная работа выполняется при щелчке на кнопке BitBtn1 (событие OnClik). Вначале объявляем все переменные - исходные данные и результаты: a[5] - вводимый массив, summa- сумма элементов массива, sred - среднее арифметическое элементов массива, i – индекс.

float a[5]; float summa, sred; int i;

4. Ввод элементов массива: считаем, что если ячейка пустая, то соответствующий ей элемент массива равен нулю

for (i=0;i <n;i++)

if (StringGrid1->Cells[i][0]=="") a[i]=0;

else a[i]=StrToFloat(StringGrid1->Cells[i][0]);

5. Обработка массива:

summa=0; // вначале сумматор или накопитель суммы равен нулю

for (i=0;i<5;i++)// оператор цикла с параметром, перебирает элементы массивы с 0 по 4

summa=summa+a[i]; // данные в накопителе суммы увеличиваются на значение a[i]

sred=summa/5; //опоеделяем среднее арифметическое 5 цифр

5. Результаты представляем в компоненте Label

Label2->Caption= “сумма элементов: ” + FloatToStr(summa)+”\n”+

“арифметическое среднее: ” + FloatToStr(sred);

6. Результаты вычислений приведены на рис.19. б.

Пример 2.3. Для массива, заданного рекурентной формулой :

1. сформировать массив по рекурентной формуле;

2. определить минимальный элемент массива и его порядковый номер;

3. определить максимальный элемент массива и его порядковый номер;

4. среднеарифметическое элементов массива;

5. количество элементов принадлежащих интервалу [2;5].

Здесь: a0= 4.3; a1=1.8; i = 2,3,…24.

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

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <stdlib.h>

#include <math.h>

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int i,n;

float a[25];

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)

{

Edit1->SetFocus();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

try

{n=StrToInt(Edit1->Text);

a[0]= StrToFloat(Edit2->Text);

a[1]= StrToFloat(Edit3->Text);

}

catch (EConvertError&)

{

ShowMessage("Вы ввели ошибочное число, повторите ввод");

}

/* массив құру*/

for (i=2; i<n;i++)

a[i]= a[i-1]+ 2/a[i-2];

/* массивты шығару*/

for (i=0; i<n;i++)

Memo1->Lines->Add("a["+IntToStr(i)+"]= "+FloatToStrF(a[i],ffFixed,5,2)+" ");

}

 

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{ int max, min,k;

float sum=0.0;

if (CheckBox1->Checked == True)

{for (i=max=0;i<n;i++) {

if (a[i]>a[max]) max=i;

}

Edit4->Text=FloatToStrF(a[max],ffFixed,5,2);

}

if (CheckBox2->Checked == True)

{for (i=min=0;i<n;i++) {

if (a[i]<a[min]) min=i; }

Edit5->Text=FloatToStrF(a[min],ffFixed,5,2);

}

if (CheckBox3->Checked == True)

{for (i=0;i<n;i++)

{sum += a[i];}

sum = sum/n;

Edit6->Text=FloatToStrF(sum,ffFixed,5,2);

}

if (CheckBox4->Checked == True)

{for (i=k=0;i<n;i++) {

if (2<a[i] && a[i]< 5) k++; }

Edit7->Text=IntToStr(k);

}

}

 

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Edit1->Clear();

Edit2->Clear();

Edit3->Clear();

Edit4->Clear();

Edit5->Clear();

Edit6->Clear();

Edit7->Clear();

Memo1->Clear();

}

//---------------------------------------------------------------------------

 

Рисунок 20. Результаты вычислений

 


Дата добавления: 2015-11-04; просмотров: 80 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Лабораторная работа№ 4| Сортировка методом прямого выбора

mybiblioteka.su - 2015-2024 год. (0.034 сек.)