Главная страница


Практическая работа «Работа со множествами»



Скачать 82.79 Kb.
НазваниеПрактическая работа «Работа со множествами»
Шапкина Л.М
Дата19.02.2016
Размер82.79 Kb.
ТипПрактическая работа



Санкт-Петербургский колледж информационных технологий


Методические указания
к выполнению практической работы
«Работа со множествами»

Разработала

Мастер

производственного обучения

Шапкина Л.М.



Практическая работа «Работа со множествами»

1. Цель работы:

Изучить свойства компонента TImage.

Освоить операции с массивами строк в С++.


Написать программу с использованием массивов строк.

2. Темы для предварительной проработки

1). Среда разработки C++ Builder

2). Компоненты C++ Builder

3) Массивы строк в С++.

4) Операции с массивами строк в С++.



Пример использования массивов строк

Массивы строк обычно используются для обработки таблиц данных. Рассмотрим, на­пример, упрощенную базу данных служащих, в которой хранится имя, номер телефона, количество часов, отработанных служащим за отчетный период, и размер почасового оклада для каждого служащего. Чтобы создать такую программу для коллектива, со­стоящего из десяти служащих, определим четыре массива (из них первые два будут мас­сивами строк).

char name[10] [80]; // Массив имен служащих,

char phone[10][20]; // Массив телефонных номеров служащих,

float hours[10]; // Массив часов, отработанных за неделю,

float wage[10]; // Массив окладов.
Чтобы ввести информацию о каждом служащем, воспользуемся следующей функцией

enter().

// Функция ввода информации в базу данных.

void enter ()

{

int i;

char temp[80];

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

cout << "Введите фамилию: ";

cin >> name[i];

cout << "Введите номер телефона: ";

cin >> phone[i];

cout << "Введите количество отработанных часов: ";

cin >> hours[i];

cout << "Введите оклад: ";

cin >> wage[i]; }

На основании введенных данных можно составить отчет, вычислив заработную пла­ту, которая причитается каждому служащему. Для этого воспользуемся следующей функцией report ().

// Отображение отчета, void report()

int i;

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

cout << name[i] << “ ” << phone[i] << '\n';

cout << "Заработная плата за неделю: " << wage[i] * hours [i];

cout << '\n'; }

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

Простая программа ведения базы данных служащих.

#include

using namespace std;

char name [10] [80]; // Массив имен служащих.

char phone [10] [20] ; // Массив телефонных номеров служащих.

char hours[10]; // Массив часов, отработанных за неделю.

char wage[10]; // Массив окладов.

int menu ();

voidenter(), report();

int main() {

int choice;

do {

choice = menu(); // Получаем команду, выбранную пользователем,

switch(choice) {

case 0: break;

case 1: enter (); break;

case 2: report () ; break;

default: cout << "Попробуйте еще раз.\n\n"; } } while(choice != 0) ;

return 0; }

// Функция возвращает команду, выбранную пользователем.

int menu()

{

int choice;

cout << "0. Выход из программы\n";

cout << "1. Ввод информации\n";

cout << "2. Генерирование отчета\n";

cout << "\nВыберите команду: ";

cin >> choice;

return choice;

}

// Функция ввода информации в базу данных, void enter ()

{

int i ;

char temp[80];

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

cout << "Введите фамилию: ";

cin >> name[i];

cout << "Введите номер телефона: ";

cin >> phone [i];

cout << "Введите количество отработанных часов: ";

cin >> hours [i];

cout << "Введите оклад: ";

cin >> wage [i]; } }

// Отображение отчета.

void report ()

{

int i;

for(i=0; i<10; i++) {cout << name[i] << “ “ << phone[i] << '\n';

cout << "Заработная плата за неделю: "<< wage[i] * hours [i];

cout << '\n'; } }

Пример использования массива строк для работы со множествами


Составим программу, демонстрирующую работу со множествами.

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


Unit1.cpp

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

#include

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int m=-1;

const n=6;

char s[n][15]={"флокс","роза","пион","настурция",

"наперстянка","\0"};

char s1[n][15]={"\0"};

char s2[n][15]={"\0"};

char s3[n][15]={"\0"};
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Image1DblClick(TObject *Sender)

{

switch (m){

case 0: Image6->Visible=true; break;

case 1: Image11->Visible=true; break;

case 2: Image16->Visible=true; break;

}

}

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

void __fastcall TForm1::Image2DblClick(TObject *Sender)

{

switch (m){

case 0: Image7->Visible=true; break;

case 1: Image12->Visible=true; break;

case 2: Image17->Visible=true; break;

}

}

//---------------------------------------------------------------------------
void __fastcall TForm1::Image3DblClick(TObject *Sender)

{

switch (m){

case 0: Image8->Visible=true; break;

case 1: Image13->Visible=true; break;

case 2: Image18->Visible=true; break;

}

}

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

void __fastcall TForm1::Image4DblClick(TObject *Sender)

{

switch (m){

case 0: Image9->Visible=true; break;

case 1: Image14->Visible=true; break;

case 2: Image19->Visible=true; break;

}

}

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

void __fastcall TForm1::Image5DblClick(TObject *Sender)

{

switch (m){

case 0: Image10->Visible=true; break;

case 1: Image15->Visible=true; break;

case 2: Image20->Visible=true; break;

}

}

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

void __fastcall TForm1::ComboBox1Click(TObject *Sender)

{

m= ComboBox1->ItemIndex;

//Label1->Caption= String(n);

}

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

void __fastcall TForm1::Image6Click(TObject *Sender)

{

switch (m){

case 0: Image6->Visible=false; break;

case 1: Image11->Visible=false; break;

case 2: Image16->Visible=false; break;

}

}

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

void __fastcall TForm1::Image7Click(TObject *Sender)

{

switch (m){

case 0: Image7->Visible=false; break;

case 1: Image12->Visible=false; break;

case 2: Image17->Visible=false; break;

}

}

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

void __fastcall TForm1::Image8Click(TObject *Sender)

{

switch (m){

case 0: Image8->Visible=false; break;

case 1: Image13->Visible=false; break;

case 2: Image18->Visible=false; break;

}

}

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

void __fastcall TForm1::Image9Click(TObject *Sender)

{

switch (m){

case 0: Image9->Visible=false; break;

case 1: Image14->Visible=false; break;

case 2: Image19->Visible=false; break;

}

}

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

void __fastcall TForm1::Image10Click(TObject *Sender)

{

switch (m){

case 0: Image10->Visible=false; break;

case 1: Image15->Visible=false; break;

case 2: Image20->Visible=false; break;

}

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int i, j, p1, p2, p3;

char ss[300]="";

for(i=0; i
if (Image6->Visible==true) strcpy(s1[0],s[0]);

if (Image7->Visible==true) strcpy(s1[1],s[1]);

if (Image8->Visible==true) strcpy(s1[2],s[2]);

if (Image9->Visible==true) strcpy(s1[3],s[3]);

if (Image10->Visible==true) strcpy(s1[4],s[4]);

for(i=0; i
if (Image11->Visible==true) strcpy(s2[0],s[0]);

if (Image12->Visible==true) strcpy(s2[1],s[1]);

if (Image13->Visible==true) strcpy(s2[2],s[2]);

if (Image14->Visible==true) strcpy(s2[3],s[3]);

if (Image15->Visible==true) strcpy(s2[4],s[4]);

for(i=0; i
if (Image16->Visible==true) strcpy(s3[0],s[0]);

if (Image17->Visible==true) strcpy(s3[1],s[1]);

if (Image18->Visible==true) strcpy(s3[2],s[2]);

if (Image19->Visible==true) strcpy(s3[3],s[3]);

if (Image20->Visible==true) strcpy(s3[4],s[4]);
for (i=0; i
p1=0; for (j=0; j
p2=0; for (j=0; j
p3=0; for (j=0; j
if(p1 && p2 && p3){strcat(ss,s[i]); strcat(ss," ");}

}

Label1->Caption=ss;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int i, j, p1, p2, p3;

char ss[300]="";

for(i=0; i
if (Image6->Visible==true) strcpy(s1[0],s[0]);

if (Image7->Visible==true) strcpy(s1[1],s[1]);

if (Image8->Visible==true) strcpy(s1[2],s[2]);

if (Image9->Visible==true) strcpy(s1[3],s[3]);

if (Image10->Visible==true) strcpy(s1[4],s[4]);

for(i=0; i
if (Image11->Visible==true) strcpy(s2[0],s[0]);

if (Image12->Visible==true) strcpy(s2[1],s[1]);

if (Image13->Visible==true) strcpy(s2[2],s[2]);

if (Image14->Visible==true) strcpy(s2[3],s[3]);

if (Image15->Visible==true) strcpy(s2[4],s[4]);

for(i=0; i
if (Image16->Visible==true) strcpy(s3[0],s[0]);

if (Image17->Visible==true) strcpy(s3[1],s[1]);

if (Image18->Visible==true) strcpy(s3[2],s[2]);

if (Image19->Visible==true) strcpy(s3[3],s[3]);

if (Image20->Visible==true) strcpy(s3[4],s[4]);

for (i=0; i
p1=0; for (j=0; j
p2=0; for (j=0; j
p3=0; for (j=0; j
if((p1&&(!p2&&!p3))||(p2&&(!p1&&!p3))||

(p3&&(!p1&&!p2))){strcat(ss,s[i]); strcat(ss," ");}

}

Label8->Caption=ss;
}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

int i, j, p1, p2, p3;

char ss[300]="";

for(i=0; i
if (Image6->Visible==true) strcpy(s1[0],s[0]);

if (Image7->Visible==true) strcpy(s1[1],s[1]);

if (Image8->Visible==true) strcpy(s1[2],s[2]);

if (Image9->Visible==true) strcpy(s1[3],s[3]);

if (Image10->Visible==true) strcpy(s1[4],s[4]);

for(i=0; i
if (Image11->Visible==true) strcpy(s2[0],s[0]);

if (Image12->Visible==true) strcpy(s2[1],s[1]);

if (Image13->Visible==true) strcpy(s2[2],s[2]);

if (Image14->Visible==true) strcpy(s2[3],s[3]);

if (Image15->Visible==true) strcpy(s2[4],s[4]);

for(i=0; i
if (Image16->Visible==true) strcpy(s3[0],s[0]);

if (Image17->Visible==true) strcpy(s3[1],s[1]);

if (Image18->Visible==true) strcpy(s3[2],s[2]);

if (Image19->Visible==true) strcpy(s3[3],s[3]);

if (Image20->Visible==true) strcpy(s3[4],s[4]);

for (i=0; i
p1=0; for (j=0; j
p2=0; for (j=0; j
p3=0; for (j=0; j
if(!(p1 || p2 || p3)) {strcat(ss,s[i]); strcat(ss," ");}

}

Label9->Caption=ss;

}

//---------------------------------------------------------------------------
Unit1.h

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

#ifndef Unit1H

#define Unit1H

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

#include

#include

#include

#include

#include

#include

#include

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Image1;

TImage *Image2;

TImage *Image3;

TImage *Image4;

TImage *Image5;

TComboBox *ComboBox1;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label6;

TLabel *Label7;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TImage *Image6;

TImage *Image7;

TImage *Image8;

TImage *Image9;

TImage *Image10;

TImage *Image11;

TImage *Image12;

TImage *Image14;

TImage *Image15;

TImage *Image16;

TImage *Image17;

TImage *Image18;

TImage *Image19;

TImage *Image20;

TImage *Image13;

TLabel *Label8;

TLabel *Label9;

void __fastcall Image1DblClick(TObject *Sender);

void __fastcall Image2DblClick(TObject *Sender);

void __fastcall Image3DblClick(TObject *Sender);

void __fastcall Image4DblClick(TObject *Sender);

void __fastcall Image5DblClick(TObject *Sender);

void __fastcall ComboBox1Click(TObject *Sender);

void __fastcall Image6Click(TObject *Sender);

void __fastcall Image7Click(TObject *Sender);

void __fastcall Image8Click(TObject *Sender);

void __fastcall Image9Click(TObject *Sender);

void __fastcall Image10Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);
private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif

Задания для самостоятельного выполнения
1. Дан текст из строчных латинских букв, за которым следует точка. Напечатать:
- первые вхождения букв в текст, сохраняя их взаимный исходный   порядок;
- все буквы, входящие в текст не менее двух раз;
- все буквы, входящие в текст по одному разу.

2. Дан текст, за которым следует точка. В алфавитном порядке напечатать все строчные русские гласные буквы (а, е, и, о, у, ы, э, ю, я), входящие в этот текст.

3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке:
- все гласные буквы, которые входят в каждое слово;
- все согласные буквы, которые не входят ни в одно слово;
- все звонкие согласные буквы, которые входят хотя бы в одно слово;
- все глухие согласные буквы, которые не входят хотя бы в одно слово;
- все согласные буквы, которые входят только в одно слово;
- все глухие согласные буквы, которые не входят только в одно слово;
- все звонкие согласные буквы, которые входят более чем в одно слово;
- все гласные буквы, которые не входят более чем в одно слово;
- все звонкие согласные буквы, которые входят в каждое нечетное    слово и не входят ни в одно четное слово;
- все глухие согласные буквы, которые входят в каждое нечетное слово и не входят хотя бы в одно четное слово. (гласные буквы - а, е, и, о, у, ы, э, ю, я; звонкие согласные буквы - б, в, г, д, ж, з, л, м, н, р; глухие согласные буквы - к, п, с, т, ф, х, ц, ч, ш, щ.)

4. Дан некоторый текст, за которым следует точка. Определить, является ли этот текст правильной записью “формулы”:
< формула > = < терм > | (< формула > < знак > < формула >)
знак = +|-|*
< терм > = < имя > | < целое >
< имя > = < буква > | < имя > < буква > | < имя > < цифра >
< целое > = < цифра > | < целое > < цифра >
< буква > = a| b| c| d| e| f| g
< цифра > = 0| 1| 2| 3| 4| 5| 6| 7| 8| 9

5. Дан текст, являющийся русскими словами. Выполнить разделение его на части для переноса.

Далее правила переноса русских слов.
a) Две идущие подряд гласные можно разделить, если первой из них предшествует согласная, а за второй идет хотя бы одна буква (буква й при этом рассматривается вместе с предшествующей гласной как единое целое).
b) Две идущие подряд согласные можно разделить, если первой из них предшествует гласная, а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная (буквы ъ, ь вместе с предшествующей согласной рассматриваются как единое целое).
c) Если не удается применить пункты a, b, то следует попытаться разбить слова так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную.

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