Реализовать программу с использованием template

toyi

фууф не могу понять как реализовать эту программу с использованием шаблона template
#include <stdio.h>
 
int printmas (int intmas[3][4]) //функция выводит массив на экран 
{
   for(int i=0; i<3; i++)  
   {
     for(int j=0; j<4; j++) 
       {
         printf("%d ", intmas[i][j]);
       }
     printf("\n"); 
   } 
  return 0; 
}
 
int masind(int *danmas,int strok, int stolb, int lin) //функция с индексами 
{
    
    int maxs = danmas[lin * stolb], index = 0, i = 0;
    if (lin > strok)
        return -1;
    {
        for (i = 0; i < stolb; i++)
            if (danmas [lin * stolb + i] > maxs) 
            {
                maxs = danmas [lin * stolb + i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
}
 
int masukz(int *danmas, int strok, int stolb, int lin) //функция с указателями
{
    if (lin > strok)
        return -1;
 
    int maxs = *(danmas + lin * stolb);
    int index = 0;
 
    for (int i = 0; i < stolb; i++)
    {
        if (*(danmas + lin * stolb + i) > maxs)
        {
            maxs = *(danmas + lin * stolb + i);      // Значение наибольшего элемента
            index = i;                     // Индекс наибольшего элемента
        }
    }
    return index;
}
 
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,49,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента 
 
    printmas(danmassiv);
    printf("with index\n");
    max=masind(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    printf("with ukaz\n");
    max=masukz(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
}
3 ответа

toyi

С первой функцией примерно так:
template <typename T, std::size_t N, std::size_t K>
void printmas (T (&mas)[N][K]) //функция выводит массив на экран
{
   for (const auto &row : mas)
   {
       for (const auto &i : row) std::cout << i << " ";
       std::cout << "\n";
   }
}
 
 
int main()
{
    int arr[][3] = {
        {1,2,3},
        {2,3,4},
        {5,6,7},
        {8,9,10}
    };
 
    printmas(arr);
}
Со второй аналогично.


toyi

#include <iostream>
 
template<typename T, const int N, const int M>
int printmas (T intmas[N][M]) //функция выводит массив на экран
{
   for(int i=0; i<N; i++)
   {
     for(int j=0; j<M; j++)
       {
         std::cout << intmas[i][j];
       }
     std::cout << std::endl;
   }
  return 0;
}
 
template<typename T>
int masind(T *danmas,int strok, int stolb, int lin) //функция с индексами
{
    int index = 0, i = 0;
    T maxs = danmas[lin * stolb];
    if (lin > strok)
        return -1;
    {
        for (i = 0; i < stolb; i++)
            if (danmas [lin * stolb + i] > maxs)
            {
                maxs = danmas [lin * stolb + i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
}
 
template<typename T>
int masukz(T *danmas, int strok, int stolb, int lin) //функция с указателями
{
    if (lin > strok)
        return -1;
 
    T maxs = *(danmas + lin * stolb);
    int index = 0;
 
    for (int i = 0; i < stolb; i++)
    {
        if (*(danmas + lin * stolb + i) > maxs)
        {
            maxs = *(danmas + lin * stolb + i);      // Значение наибольшего элемента
            index = i;                     // Индекс наибольшего элемента
        }
    }
    return index;
}
 
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    ****** danmassiv [x][y]={{10,9,98,65},
                          {1,-9,49,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента
 
    printmas<******,x,y>(danmassiv);
    printf("with index\n");
    max=masind<******>(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    printf("with ukaz\n");
    max=masukz<******>(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
}


toyi

C++
спасибо посидел почитал и разобрался