Практическая работа "Работа со множествами"
методическая разработка по теме

Представлена практическая работа со множествами в C++ Builder. Есть базовый набор цветов и три садовода, выращивающих цветы (четыре множества). задача - определить, какие цветы выращивают все садоводы, каких нет ни у кого, какие цветы выращивает только один садовод. Множеств апредставлены массивами строк.

Скачать:

ВложениеРазмер
Microsoft Office document icon prakticheskaya_rabota_rabota_so_mnozhestvami.doc878 КБ

Предварительный просмотр:

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

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, то следует попытаться разбить слова так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную.

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

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

Методические указания

к выполнению практической работы

«Работа со множествами»

                                                           Разработала

                                                           Мастер

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

                                                           Шапкина Л.М.


По теме: методические разработки, презентации и конспекты

Pascal. Тип данных - множество

Материалы для изучения тип данных множество в курсе изучения языка программирования Pascal....

Методическая разработка темы "Теория множеств" для студентов 2 курса СПО

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

Дополнительный материал к занятию. Презентация "Множества. Отношения. Операции над множествами. Диаграммы Эйлера-Венна".

1. Определение.2. Примеры множеств.3.  Диаграмма Эйлера-Венна.4. Таблица отношений.5. Примеры, иллюстрируемые диаграммой Эйлера-Венна.6. Диаграммы Эйлера-Венна.7. Примеры, иллюстрируемые диаграмм...

Множество. Элементы множества

Методическая разработка занятия по  информатике  с применением ИКТ...

Практическая работа для студентов 2 курса СПО по разделу "Теория множеств.Математическая логика"

Данная практическая работа направлена на проверку усвоенных знаний студентами по данному разделу...

Элементы и множества. Задание множеств. Операции над множествами и их свойства. Отношения и их свойства.

Элементы и множества. Задание множеств. Операции над множествами и их свойства. Отношения и их свойства....

Презентация по ЕН.01 Математика. Тема: "Множества. Операции над множествами"

Презентация разработанна по ЕН.01 Математика для студентов специальности 54.02.01 Дизайн (по отраслям)...