|
Практическая работа «Работа со множествами»
Санкт-Петербургский колледж информационных технологий
Методические указания к выполнению практической работы «Работа со множествами»
Разработала
Мастер
производственного обучения
Шапкина Л.М.
Практическая работа «Работа со множествами»
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, то следует попытаться разбить слова так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную.
Вероятность правильного разбиения увеличивается, если предварительно воспользоваться хотя бы неполным списком приставок, содержащих гласные, и попытаться прежде всего выделить из слова такую приставку. |
|
|