Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

elementi matrice koji pripadaju istoj dijagonali

[es] :: C/C++ programiranje :: C/C++ za početnike :: elementi matrice koji pripadaju istoj dijagonali

[ Pregleda: 2772 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon elementi matrice koji pripadaju istoj dijagonali13.09.2009. u 12:20 - pre 146 meseci
Ako neko može da mi pomogne oko ovoga ispitnog pitanja:

Napisati program koji učitava dva prirodna broja n i d(n<10, d<10),a zatim formira
kvadratnu matricu reda n, za koju je ispunjen uslov da svi elementi koji pripadaju
istoj dijagonali (glavnoj ili nekoj dijagonali koja je paralelna sa glavnom)imaju
istu vrijednost(prirodan broj).Elementi na glavnoj dijagonali imaju vrijednost n,
dok se vrijednost na ostalim dijagonalama smanjuje za korak d udaljavanjem od glavne
dijagonale.Na kraju treba ispisati samo sva nenulte elemente matrice, kao što je :

n=4 d=3
4 1 0 0
1 4 1 0
0 1 4 1
0 0 1 4

4 1
1 4 1
1 4 1
1 4


n=3 d=1
3 2 1
2 3 2
1 2 3

3 2 1
2 3 2
1 2 3

n=2 d=3
2 0
0 2

2
2


Za formiranje matrice treba napisati i koristiti funkciju čiji je prototip:
Code:
void create(int mat[10][10], int n, int d);

Za ispis traženog dijela matrice treba napisati i koristiti funkciju čiji je prototip:
Code:
void print(int mat[10][10], int n);


Da mi je bar napisti funkcije!

Napisao sam i ja kod, ali mi neradi baš šta bi trebalo.

Code:
#include <stdio.h>
#include <stdlib.h>
#define max 10
void create(int mat[10][10],int n,int d);
void print(int mat[10][10],int n);
main()
{
    int m[10][10]={0};
    int n,d,a;
    do
    {
       printf("unesite dva prirodna broja:\n");
       scanf("%d  %d",&n,&d);
    }
    while( (n>max)&&(d>max))
    ;
    create(m,n,d);
    print(m,n);
    system("pause");
}
void create(int mat[10][10],int n,int d)  //U defimiciji formalnih argum. morju da se navedu
{                                        // dimenzije polja
    int i,j,a,b;
    a=n; b=d;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(i=j)
              mat[i][j]=n;
            else if((i=j+1) || (j=i+1)) //elementi dijagonale lijevo ili desno od glavne
             { mat[i][j]=n-d;  }
        }
    }
    printf("n=%d  d=%d\n",a,b);            //provjera kreirane matrice
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
          printf("%d",mat[i][j]);
       printf("\n");
    }
    printf("\n");
}
void print(int mat[10][10],int n)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
         if(mat[i][j]!=0)
            printf("%d",mat[i][j]);
        }
        printf("\n");
    }
}
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1236



+93 Profil

icon Re: elementi matrice koji pripadaju istoj dijagonali13.09.2009. u 20:55 - pre 146 meseci
Code:

            if(i=j)
              mat[i][j]=n;
            else if((i=j+1) || (j=i+1)) //elementi dijagonale lijevo ili desno od glavne
             { mat[i][j]=n-d;  }

Znak = je znak dodele vrednosti, a ne poređenja (znak poređenja je ==). Kad se napiše i=j onda i dobije vrednost j, a rezultat operacije je j, što se svodi na true ako je j!=0, ili false ako je j==0. Čudi me da te kompajler nije upozorio na ovo. Probaj da rebilduješ program, i potraži upozorenja kompajlera.

Druga stvar: rešio si glavnu dijagonalu, kao i neposredne susedne dijagonale. Ali sve ostale će ostati nula. Ako je d manje od n/2 onda ćeš dobiti loš rezultat. Evo kako bih ja rešio stvar. Prvo što ti treba je udaljenost ćelije matrice od glavne dijagonale. To ti je abs(i-j). Ako je i==j onda je udaljenost nula, ako se razlikuju za jedan onda je udaljenost jedan, i tako dalje. E sad, na glavnoj dijagonali treba da stoji n, na susednoj n-d, na sledećoj n-2*d, pa n-3*d, i tako dalje. Kao što vidiš broj d treba pomnožiti sa udaljenošću ćelije od glavne dijagonale. Znači
Code:
mat[i][j]=n-abs(i-j)*d;
I to je to. Ako je ta vrednost manja od nule onda je treba postaviti na nulu.

Code:

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
         if(mat[i][j]!=0)
            printf("%d",mat[i][j]);
        }
        printf("\n");
    }

Ovde štampaš sadržaj matrice izostavljajući one ćelije s vrednošću nula. Ali onda ćeš dobiti upravo onakav rezultat kakav si slučajno greškom stavio u postavci zadatka. Svi brojevi će se slepiti za ivicu ekrana. Rešenje je da umesto broja nule štampaš prazan prostor (spejsove). To možeš u else grani. Ovde ima još jedan problem. Brojevi nisu odvojeni, tako da bi neki niz 2 5 8 5 2 na ekranu izgledao 25852. Znači, moraš da staviš nekakav razmak između brojeva, recimo ovako: "%d ".

Pošto je n<10 nema problema sa poravnanjem brojevima s različitim brojem cifara, što je olakšavajuća okolnost po tebe.
 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: elementi matrice koji pripadaju istoj dijagonali15.09.2009. u 19:34 - pre 146 meseci
[b]HVALA TI! Mihajlo hvala ti na sugestijama koje su mi mnogo pomogle,pa evo i moga koda radi ono što bi i trebalo, pa akome treba neka izvoli:

Code:
#include <stdio.h>
#include <stdlib.h>
#define max 10
void create(int mat[10][10],int n,int d);
void print(int mat[10][10],int n);
main()
{
    int m[10][10]={0};
    int n,d,a;
    do
    {
       printf("unesite dva prirodna broja:\n");
       scanf("%d  %d",&n,&d);
    }
    while( (n>max)&&(d>max))
    ;
    create(m,n,d);
    print(m,n);
    system("pause");
}
void create(int mat[10][10],int n,int d)  //U defimiciji formalnih argum. morju da se navedu
{                                        // dimenzije polja
    int i,j,a,b,c,kor;
    a=n; b=d;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
           kor=abs(i-j);                 /* udaljenostćelije od gl. dijagonale */
           if(i==j)                       /* ako je element na glavnoj dijagonali */
           mat[i][j]=n;
           c=n-kor*d;
           if(c>0)                    /*da li je vrijednost na ostalim dijagonalama >0 */
           {mat[i][j]=c;  }
        }
    }
    printf("n=%d  d=%d\n",a,b);            //provjera kreirane matrice
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
          printf("%d ",mat[i][j]);
       printf("\n");                /* da bi ispis elemenata u redu i+1 bio u sledećem redu*/
    }
    printf("\n");
}
void print(int mat[10][10],int n)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
         if(mat[i][j]!=0)              /*ako element nije nula, npr. mat[2][3]=2 */
            printf("%d ",mat[i][j]);
         else printf(" ",mat[i][j]);  /*umjesto nula štampa se prazno mjesto */
        }
        printf("\n");
    }
}

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1236



+93 Profil

icon Re: elementi matrice koji pripadaju istoj dijagonali15.09.2009. u 22:23 - pre 146 meseci
Nema na čemu :-) Uzgred, kod štampanja razmaka treba da ih štampaš dva (" " umesto " "), jer jedan razmak zamenjuje nulu, a drugi je razmak koji imaju i ostali brojevi.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: elementi matrice koji pripadaju istoj dijagonali

[ Pregleda: 2772 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.