Не Понимаю Как Изменить Программу.

wanek2011

New member
04.01.2013
2
0
#1
определение одномерных массивов указателей строк где предусмотреть:
возможность обращения к отдельном строкам массива по индексам с контролем выхода за пределы индексов;
выполнение операций поэлементного сцепления двух массивов с образованием нового;
слияние двух массивов с исключением повторяющихся элементов;
вывод на экран отдельных элементов массива и всего массива;
C++:
#include "stdafx.h"
#include <ctime>
#include <iostream>
#include <string.h>
#include <math.h>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#pragma hdrstop
using namespace std;

//---------------------------------------------------------------------------
#pragma argsused
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);
};


void main(){
Massiv a,b;
int number,punkt,rec,field,kol,n1,n2,n,n3,n4;
//создаем меню
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;
cout<<"Vvedite punkt menu "; cin>> punkt;
while (punkt!=7)
{
switch(punkt)
{
case 1: {srand(time(NULL));;  //создание массива
a.Vvod_Sl();
cout<<endl;
a.Print();
cout<<endl;
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;
cout<<"Vvedite punkt menu "; cin>> punkt;
}
break;
case 2: {a.Print(); //печать массива
cout<<endl;
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;
cout<<"Vvedite punkt menu "; cin>> punkt; }
break;
case 3: { //печать строки по индексу
cout<<"Vvedite nomer massiva (numeracia s 0!): ";cin>>number;
cout<<endl;
a.Print_2(number);
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;
cout<<"Vvedite punkt menu "; cin>> punkt;
}
break;
case 4: { //сцепление двух массивов
cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n1;cout<<endl;
cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n2;cout<<endl;
a.Form(n1,n2);
cout<<endl;
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;
cout<<"Vvedite punkt menu "; cin>> punkt;}
break;
case 5: { //слияние двух массивов
cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n3;cout<<endl;
cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n4;cout<<endl;
a.Form_2(n3,n4);
cout<<endl;
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;
cout<<"Vvedite punkt menu "; cin>> punkt;}
break;

case 6: { //печать конкретного элемента конкретной строки
cout<<"Vvedite nomer stroki massiva: ";cin>>rec;
cout<<endl;
cout<<"Vvedite nomer stolbca: ";cin>>field;
cout<<endl;
a.Print_3(rec-1,field-1);
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;
cout<<"Vvedite punkt menu "; cin>> punkt;}
break;
case 7:
break;
} }}
//Далее идут описание функции 
void Massiv :: Sozd(){
int m;
cout<<"kolvo strok?";cin>>n;
b = (int*)malloc(sizeof(int)*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)/* динамическое выделение памяти */;}

void Massiv::Vvod_Sl(){
Sozd();
for(int i=0;i<n;i++)
for (int j=0; j<*(b+i); j++) {
*(a+i+j)=rand()%41-20; }}//рандомный ввод массива

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;}}

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; }} 

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; }} 

void Massiv :: Form(int n1,int n2){
int m1,m2,k,j,l,p;
int c[20];
//запоминаем количество элементов в строках
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++; }}

void Massiv :: Form_2(int n3,int n4){
int m1,m2,k,j,l,p,l1;
int c[20],f[20];
// запоминаем количество элементов в строках
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];
//слияние 
for(p=1;p<m3;p++)
if(f[l1]!=c[p]) { l++;
f[l1]=c[p];
cout<<setw(6)<<f[l1]; }
getch();
}

но мне надо что бы работала программа с символами ( через char **....),и ввод этих символов с клавиатуры.
п.с. за помощь в долгу не останусь!
 
W

Whatka

#2
а зачем вы привели код с числовыми массивами?
массив указателей на строки более похож на числовые матрицы

и в чём конкретно проблема?
 

wanek2011

New member
04.01.2013
2
0
#3
мне надо что бы массив был через char прописан с указателем. и символы записывались с клавиатуры.