Zadatak u C -u

poruka: 12
|
čitano: 1.343
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Zadatak u C -u HITNO ZA PUKNUT:)

Naime ovako, dosta je hitno pa onda molim da mi neko to pomogne ne riješiti jer zadatak imam nego ispraviti grešku i poslati ispravno...
naime petlja mi jednostavno ne funkcionira kako treba....

 

evo zadatka, kopirajte ga samo u DEVC++ ili CodeBlocks

 

 

 

#include<conio.h>
#include<stdio.h>
void izracunOtpora();
void izracunKapac();
int main()
{
    printf("Ovaj program ce izracunati otpor odnosno kapacitet spoja ovisno o vasem izboru");
    printf("\n Ako zelite izracunavati otpor upisite R , a ako zelite izracunavati kapacitet upisite C: ");
    char a;
    scanf("%c",&a);
    if (a=='R'||a=='r')
        izracunOtpora;
    if (a=='C'||a=='c')
        izracunKapac;
    else
        printf("To nije bilo ponudjeno!! %c",a);

    return 0;
}

void izracunOtpora()
{
    printf("Izabrali ste izracunavati otpore.\n Da li su otpornici u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P.");
    char b;
    scanf("%c",&b);
    printf("Koliko se otpornika nalazi u spoju? ");
    int brOtpornika;
    scanf("%d",&brOtpornika);
    float otpornici[brOtpornika];
    int i;
    for (i = 0;i<brOtpornika;i++)
    {
        printf("Unesi vrijednost %d otpornika:",i+1 );
        scanf("%f",otpornici[i]);
    }
    float ukupniOtpor = 0;
    if (b=='s'||b=='S')
        {
            int i;
            for (i = 0;i < brOtpornika;i++)
            {
                ukupniOtpor = ukupniOtpor + otpornici[i];
            }
            printf("Ukupna vrijednost otpora je %f Ohma.",ukupniOtpor);

        }
    if (b=='P'||b=='p')
        {
            int i;
            for(i = 0;i < brOtpornika;i++)
            {
                ukupniOtpor = ukupniOtpor + (1/otpornici[i]);
            }
            ukupniOtpor = 1/ukupniOtpor;
            printf("Ukupna vrijednost otpora je %f Ohma.",ukupniOtpor);

        }
    else
    {
        printf("To nije bilo ponudjeno!");
    }

}
void izracunKapac()
{
     printf("Izabrali ste izracunavati kapacitet.\n Da li su kondenzatori u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P.");
    char b;
    scanf("%c",&b);
    printf("Koliko se kondenzatora nalazi u spoju? ");
    int brKondenzatora;
    scanf("%d",&brKondenzatora);
    float kondenzatori[brKondenzatora];
    int i;
    for (i = 0;i<brKondenzatora;i++)
    {
        printf("Unesi vrijednost %d kondenzatora:",i+1 );
        scanf("%f",kondenzatori[i]);
    }
    float ukupniKapac = 0;
    if (b=='s'||b=='S')
        {
            int i;
            for (i = 0;i<brKondenzatora;i++)
            {
                ukupniKapac = ukupniKapac + kondenzatori[i];
            }
            printf("Ukupna vrijednost kapaciteta je %f Farada.",ukupniKapac);

        }
    if (b=='P'||b=='p')
        {
            int i;
            for(i = 0;i<brKondenzatora;i++)
            {
                ukupniKapac = ukupniKapac + (1/kondenzatori[i]);
            }
            ukupniKapac = 1/ukupniKapac;
            printf("Ukupna vrijednost kapaciteta je %f Farada.",ukupniKapac);

        }
    else
    {
        printf("To nije bilo ponudjeno!");
    }

}

 

Stvarno molim pomoc jer je dosta hitno.

Poruka je uređivana zadnji put čet 7.7.2011 15:29 ($rky).
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Zadatak u C -u

Hmm, koliko vidim zapravo je greska u ucitavanju ...

Probao sam s ovim, i radilo je ...

 

char read_char() {
    char r = getchar();
    getchar();
    return r;   
}

To je moja modificirana fja za ciranje chara.

Ači mislim da radi s ovim. Dakle promjeni sve scanf i stavi ovo. Nisam siguran kako tocno natjerati scanf da cita "%c" tocno, ali problem dolazi kod ovog '\n' znaka.

Poruka je uređivana zadnji put čet 7.7.2011 16:40 (Budimir).
 
0 0 hvala 0
16 godina
neaktivan
offline
Zadatak u C -u

U funkciji main bi umjesto izracunOtpora trebalo pisati izracunOtpora() i umjesto izracunKapac treba biti izracunKapac() - to su pozivi funkcija. Što se tiče unosa, pretpostavljam da u bufferu ostane pritisak na tipku enter, pa program preskoči jedan unos.

 

Nadalje, u scanf funkciji kod unosa vrijednosti ti fali & - dakle ovako: scanf("%f",&(otpornici[i]));

 

Od ostalog, pročisti if-else dijelove - if { .. } je oblik if-elsea bez else dijela, tako da u mainu i funkcijama izračuna imaš seriju od dvije naredbe: if bez elsea kod odabira otpora i serijskog spoja, if-else kod odabira kapaciteta i paralelnog spoja.

The laws of nature are constructed in such a way as to make the universe as interesting as possible. - Freeman Dyson, Imagined Worlds
Poruka je uređivana zadnji put čet 7.7.2011 17:01 (hrx).
 
1 0 hvala 0
14 godina
neaktivan
offline
Zadatak u C -u

Da to je istina, pa zato moja fja pokupi i taj znak u drugom citanju ...

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Zadatak u C -u

ok, ispravio dio al i dalje zeza, moze li mi netko kome radi od Vas poslati to u PP -u....jednostavno citam kod i ne vidim....nakon par  sati photoshopa nemojte zamjerit. Sutra do ponoc moram predat...pa evo budite dobe duše....

15 godina
neaktivan
offline
Re: Zadatak u C -u
$rky kaže...

ok, ispravio dio al i dalje zeza, moze li mi netko kome radi od Vas poslati to u PP -u....jednostavno citam kod i ne vidim....nakon par  sati photoshopa nemojte zamjerit. Sutra do ponoc moram predat...pa evo budite dobe duše....

 

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

void izracunOtpora();
void izracunKapac();

int main()
{
    printf("Ovaj program ce izracunati otpor odnosno kapacitet spoja ovisno o vasem izboru");
    printf("\nAko zelite izracunavati otpor upisite R , a ako zelite izracunavati kapacitet upisite C: ");
   
    char a;
    scanf("%c", &a);
   
    if (a=='R' || a=='r')
        izracunOtpora();
    else if (a=='C' || a=='c')
        izracunKapac();
    else
        printf("To nije bilo ponudjeno!!%c",a);

    system("pause");
    return 0;
}

void izracunOtpora()
{
    printf("Izabrali ste izracunavati otpore.\nDa li su otpornici u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P. ");
   
    char b;
   
    getchar();
    scanf("%c",&b);
   
    printf("Koliko se otpornika nalazi u spoju? ");
   
    int brOtpornika;
    scanf("%d", &brOtpornika);
   
    float otpornici[brOtpornika];
    for (int i=0; i<brOtpornika; i++)
    {
        printf("Unesi vrijednost %d otpornika: ", i+1);
        scanf("%f", &otpornici[i]);
    }
   
    float ukupniOtpor = 0;
    if (b=='s' || b=='S')
    {
        int i;
        for (i=0; i<brOtpornika; i++)
        {
            ukupniOtpor = ukupniOtpor + otpornici[i];
        }
        printf("Ukupna vrijednost otpora je %f Ohma.\n", ukupniOtpor);
    }
    else if (b=='P' || b=='p')
    {
        for(int i=0; i<brOtpornika; i++)
        {
            ukupniOtpor = ukupniOtpor + (1/otpornici[i]);
        }
        ukupniOtpor = 1/ukupniOtpor;
        printf("Ukupna vrijednost otpora je %f Ohma.\n", ukupniOtpor);
    }
    else
        printf("To nije bilo ponudjeno!");
}

void izracunKapac()
{
    printf("Izabrali ste izracunavati kapacitet.\nDa li su kondenzatori u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P. ");
   
    char b;

    getchar();
    scanf("%c", &b);
   
    printf("Koliko se kondenzatora nalazi u spoju? ");
   
    int brKondenzatora;
    scanf("%d", &brKondenzatora);
   
    float kondenzatori[brKondenzatora];
    for (int i = 0; i<brKondenzatora; i++)
    {
        printf("Unesi vrijednost %d kondenzatora: ", i+1);
        scanf("%f", &kondenzatori[i]);
    }
   
    float ukupniKapac = 0;
    if (b=='s' || b=='S')
    {
        for (int i = 0; i<brKondenzatora; i++)
        {
            ukupniKapac = ukupniKapac + kondenzatori[i];
        }
        printf("Ukupna vrijednost kapaciteta je %f Farada.\n", ukupniKapac);

    }
    else if (b=='P' || b=='p')
    {
        for(int i = 0; i<brKondenzatora; i++)
        {
            ukupniKapac = ukupniKapac + (1/kondenzatori[i]);
        }
        ukupniKapac = 1/ukupniKapac;
        printf("Ukupna vrijednost kapaciteta je %f Farada.\n", ukupniKapac);

    }
    else
        printf("To nije bilo ponudjeno!");
}

Ispravljena verzija, glavne greske su bile u ne-ciscenju input buffera prije prvog poziva funkcije scanf u funkcijama izracunKapac() i IzracunOtpora(), zbog cega je pitanje o serijskom ili paralelnom spoju u obje funkcije bilo glatko preskoceno. To sam rijesio praznjenjem input buffera pozivom na getchar() prije scanf() poziva, iako bi mozda puno pametnije rijesenje bilo izbjegavati scanf.

 

Druga greska je bila u petlji u kojoj se unose vrijednosti pojedinih kondenzatora/otpornika. Naime falio ti je & znak pa treba ici:

scanf("%f", &kondenzatori[i]);

umjesto

scanf("%f", kondenzatori[i]); (sto si ti radio, meni se na tom mjestu tvoj program rusio).

 

Nadalje imao si problem u podfunkcijama kod provjere vrijednosti varijable 'b'. Kada bi korisnik unio "s" za serijski spoj, izvrsio bi se kôd za serijski spoj, ali onda bi doslo do provjere za paralelni spoj, tu provjeru ne bi prosao pa bi se izvrsio "else" dio, te bi dobio poruku "To nije bilo ponudjeno!". Nije problem koji utjece na tocnost programa, ali zivcira, pa sam to ispravio tako da sam drugi "if" pretvorio u "else if".

 

Sredio sam neke probleme u formatiranju, jer mi je ono izgledalo prilicno nabacano. Zasto ne stavljate (vidao sam to i prije kod nekih) razmak izmedu include direktive i imena headera. Umjesto ovog:

#include <stdlib.h> vi imate ovo: #include<stdlib.h>

Takoder conio.h je potpuno nepotreban.

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put sub 9.7.2011 13:51 (rustweaver).
14 godina
neaktivan
offline
Re: Zadatak u C -u
rustweaver kaže...
$rky kaže...

ok, ispravio dio al i dalje zeza, moze li mi netko kome radi od Vas poslati to u PP -u....jednostavno citam kod i ne vidim....nakon par  sati photoshopa nemojte zamjerit. Sutra do ponoc moram predat...pa evo budite dobe duše....

 

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

void izracunOtpora();
void izracunKapac();

int main()
{
    printf("Ovaj program ce izracunati otpor odnosno kapacitet spoja ovisno o vasem izboru");
    printf("\nAko zelite izracunavati otpor upisite R , a ako zelite izracunavati kapacitet upisite C: ");
   
    char a;
    scanf("%c", &a);
   
    if (a=='R' || a=='r')
        izracunOtpora();
    else if (a=='C' || a=='c')
        izracunKapac();
    else
        printf("To nije bilo ponudjeno!!%c",a);

    system("pause");
    return 0;
}

void izracunOtpora()
{
    printf("Izabrali ste izracunavati otpore.\nDa li su otpornici u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P. ");
   
    char b;
   
    getchar();
    scanf("%c",&b);
   
    printf("Koliko se otpornika nalazi u spoju? ");
   
    int brOtpornika;
    scanf("%d", &brOtpornika);
   
    float otpornici[brOtpornika];
    for (int i=0; i<brOtpornika; i++)
    {
        printf("Unesi vrijednost %d otpornika: ", i+1);
        scanf("%f", &otpornici[i]);
    }
   
    float ukupniOtpor = 0;
    if (b=='s' || b=='S')
    {
        int i;
        for (i=0; i<brOtpornika; i++)
        {
            ukupniOtpor = ukupniOtpor + otpornici[i];
        }
        printf("Ukupna vrijednost otpora je %f Ohma.\n", ukupniOtpor);
    }
    else if (b=='P' || b=='p')
    {
        for(int i=0; i<brOtpornika; i++)
        {
            ukupniOtpor = ukupniOtpor + (1/otpornici[i]);
        }
        ukupniOtpor = 1/ukupniOtpor;
        printf("Ukupna vrijednost otpora je %f Ohma.\n", ukupniOtpor);
    }
    else
        printf("To nije bilo ponudjeno!");
}

void izracunKapac()
{
    printf("Izabrali ste izracunavati kapacitet.\nDa li su kondenzatori u serijskom ili paralelnom spoju?\nZa serijski spoj upisite S, a za paralelni P. ");
   
    char b;

    getchar();
    scanf("%c", &b);
   
    printf("Koliko se kondenzatora nalazi u spoju? ");
   
    int brKondenzatora;
    scanf("%d", &brKondenzatora);
   
    float kondenzatori[brKondenzatora];
    for (int i = 0; i<brKondenzatora; i++)
    {
        printf("Unesi vrijednost %d kondenzatora: ", i+1);
        scanf("%f", &kondenzatori[i]);
    }
   
    float ukupniKapac = 0;
    if (b=='s' || b=='S')
    {
        for (int i = 0; i<brKondenzatora; i++)
        {
            ukupniKapac = ukupniKapac + kondenzatori[i];
        }
        printf("Ukupna vrijednost kapaciteta je %f Farada.\n", ukupniKapac);

    }
    else if (b=='P' || b=='p')
    {
        for(int i = 0; i<brKondenzatora; i++)
        {
            ukupniKapac = ukupniKapac + (1/kondenzatori[i]);
        }
        ukupniKapac = 1/ukupniKapac;
        printf("Ukupna vrijednost kapaciteta je %f Farada.\n", ukupniKapac);

    }
    else
        printf("To nije bilo ponudjeno!");
}

Ispravljena verzija, glavne greske su bile u ne-ciscenju input buffera prije prvog poziva funkcije scanf u funkcijama izracunKapac() i IzracunOtpora(), zbog cega je pitanje o serijskom ili paralelnom spoju u obje funkcije bilo glatko preskoceno. To sam rijesio praznjenjem input buffera pozivom na getchar() prije scanf() poziva, iako bi mozda puno pametnije rijesenje bilo izbjegavati scanf.

 

Druga greska je bila u petlji u kojoj se unose vrijednosti pojedinih kondenzatora/otpornika. Naime falio ti je & znak pa treba ici:

scanf("%f", &kondenzatori[i]);

umjesto

scanf("%f", kondenzatori[i]); (sto si ti radio, meni se na tom mjestu tvoj program rusio).

 

Nadalje imao si problem u podfunkcijama kod provjere vrijednosti varijable 'b'. Kada bi korisnik unio "s" za serijski spoj, izvrsio bi se kôd za serijski spoj, ali onda bi doslo do provjere za paralelni spoj, tu provjeru ne bi prosao pa bi se izvrsio "else" dio, te bi dobio poruku "To nije bilo ponudjeno!". Nije problem koji utjece na tocnost programa, ali zivcira, pa sam to ispravio tako da sam drugi "if" pretvorio u "else if".

 

Sredio sam neke probleme u formatiranju, jer mi je ono izgledalo prilicno nabacano. Zasto ne stavljate (vidao sam to i prije kod nekih) razmak izmedu include direktive i imena headera. Umjesto ovog:

#include <stdlib.h> vi imate ovo: #include<stdlib.h>

Takoder conio.h je potpuno nepotreban.

C:\Users\SRKI\Desktop\konacno ispravno.c||In function `izracunOtpora':|
C:\Users\SRKI\Desktop\konacno ispravno.c|41|error: 'for' loop initial declaration used outside C99 mode|
C:\Users\SRKI\Desktop\konacno ispravno.c|59|error: 'for' loop initial declaration used outside C99 mode|
C:\Users\SRKI\Desktop\konacno ispravno.c||In function `izracunKapac':|
C:\Users\SRKI\Desktop\konacno ispravno.c|85|error: 'for' loop initial declaration used outside C99 mode|
C:\Users\SRKI\Desktop\konacno ispravno.c|94|error: 'for' loop initial declaration used outside C99 mode|
C:\Users\SRKI\Desktop\konacno ispravno.c|103|error: 'for' loop initial declaration used outside C99 mode|
||=== Build finished: 5 errors, 0 warnings ===|

15 godina
neaktivan
offline
Re: Zadatak u C -u
$rky kaže...

C:\Users\SRKI\Desktop\konacno ispravno.c|41|error: 'for' loop initial declaration used outside C99 mode|
....

A lol, koji ti to IDE koristis? No dobro, hoces ANSI C? Evo:

prepravi sve petlje:

for (int i = 0; i<brKondenzatora; i++)

 

U ovo:

int i;

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

 

Prvi puta strpam nekome deklaraciju countera unutar deklaracije petlje (a inace to nikada ne radim, pa mi prigovaraju) i odmah problemi... -.-'

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put sub 9.7.2011 14:30 (rustweaver).
14 godina
neaktivan
offline
Zadatak u C -u

sad sluša.....:) Hvala ....

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Zadatak u C -u
$rky kaže...

sad sluša.....:) Hvala ....

To ti je do ekstenzije source datoteke u DevCpp-u. Kada je ekstenzija .c onda MinGW compiler pokusava kompajlirati u ANSI C modu (koristeci GCC), a kada je ekstenzija .cpp onda se aktivira G++ kompajer koji je C++ kompajler i podrzava sve te moderne konstrukte...

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put sub 9.7.2011 14:38 (rustweaver).
16 godina
neaktivan
offline
Re: Zadatak u C -u
rustweaver kaže...

To ti je do ekstenzije source datoteke u DevCpp-u. Kada je ekstenzija .c onda MinGW compiler pokusava kompajlirati u ANSI C modu (koristeci GCC), a kada je ekstenzija .cpp onda se aktivira G++ kompajer koji je C++ kompajler i podrzava sve te moderne konstrukte...

Cuj ti njega.. moderni konstrukti ... {#}

All religions are the same: religion is basically guilt, with different holidays.
15 godina
neaktivan
offline
Re: Zadatak u C -u
drnde kaže...

Cuj ti njega.. moderni konstrukti ... {#}

A cuj to ti je relativno... {#}

 

Neki jos nisu dosli u 1999-tu :D

So then I typed GOTO 500 - and here I am!
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice