Задача 1

Задача 2

Задача 3

Задача 4

Задача 5

Задача 6

Задача 7

Задача 8
Классы

Условие задачи

Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность

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

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

Алгоритм работы

В программе описан класс с именем Massiv, в нем 4 параметра (n – количество строк, *a – указатель на массив строк, min – максимальное количество элементов в строках массива, *b – указатель на длину одномерных массивов) и 7 методов – функций.

class Massiv
{
 int *a,*b,n,min;
 public:
 void Sozd();
 void Vvod_Sl();
 void Form(int n1, int n2);
 void Form_2(int n3, int n4);
 void Print();
 void Print_2(int number);
 void Print_3(int rec, int field);
};
В основной части программы объявлены объекты a, b типа  Massiv.
При запуске программы предоставляется меню из 7 пунктов
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
Описание функций:
1. void Sozd();
void Massiv :: Sozd()
{
int m;
 cout<<"kolvo strok?";cin>>n;
 int min=0;
 for (int i=0;i<n;i++)
 {
 cout<<"kolvo elementov v "<< i+1 <<" stroke?";cin>>m;
 *(b+i)=m;
 if (min<m) min=m;
 }
 a=(int*)malloc(sizeof(int)*n*min);
}
Создает массив из строк одномерных массивов фиксированной длины.
 
2. void Vvod_Sl();
void Massiv::Vvod_Sl()
{
 Sozd();
 for(int i=0;i<n;i++)
 for (int j=0; j<*(b+i); j++)
 {
 *(a+i+j)=-20+random(41);
 }
}
Формирует элементы одномерных массивов.
 
3. void Print();
void Massiv :: Print()
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
Выводит все строки массива на экран.
 
4. void Print_2(int number);
void Massiv :: Print_2(int number)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if (i==number) cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
Печать конкретной строки, по заданному индексу.
 
5. void Print_3(int rec, int field);
void Massiv :: Print_3(int rec, int field)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if ((i==rec)&&(j==field)) cout<<"Danii element= "<<setw(6)<<*(a+i+j);
 else "Massiv s takimi dannimi ne naiden!";
 }
 cout<<endl;
 }
}
Вывод на экран конкретного элемента конкретной строки (rec – номер строки выводимого массива, field – номер элемента в строке).
 
6. void Form(int n1, int n2);
void Massiv :: Form(int n1,int n2)
{
 int m1,m2,k,j,l,p;
 int c[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n1);
 m2=*(b+n2);
 // *(b+n1)=m1+m2;
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 if(l<m1)
 {c[l]=*(a+n1+l);
 cout<<setw(6)<<c[l];
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n2+k);
 cout<<setw(6)<<c[l];
 k++;
 }
}
 
Значениям дополнительных переменных m1 и m2 присваиваются длины строк, которые необходимо сцепить соответственно. Их сумма есть длина нового массива.
 
7. void Form_2(int n3, int n4);
void Massiv :: Form_2(int n3,int n4)
{
 int m1,m2,k,j,l,p,l1;
 int c[20],f[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n3);
 m2=*(b+n4);
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 {
 if(l<m1)
 {c[l]=*(a+n3+l);
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n4+k);
 k++;
 }
 }
 l1=0;
 f[l1]=c[l1];
 cout<<setw(6)<<f[l1];
 //sliyanie
 for(p=1;p<m3;p++)
 if(f[l1]!=c[p])
 { l++;
 f[l1]=c[p];
 cout<<setw(6)<<f[l1];
 }
}

Сначала осуществляем операцию сцепления двух строк, затем вводим дополнительный массив f[20] и сравниваем поочередно элементы массива, полученного сцеплением, если элементы не равны, то заносим в новый массив f.

Листинг программы

Набор тестов к программе


Задача решена:

Автор: Фролова Лена

группа: 121Ми

год: 2008

Назад


Рейтинг ресурсов УралWeb

 

© Нагуманов А.Х., 2009
Сайт создан в системе uCoz