[ Davorenko @ 06.06.2017. 15:48 ] @
Uskoro imam ispiti iz programirajau C, a imam nekih zadataka koji nisam uspio da rješim jel mi neko može pomoći oko ova dva zadatka



Zadatak 1. Napisati program koji od korisnika traži unos n elemenata niza (ne više od 20), unos se prekida brojem -1 (koji se ne unosi u niz). Program nakon toga treba pronaći i ispisati najmanji i drugi najmanji broj u unesenom nizu.
Primjeri ispisa:
Unesite 1. element (-1 za kraj unosa): 10
Unesite 2. element (-1 za kraj unosa): 5
Unesite 3. element (-1 za kraj unosa): 8
Unesite 4. element (-1 za kraj unosa): 1
Unesite 5. element (-1 za kraj unosa): 3
Unesite 6. element (-1 za kraj unosa): 8
Unesite 7. element (-1 za kraj unosa): -1
Najmanji broj je: 1
Drugi najmanji broj je: 3


Zadatak 2. Napisati program koji od korisnika zahtijeva unos dimenzije kvadratne matrice cijelih brojeva (dimenzija ne veće od 10), i elemente matrice. Pri tome osigurati da se matrica unese korektno. Program treba iz matrice izbaciti elemente na glavnoj dijagonali. Matricu treba modifikovati, a ne samo pri ispisu zanemariti elemente na dijagonali. Elemente matrice poravnati sa lijevom stranom i ostaviti 5 mjesta za ispis svakog broja.
Primjer ispisa:
Unesite dimenziju matrice: 5
Unesite elemente 1. reda: 1 2 3 4 5
Unesite elemente 2. reda: 6 7 8 9 1
Unesite elemente 3. reda: 1 2 3 4 5
Unesite elemente 4. reda: 6 7 8 9 1
Unesite elemente 5. reda: 1 2 3 4 5
Matrica nakon izbacivanja dijagonale:
2 3 4 5
6 8 9 1
1 2 4 5
6 7 8 1
1 2 3 4

Unaprijed zahvalan
[ djoka_l @ 06.06.2017. 16:27 ] @
http://www.elitesecurity.org/o/pravilnik/korisnici/

Citat:
6. Ne tražite da Vam neko radi domaći zadatak

Ne očekujte da bilo ko obavezno odradi sav posao umesto Vas! Rado ćemo pomoći oko svakog problema u slučaju da Vam "gori pod nogama", pred neki ispit ili posao, ali morate da pokažete na delu da ste u stvari krenuli sa radom i zastali pošto ne znate kako dalje. Ako samo navedete zadatak i specifikacije, u zavisnosti od raspoloženja članova na forumu, možda će se naći neko da odradi kompletan posao, ali pošto to zavisi od entuzijazma samih članova, ne postoji garancija da će se i dogoditi! [ES] posetioci će Vam pomoći da bolje SHVATITE problem sa kojim ste suočeni, ali ponešto morate i sami da uradite!


Pokaži da si bar nešto uradio/pokušao da bi ti neko pomogao.
Kod koji si napisao stavi u [ code ] tag.
[ Davorenko @ 07.06.2017. 20:57 ] @
Evo prvi zadatak



Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int niz[5], max, i, ind, br=0, temp;
    for(i=0; i<5; i++);
    {
    printf("UNESITE %i element (-1 za kraj unosa:)",i+1);
    scanf("%d", &temp);
    if (temp==-1) break;
    else
    {
        niz[i]=temp;
        br++1;
    }}
    max = niz [0];
    for (i=1; i<5; i++)
    {
        if (niz[i]>max)
        {
            max= niz[i];
            ind = i;
        }
        Printf("Najmanji je %d", max);
    niz[ind]=0;
    max=niz[0;];
    return 0;


[Ovu poruku je menjao X Files dana 08.06.2017. u 20:24 GMT+1]
[ Davorenko @ 08.06.2017. 08:28 ] @
U prethodnom postu sam ubacio kopiju prvog zadatka sto sam pripremio. ali klada se pokrene kompajler javlja grešku i ne mogu ga pokrenuti, može li neko pogledati i vidjeti u čemu griješim

[ Davorenko @ 09.06.2017. 14:37 ] @
uspio sam nekako da pokrenemkod međutim kada unosim prvi clan niza procese se ne nastavlja dalje moze li mi iko ponuditi rjesenje

[ djoka_l @ 09.06.2017. 20:59 ] @
Nekoliko puta sam pokušao da odgovorim, ali svaki put kada pogledam tvoje rešenje odustanem.

Tvoj program, čak i da je ispravan ne bi radio ono što treba da radi.

- Traži se da se učita niz sa ne više od 20 članova, a ti dimenzionišeš niz koji ima 5 elemenata.
- Traži se da nađeš DVA najmanja člana, a ti nalaziš NAJVEĆI. Još ga zoveš i max, a treba ti min.
- deklarišeš promenljivu br, a ne koristiš je nizašta - a u drugoj petlji treba da ideš do br a ne do 5
- pišeš br++1 a to ne postoji. Postoji br++ ili br+=1 i obe komande uvećavaju br za jedan.
- odmah posle for petlje stavljaš ; tako da se pet puta izvršava NIŠTA for(i=0; i<5; i++);
- šta pa ovo treba da znači?? max=niz[0;]; stavljaš ; u index niza, čisto da se nađe za svaki slučaj
- fale dve zatvorene vitičaste zagrade.
- jednom pišeš printf sa malim p, jednom sa velikim P (a mora sa malim)
- zašta služe one dve komande posle poslednjeg printf. Ne koristiš ih nigde, samo izađeš iz programa

Ako ti je uskoro ispit, onda nisi ni blizu da ga položiš. Izvini, ali tako je. Ne vidim svrhu da ti napišem program koji radi jer učenje programiranja nije da napamet prekucaš nešto što je neko drugi napisao.
[ dmilicev @ 12.07.2017. 19:22 ] @
Code:
 /*
    Izbacuje glavnu dijagonalu matrice.
*/


#include <stdio.h>
#include <stdlib.h> // zbog exit()

#define MAX_SIZE 10


// Prikazuje matricu M[][] koja ima r redova i k kolona
void prikazi_matricu( char *tekst, int M[][MAX_SIZE], int r, int k )
{
    int i, j;

    printf("\n%s\n\n",tekst);

    for(i=0;i<r;i++) {    // Stampamo matricu M[][]
        for(j=0;j<k;j++)
            printf("%4d",M[i][j]);

        printf("\n\n");   // novi red matrice
    }
    printf("\n\n");
}


void unos_elemenata_matrice( int M[][MAX_SIZE], int r, int k )
{
    int i, j;

    for(i=0;i<r;i++)
        for(j=0;j<k;j++){
            printf("\n Unesite M[%d][%d] = ",i,j);
            scanf("%d",&M[i][j]);
        }
    printf("\n");
}


// Formira matricu M[][] koja ima r redova i k kolona
void formiraj_matricu( int M[][MAX_SIZE], int r, int k )
{
    int i, j, broj = 1;

    for(i=0;i<r;i++)
        for(j=0;j<k;j++)
            M[i][j] = broj++;
}


// Izbacuje glavnu dijagonalu matrice M[r][k] koja ima r redova i k kolona.
// Nova matrica bez glavne dijagonale imace isti broj redova,
// a broj kolona ce za 1 biti manji.
void izbaci_glavnu_dijagonalu_matrice( int M[][MAX_SIZE], int *r, int *k )
{
    int i, j, r1, k1;
    // r1 i k1 su broj redova i kolona matrice M[][] sa izbacenom glavnom dijagonalom

    for(i=0;i<*r;i++){

        r1=i;   // pocetna vrednost za brojac redova nove matrice
        k1=0;   // pocetna vrednost za brojac kolona nove matrice

        for(j=0;j<*k;j++)
            if( i != j )   // ako to nije element glavne dijagonale matrice M[][]
                M[r1][k1++] = M[i][j];  // i povecavamo k1, broj kolona nove matrice
    }

//    (*r)--;     // smanjujemo broj redova
    (*k)--;     // smanjujemo broj kolona
}



int main(void)
{
    int M[MAX_SIZE][MAX_SIZE];

    int i, r, k;   // r je broj redova a k je broj kolona matrice M[][]

    // Zadatak ima smisla za r = k tj. za kvadratnu matricu, ali radi vezbe,
    // dopustamo da broj redova i kolona bude razlicit:

    printf("\n Unesi broj redova kvadratne matrice M[r][k] (manji od %d) : r = ",MAX_SIZE);
    scanf("%d", &r);
    printf("\n");

    if ( r > MAX_SIZE ) {
        printf("\n Broj redova matrice ne sme biti veci od %d \n",MAX_SIZE);
        exit(1);
    }


    printf("\n Unesi broj kolona matrice M[%d][k] (manji od %d) : k = ",r,MAX_SIZE);
    scanf("%d", &k);
    printf("\n");

    if ( k > MAX_SIZE ) {
        printf("\n Broj redova matrice ne sme biti veci od %d \n",MAX_SIZE);
        exit(2);
    }

    // unos_elemenata_matrice(M,r,k);

    formiraj_matricu(M,r,k); // matricu formiramo u funkciji da ne gubimo vreme za unos elemenata

    prikazi_matricu(" Matrica M[][] je: ",M,r,k);


    izbaci_glavnu_dijagonalu_matrice(M,&r,&k);

    prikazi_matricu(" Matrica M[][] bez glavne dijagonale je: ",M,r,k);


    return 0;
}