|
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 | | | Сортировка методом прямого выбора |