Указатели.

Пример 1:

В каждой строке массива строк удалить введённый символ.

Решение от преподавателя:

int main()  {    const n=5;

     /* Объявляем статический массив указателей фиксированной   размерности n, где n – константа.*/

char *S[n];   char C,*p, t[40];       cout<<"Symbol";      C=getch();

unsigned K=0;       cout << endl<

for(int i=0;i

{ gets(t);

  /* Для каждой строки динамически выделяем память, размер которой равен длине строки */

 S[i]=new char [strlen(t)]; 

  strcpy( S[i],t);      // Введённую строку копируем в i–ю строку массива S

  }

 for(int i=0;i

    {      p=S[i];               // В p засылаем адрес строки S[i]

    do

    {    

            p=strchr(p,C);  

               if (!p)   /* это тоже самое, что if (p == NULL), т.е. если не нашли символ C, то заканчиваем анализ строки   */

                 break;

            K++;

            strcpy(p,p+1);   /* Удаляем найденный символ, т. е. всю строку сдвигаем на один символ влево */

    }

    while(1);

   }

   for(int i=0;i// Вывод массива слов

  cout <<"\n Number"<< K<<"  ";

  getch();                       return 0;    }

Пример 2:

Передача матрицы в функцию с помощью указателей. Для вывода использовать стандартную функцию printf.

Решение от преподавателя:

void MyFun1 (int **X, int , int );   // или void MyFun1 (int *X[],int , int );

void MyFun2 (int *X[],int , int );    //или void MyFun2 (int **X,int , int );

void MyPrint (int **X, int , int, int, char* );

int main()

  int ** A;          int N=3, M=4;

   A=new int *[N];

    for (int i=0; i

   MyFun1(A,N,M);

   MyPrint(A,N,M,5,"\n The first test\n");

//Удаляем матрицу

    for (int i=0;i

    delete[]A;

   const Nconst=8;    int M2=6; 

  int *B[Nconst];

   for (int i=0; i

      B[i]=new int [M2];

   MyFun2(B,Nconst,M2);

   MyPrint(B,Nconst,M2,3,"\n \nThe second test\n");

//Удаляем матрицу  B

    for (int i=0;i

       delete[]B[i];

      getch(); return 0;

}

void MyFun1 (int **X, int n, int m)

 // или  void MyFun1 (int *X[], int n, int m)

{

  for (int i=0; i

  for (int j=0;j

    X[i][j]=(i+1)*(j+1);

// Перестановка 0-й и (n-1)-й строк

   int* t;

  t=X[0];           X[0]=X[n-1];        X[n-1]=t;

 }

 void MyFun2 (int *X[], int n, int m)

  // или void MyFun2 (int **X, int n, int m)

{

  for (int i=0; i

  for (int j=0;j

    if (i%2) X[i][j]=(i+1)-(j+1);

        else X[i][j]=(i+1)+(j+1);

 }

  void MyPrint (int **X, int n , int m, int L, char* t )

 {

  char AnyFormat[10],

  StrL[3]; 

   strcpy(AnyFormat, "%");

   strcat(AnyFormat,itoa(L,StrL,10));

   strcat(AnyFormat,"d");

   puts(t);

   for (int i=0; i

    {

      for (int j=0;j

       printf(AnyFormat,X[i][j]);

      cout<<endl;

    }

   }

Пример 3:

Составить класс для работы с целочисленной  матрицей, включив в него матрицу, конкретные текущие размерности и следующие методы: конструктор для ввода и проверки текущих размерностей матрицы; ввод матрицы; вывод матрицы; поиск наибольшего и наименьшего значений матрицы, номера одной строки, где находится максимальный и номера одной строки, где находится минимальный элементы всей матрицы; цветной вывод матрицы, в результате которого все элементы найденных в предыдущей функции строк при выводе выделяются другими цветами. В функции main ввести размерности матрицы, создать объект и проверить составленные методы.

Решение от преподавателя:

const n1max=10, n2max=10;

class ClMatr

  { int a[n1max][n2max],   n1,   n2;

    public:

    ClMatr(int size1=5, int size2=3)

        {  if (size1>0 && size1

             n1=size1;             else   n1=5;

          if (size2>0 && size2

             n2=size2;             else n2=3;

       }

    void MyInp();

    void MyOut();

    void MaxMin(int *, int *, int *,  int *);

    void MyColorOut(unsigned, unsigned,unsigned, unsigned, unsigned);

      };

  void ClMatr::MyInp()

    { int x,  y=1;

      for (int i=0;  i

       {  y++;            x=-14;

          for (int j=0;  j

           { x+=16;        gotoxy(x,y);

             cout<<"a["<

             scanf("%d", a[i]+j);

           }

       }

    };

  void ClMatr::MyOut()

  { int x, y=wherey()+1;  int *p1, *p2 ;

             for (p1=a[0];  p1<=a[n1-1];  p1+=n2max,  y++)

              for (x=1, p2=p1; p2

              {

                     gotoxy(x,y);

                      printf("%5d", *p2);

              }

               cout<

  }

  void ClMatr::MyColorOut(unsigned i1,   unsigned i2,

                          unsigned col1, unsigned col2, unsigned col3)

  { int x,i=0, y=wherey()+1;  int *p1, *p2 ;

             for (p1=a[0];  p1<=a[n1-1];  p1+=n2max,  y++, i++)

            {  if (i==i1) textcolor( col1); else if (i==i2) textcolor(col2);

                          else textcolor(col3);

              for (x=1, p2=p1; p2

              { gotoxy(x,y);     cprintf("%5d", *p2);

              }

            }

               cout<

  }

 void ClMatr::MaxMin(int *max, int *Nmax, int *min, int *Nmin)

  {  *max=*min=a[0][0];       *Nmax=*Nmin=0;

     for (int i=0;i

        for (int j=0;j

        {  int el=*(a[0]+n2max*i+j);

          if (*max

         {        *max=el;       *Nmax=i;

                   }

           else if (*min>el)

                        {  *min=el;     *Nmin=i;

                  }

         }

   }

 

int main()

 {  int n1, n2, Nmax, Nmin, max, min;                 clrscr();

    cout<<"\nn1=";       cin>>n1;    cout<<" n2=";    cin>>n2;

    ClMatr ob(n1,n2);    clrscr();

    ob.MyInp();          cout<

    ob.MaxMin(&max,&Nmax,&min,&Nmin);

    textcolor(10);

    cprintf("Max element=%d in %d row\r\n",max , Nmax+1 );

    textcolor(11);

    cprintf("Min element=%d in %d row\r\n",min , Nmin+1 );

    if (Nmax!=Nmin)

         ob.MyColorOut(Nmax, Nmin, 10,11, 15);

    getch();                         return 0;

 }

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн