Matice v jazyku C

Programovacie jazyky, rady, poradňa...
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Matice v jazyku C

Príspevok od používateľa marteenka.s »

Ahojte,

potrebovala by som detailne vysvetlit jeden program napisany v jazyku C.
Dakujem velmi pekne.

Kód: Vybrať všetko

#include <stdio.H>
#define STLPEC 5
#define RIADOK 5
main()
{
      int i,j,matica[STLPEC][RIADOK];
      FILE *subor;
      
      if((subor=fopen("subor.txt","r")) == NULL)
      printf("gggggggggggggggggg");
      
      
      for(i=0;i<STLPEC;i++)
      {
                      for(j=0;j<RIADOK;j++)
                      {
                       fscanf(subor,"%d",&matica[i][j]);
                      }
      }
      for(i=0;i<STLPEC;i++)
      {
                      for(j=0;j<RIADOK;j++)
                      {
                                      printf("%d ",matica[i][j]);
                                   
                      }
                                      printf("\n");
                                      
      }
      
      printf("\n");
      for(i=0;i<STLPEC;i++)
      {
                      for(j=0;j<RIADOK;j++)
                      {
                                           if(i==j)
                                             printf("0 ");
                                           else
                                             printf("%d ",matica[i][j]);
                                   
                      }
                                      printf("\n");
                                      
      }
      
              
      
      
      
      fclose(subor);
      getchar();
      getchar();
}
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Zo suboru "subor.txt" sa nacita RIADOK*STLPEC hodnot(v tomto pripade 5*5), ktore su ulozia do dvojrozmerneho pola matica. Maticu vypises, no na diagonale budu nuly (preto if(i==j) printf("0 ");). Kedze to chces detailne, tak tu mas okomentovany zdrojak:
(myslim, ze viac som to uz okomentovat nemohol)

Kód: Vybrať všetko

#include <stdio.H> /* Ikluduje hlavickovy subor stdio.h, aby sme mohli pouzivat standardne funkcie z kniznice stdio, ako printf, scanf ... */
#define STLPEC 5 /* definujeme symbolicke konstanty - rozmery matice*/
#define RIADOK 5 /* aby sme pri zmene rozmerov nemuseli tolko upravovat zdrojak - staci zmenit len tieto hodnoty */

main() /* funkcia main, ktoru vyvolava operacny system pri spusteni programu */
{ 
      int i,j,matica[STLPEC][RIADOK]; /* definicia premennych, obsadi sa pre ne tolko pamate, kolko si vyzaduje ich datovy typ */
      FILE *subor; /* subor - pointer na strukturu typu FILE, pomocou ktoreho budeme pristupovat k suborom */
      
      if((subor=fopen("subor.txt","r")) == NULL) /* pokusime sa otvorit subor "subor.txt" na citanie pomocou funkcie fopen*/
      printf("gggggggggggggggggg"); /* ak sa subor nepodari otvorit, teda fopen vrati NULL, vypise "ggggggggggggggggggg..." */
	/* tu by sme uz mohli ukoncit program, pokial sa nepodari otvorit subor, ak ho neukoncime, s velkou pravdepodobnostou sa zruti*/      
      
      for(i=0;i<STLPEC;i++)  /* cyklus od 0 do STLPEC, teda do 5 */
      { 
                      for(j=0;j<RIADOK;j++) 
                      { 
                       fscanf(subor,"%d",&matica[i][j]); /* nacitame jednotlive prvky matice zo suboru */
                      } 
      } 
      for(i=0;i<STLPEC;i++) 
      { 
                      for(j=0;j<RIADOK;j++) 
                      { 
                                      printf("%d ",matica[i][j]); 
                                    
                      } 
                                      printf("\n"); 
                                      
      } 
      
      printf("\n"); 
      for(i=0;i<STLPEC;i++) /* znova vypiseme maticu */
      { 
                      for(j=0;j<RIADOK;j++) 
                      { 
                                           if(i==j) /* ale s tym rozdielom, ze ked mame rovnake suradnice (napr. 1,1; 2,2 alebo 3,3) */
                                             printf("0 "); /* vypiseme nulu */
                                           else   /*tym padom budu po uhlopriecke (na diagonale) same nuly */
                                             printf("%d ",matica[i][j]); 
                                    
                      } 
                                      printf("\n"); 
                                      
      } 
      
              
      
      
      
      fclose(subor); /* zavrieme otvoreny subor */
      getchar();  /* pockame na stlacenie klavesy, aby uzivatel nieco videl */
      getchar(); 
}
regnak
Amateur
Amateur
Príspevky: 28
Registrovaný: 22 nov 2011, 8:13

Re: Matice v jazyku C

Príspevok od používateľa regnak »

vedel by niekto pomôcť so zadaním :(
Napíšte program ktorý v
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Matice v jazyku C

Príspevok od používateľa *****HERO***** »

a kde je problem?
regnak
Amateur
Amateur
Príspevky: 28
Registrovaný: 22 nov 2011, 8:13

Re: Matice v jazyku C

Príspevok od používateľa regnak »

no neviem si rady...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Matice v jazyku C

Príspevok od používateľa BX »

Skús to takto: Napíš program ktorý vygeneruje dve matice 6 x 4 a naplň ich náhodnými hodnotami z intervalu 1 až 25. Obe matice vypíš cez printf. Potom vypíš do nových riadkov hodnoty v rohoch matíc a potom súčty rovnakých prvkov.

Kde je problém?
regnak
Amateur
Amateur
Príspevky: 28
Registrovaný: 22 nov 2011, 8:13

Re: Matice v jazyku C

Príspevok od používateľa regnak »

vypotil som toto

Kód: Vybrať všetko

#include <stdio.h>

main()
{
   int n;
   float A[6][4], B[6][4];
   FILE *fid;
   int i,j;
   
   fid=fopen("matice.txt","r");
   if (fid==NULL)
   {
      printf("Soubor matice.txt neexistuje.\n");
      return 1;
   }
   fscanf(fid,"%d",&n);
   for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
     {
        fscanf(fid,"%f",&A[i][j]);
     }
   }
   fclose(fid);

 printf("Matice:\n------------\n");
  for(i=0;i<n;i++)
  {
     for(j=0;j<n;j++)
     {
        printf("%f ",A[i][j]);
     }
     printf("\n");
  }
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Matice v jazyku C

Príspevok od používateľa BX »

Nevypotil, to si niekde odpísal a s tvojím zadaním to má spoločné akurát tie matice.
Tie matice máš vygenerovať, takže načítanie nerieš a dosaď tam nejako to generovanie náhodných čísel.
Na to slúžia funkcie srand a rand.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Matice v jazyku C

Príspevok od používateľa *****HERO***** »

ta premenna n je co? ved rozmery matice poznas a to je vsetko, co potrebujes.

cize bude to podobne ako to mas - dvojica do seba vnorenych cyklov, prvy na vygenerovanie, druhy na vypis. ako premenne do podmienky tych cyklov musis vsak dat rozmery tej matice (vonkajsi cyklus prechadza riadky, vnutorny jednotlive bunky)

a nemyslim, ze to zadanie je myslene, aby sa tie hodnoty do matice brali z user inputu, takze si kukni aj funkciu rand - budes ju potrebovat pre generovanie tych nahodnych cisele
Napísať odpoveď