Informatică, întrebare adresată de catacata142, 8 ani în urmă

Salut am si eu o tema care suna cam asa :
Se da o matrice cu n randuri si m coloane si elemente numere naturale.Sa se elimine din matrice toate coloanele care contin elemente nule si apoi sa se afiseze matricea pe ecran.Programulciteste dintr-un fisier numerele n si m, iar apoi n*m numere naturale, separate prin spatii, reprezentand elementele matricei, linie cu linie.

trebuie facuta in C nu in C++ si nu prea inteleg cum sa il fac , daca cineva poate sa ma ajute si sa imi explice v-as fi recunoscator !! :3

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("matrice.in");

int n,m,i,j,a[100][100], col[100], este;

int main()

{

  f >> n >> m;

  for (i=0; i<n; ++i)

  {

      for (j=0; j<m; ++j)

      {

          f >> a[i][j];

          if (a[i][j]==0) {col[j]=1; este=1;}

      }

  }

  if (este==0)

  {

      cout << "matricea a ramas nemodificata: \n";

      for (i=0; i<n; ++i)

     {

         for (j=0; j<m; ++j)

           cout << a[i][j] << " ";

         cout << "\n";

     }

  }

  else {

  int t, gasit;

  for (j=0; j<m; ++j)

  {

      gasit=0;

      if (col[j]==1)

      {

          t=j;

          while (col[t]==1 && t<m) ++t;

          if (t<m) { gasit=1; }

      }

      if (gasit)

      {

          swap(col[j],col[t]);

          for (i=0; i<n; ++i)

             swap(a[i][j],a[i][t]);

      }

  }

  cout << "Matricea modificata: \n";

  t=0; while (col[t]==0) ++t;

  if (t==0) cout << "matrice vida...";

  else

  {

      m=t;

     for (i=0; i<n; ++i)

     {

         for (j=0; j<m; ++j)

           cout << a[i][j] << " ";

         cout << "\n";

     }

  }

  }

}

Explicație:

-am declarat vectorul col in care semnalizăm prin 1 dacă elementul citit este 0 şi variabilei este îi dăm 1 că am găsit măcar un 0.

-citim matricea din fisier.

-dacă este=0 (addică nu s-a găsit nici un 0, atunci afişem matricea nemodificată, altfel parcurgem vectorul col şi căutăm 1, adică coloana care are 0.  De la ea căutăm în col elementul egal cu 0, adică coloana care nu are 0 şi facem interschimbările respective în vectorul col şi interschimbăm şi coloanele în matrice. Astfel în col vor fi de la stînga numai zerouri şi unităţile la dreapta.

-  cu variabila t căutăm dimensiunea în col cât elementul este 0, adică coloana în matrice nu are 0. Lui m îi dăm noua dimensiune a coloanelor matricei şi afişem matricea modificată.

SPER CĂ AM FOST EXPLICIT... :))) SUCCESE!

Dacă a rămas ceva neclar, întreabă, dar stăruie-te să înţelegi singur...

Alte întrebări interesante