Trazim pomoc u programiranju u c-u

poruka: 22
|
čitano: 6.197
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Trazim pomoc u programiranju u c-u

Napisati program koji izracunava pribliznu vrijednost funkcije ex  prema slijedecoj formuli;

 

e  ≈  S= 1+ x +  x2  +  3  +.....+ xn                 n=1,2,3,.......

                     1!    2!      3!              n! 

 

brojevi x i n se unose sa standardnog ulaza. Nakon izracunavanja sume, program treba izracunati apsolutnu razliku d prema formuli:

 

d=| S - exp(x) |       gdje je exp(x) vrijednost funkcije ex  u tocki x izracunate pomocu funkcije exp() koja se nalazi  u biblioteci math.h.

 

za izracunavanje apsolutne vrijednosti treba koristiti funkciju fabs() koja je takoder sadrzana u datoteci math.h. nakon izracunate sume obavezno

koristiti petlju while,,, a petljom do while zabraniti unos neispravnih vrijednosti

 

 

zahvalan na bilo kakvoj pomoći

bole
Poruka je uređivana zadnji put čet 28.10.2010 0:12 (Boškobuha).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

Koliko se sjećam, već si to pitao. Što ti ovdje točno nije jasno? Kako koristiti petlju za izračunavanje suma? Kako zabraniti unos krivih vrijednosti? Faktorijele?

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put čet 28.10.2010 11:19 (Luuka).
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

Evo dosta brzog koda za računanje e^x, uz naravno napomenu da čim veći n stavimo dobit ćemo bolju aproksimaciju. Uvjeta na x nema (jer taj red ima radijus konvergencije +beskonačno). Također, za x bliže nuli će trebati manji n za dobru aproksimaciju nego za onaj dalje od nule.

Ti pokušaj napraviti sporu verziju, dakle da računaš x^k i k! u svakom koraku petlje (oprez, možda ćeš trebati long int za faktorijele)

 

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

int main()
{
    double x,suma=1.0,greska,sumand=1.0;
    int k=1,n;
   
    printf("Ucitaj x: "); scanf("%lf",&x);
    do
    {
      printf("Ucitaj n: "); scanf("%d",&n); 
       
    } while(n<0);
   
   
    for (k=1;k<=n;++k)
    {
        sumand*=(x/k);
        suma+=sumand;
    }
   
    //izračunavanje sume sa while petljom:
   
    /*            
    while(k<=n)
    {
        sumand*=(x/k);
        suma+=sumand;
        ++k;
    }  
    */
   
    printf("e^x je priblizno: %g\n",suma);
    greska=fabs(suma-exp(x));
    printf("Greska je: %g\n",greska);
   
    system("PAUSE");
    return 0;
}

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put čet 28.10.2010 11:46 (Luuka).
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

faktorjele su mi jasne matematički... ali to nikako nemogu prenjeti u c,,, u biti uopće ne razumijem koju cu petlju koristiti,,,, kad dobijem zadatak,,, a petlje sam nastrebo napamet,,,Pitanja koja sam ja trebao postaviti,,, si postavio ti,,,, Iako ih ja i nisam znao postaviti,,,,, JER NEZNAM STA NEZNAM,,,, općenito mi je okruzenje u kojem radimo sasvim novo,,,

 

kako zabraniti unos krivih vrijednosti???

 

zadatak je slican onom proslom,,, ali nije isti da ti pokazem kako sam ga rjesio: naravno uz tvoju pomoc

 

 

#include <stdio.h>

int main()
{
    int k,n;   /*faktorijeli idu od k do n s tim da znamo da je pocetno k=2 */
    float x=1,s=1; /* brojevi uz x idu od 2 do n, k=2 */ /* s je oznaka za sumu*/
    double f=1;      /*f je oznaka za faktorijel*/

    printf("\nUnesite broj n:  ");
    scanf("%d",&n);
    printf("Unesite broj x:  ");
    scanf("%f",&x);


    if(n>=1 && n<=15 && x>=-20. && x<=20.) /*uvijeti unosenja brojeva x i n */
    {
        for(k=2;k<=n;k=++k)   /* program će povećavati k za 1 sve dok se ne "pogazi" uvijet k<=n */
                              /*umijesto ++k mogli smo staviti i k+1*/
        {
          f=f*k;
          s=s+(k*x/f);    /*formule za faktorijele i sumu*/
        }
        printf("Suma je: S(%0.f) = %2.1f",x,s); /*2.1 uz f oznacava da će rezultat biti sa jednom decimalom*/
    }
     else
    printf("\nNisu ucitane dozvoljene vrijednosti!");
    printf("\n\n\n");

    return 0;
}

bole
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

ej kako da program pišem u plavom prozoru kao i ti

 

bole
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

Evo jako kratkih smjernica za petlj, koje uvijek pale kod odabira:

FOR - kad unaprijed znaš koliko koraka trebaš napraviti

WHILE - kad ne znaš unaprijed koliko koraka treba napraviti

DO...WHILE - također ne znaš koliko ćeš koraka napraviti, no znaš da moraš BAREM JEDAN.

 

Zbog toga do...while super dođe kod unosa, kada se želi zabraniti unos nedozvoljenih vrijednosti. Pogledaj kako sam ja gore napravio u kodu.

Znao sam da trebam barem jednom učitati n, i onda ako je ispravan, gotov sam, a ako nije, moram ponoviti unos. Ne znam koliko puta može korisnik krivi n unesti, pa tu ide while, a znam da moram bar jednom, pa je do-while.

Nije ni tvoj način loš, no dozvoljavaš samo jedan unos, ako je pogrešan, program završava.

 

Dobro si prouči petlje, nema kod programiranja učenja napamet, pogotovo ne tako važnih stvari. Petlje se koriste stalno i moraju ti biti posve jasne. A najlakše kako ćeš ih razumjeti je da ih provrtiš na ruke, tj uzmeš olovku i papir i napišeš kaj se događa u kojem koraku.

 

U tvom kodu k=++k možeš zamijeniti samo sa ++k. Ta operacija će povećati k, tako da ga ne trebaš još jednom spremati u k. Ili ++k (k++)  ili k=k+1. Kombinacija je suvišna.

 

Kao što sam rekao, prvo razumijeti petlje i kako one "trče", a onda se bacit na kodiranje. Nema napamet :D

 

A za plavi prozor, označiš tekst koji je kod, i onda tamo gdje ti piše "stilovi", staviš kod.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put čet 28.10.2010 18:26 (Luuka).
14 godina
neaktivan
offline
Trazim pomoc u programiranju u c-u

ej ak si za da mi komentiraš,,, još jedan zadatak iz matrica,,,, AL POSTO sam ja tutkum trebat ce mi malo vise da skontam haha

 

Data je matrica ocjene dimenzija 20x5. Svaki red matrice predstavlja jednog učenika a svaka kolona ocjenu 1-5. U matrici se nalaze

broj ocjena koje je ucenik dobio PRIMJER

 

                     ocjena1       ocjena 2        ocjena 3           ocjena 4               ocjena 5    

Ucenik1             0                 2                    3                       5                          3

Ucenik2              0                 0                    2                       5                          6

Ucenik3              1                 5                    4                       1                          2

 

U ovom slucaju prvi ucenik je imao nula jedinica, 2 dvice, 3 trice,  5 cetvorki, i 3 petice

Druggi ucenik    0 jedinica, 0 dvica, 2 trice,, itd.......

 

potrebno je kreirati i iapiaati na ekranu niz od 20 elemenata koji predstavljaju prosjecne ocjene svakog ucnika.

Sudenti koji imaju barem jednu jedinicu su pali tako da za njihov prosjek treba staviti 1,0 bez obzira na ostale ocjene

 

Dakle u primjeru iznad prosjeci su 3.69 ,    4.31 , 1.0 ....

Treba definirati br ucenika kao konstantu. pilikom testiranja prograa koristiti manji broj ucenika

bole
Poruka je uređivana zadnji put pon 22.11.2010 15:57 (Boškobuha).
 
0 0 hvala 0
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

kao što kaže jedan moj prijatelj " TI SI MOJA LEGENDICA" hahah  sve znaš čovječe,,, Kad si ovako na forumu ???kojim danima da te ufatim???,,,, moram te iskoristiti kao potencijalni izvor znanja,,, hahahah,,, jebote,,, od toliko ljudi nitko ne komentira nista osim tebe,,,, NOW I'm wondering why

 

NITKO NISTA NEZNA,,, ILI SU IM MOJA PITANJA SUVIŠE GLUPA DA BI MI ODGOVARALI,,,,,ali ko što kaže jedan profesor nema glupih pitanja!!! hahah zivio pajdo

bole
Poruka je uređivana zadnji put čet 28.10.2010 19:14 (Boškobuha).
17 godina
offline
Trazim pomoc u programiranju u c-u

Faktorjel je lako dobiti u petlji:

npr računaš 5! u petlji while:

 

#include<iostream>

using namespace std;

 

int main()

{

int n = 5;

double fact = 1;  // varijabla fact je postavljena na 1 jer u nju množiš brojeve u petlji while

 

while(n>1) {

fact *= n;   // dakle, dok god je n>1 ovdje množš fact = fact * n i rezultat spremaš u fact

n--;        // smanjuješ n za 1

}

 

cout<< fact << endl;

return 0;

}

 

Pošto nam je n = 5, petlja while se izvodi dok n ne postane 1, a onda se prekida i program ide na prvu liniju koda iza bloka petlje, dakle na liniju cout<< fact << endl;

Dakle, petlja se izvodi u više koraka, ova u 4 koraka:

1. korak : provjerava se da li je zadovoljen uvjet (n>1), a pošto je n=5 ulazi se u blok petlje, a onda se računa fact = 5 * fact - dakle - pošto je fact 1 računa se fact = 5*1 i varijabla fact dobije vrijednst 5,

zatim varijabla n se smanjuje za 1 izrazom n--, dakle postaje n = 4;

2. korak : provjerava se da li je zadovoljen uvjet (n>1), a pošto je sada n= 4, uvjet je ponovno zadovoljen i ulazi se u blok petlje, a onda se računa fact = 4 * fact, pošto je do sada varijabla fact imala vrijednost 5,

sada petlja računa fact = 4 * 5 i vrijednost varijable fact postaje fact = 20, zatim se varijabla n smanjuje za 1 izrazom n--; i postaje n=3

Treći i četvrti korak su potpuno identični, a kad se izvrši četvrti korak n postaje n=1 i petlja se prekida jer više ne zadovoljava postavljeni uvjet n>1

Kad se petlja prekine u varijabli fact imamo izračuati 5!, praktički smo koristili način rada petlje while da bi dobili izračun 5! = 1 * 2 * 3 * 4 * 5 

 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

I ovaj zadatak je jedan od onih za koje ti trebaju petlje i glavni dio zadatka je baratnje s petljama. Bez njih ništa.

 

Najprije razmisli kako bi to radio na ruke...

išao bi stupac po stupac (predmet po premet) i računao prosjek. Ako bi koja od ocjena bila 1, onda si odmah gotov, i stavljaš da je prosjek=1.

 

Dakle ako ti je ono sve spremljeno u matricu A, a prosjeke spremaš u niz prosjek, onda bi išlo nekako ovako:

 

for (stup=0;stup<br_stupaca;stup++)  //idemo po stupcima

{

      prosjek[stup]=0.0;  //svakom stupcu stavimo prosjek na nulu

 

      for (red=0;red<br_red;red++) //idemo po recima (po učenicima)

          if ( A[red][stup]==1 ) { prosjek[stup]=1; break; }//ako postoji jedinica, gotovi smo

          else prosjek[stup]+=A[red][stup]; //inače pribrojimo u prosjek

 

      if ( prosjek[stup]!=1 ) prosjek[stup]/=br_red; //ako nije prosjek=1, onda još onu sumu treba podijeliti sa brojem učenika da dobijemo prosjek

 

}

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Trazim pomoc u programiranju u c-u

Znači  ono fabs označava apsolutnu vrijednost u proslom zadatku

bole
 
0 0 hvala 0
15 godina
offline
RE: Trazim pomoc u programiranju u c-u
Boškobuha kaže...

 

Treba definirati br ucenika kao konstantu. pilikom testiranja prograa koristiti manji broj ucenika

  Onda nam reci koji broj da stavimo kao konstantu!

Peritus inimicus
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

@Floki - zašto je fakt double? Treba biti int, ili long int, nema tu realnih brojeva. A faktorijele je po meni ljepše u for petlji izvest, ipak se zna koliko koraka treba. Uz to, dečko radi u čistom C-u, tako da ga tvoj kod u c++-u može samo zbunit (iako su petlje iste).

 

Inače za najsporiju (ali i najlakše rješivu) varijantu onog zadatka sa e^x, može se napraviti funkcija koja računa faktorijelu, i koristiti pow iz math.h biblioteke za računati potenciju ali to bi jaaako usporilo program. :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
Boškobuha kaže...

Znači  ono fabs označava apsolutnu vrijednost u proslom zadatku

Tako je. I ne boj se upotrijebit Google, on ti odmah da kako se funkcija koristi uz par primjera (prvi link iz rezultata)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
17 godina
offline
RE: Trazim pomoc u programiranju u c-u
Luuka kaže...

@Floki - zašto je fakt double? Treba biti int, ili long int, nema tu realnih brojeva. A faktorijele je po meni ljepše u for petlji izvest, ipak se zna koliko koraka treba. Uz to, dečko radi u čistom C-u, tako da ga tvoj kod u c++-u može samo zbunit (iako su petlje iste).

 

Inače za najsporiju (ali i najlakše rješivu) varijantu onog zadatka sa e^x, može se napraviti funkcija koja računa faktorijelu, i koristiti pow iz math.h biblioteke za računati potenciju ali to bi jaaako usporilo program. :D

Čini mi se da su mu tražli baš while, a double sam uzeo jer pokriva veći raspon vrijednosti

istina, uzeo sam C++ sintaksu, ali cilj mi je bio nešto drugo, pokazati mu način rada petlje

sa  faktorjelom sam mu dao rješenje prije neki dan za malo modificiranu funkciju od ove koju je tražio

http://www.bug.hr/forum/topic/programiranje/problem-c-programiranju/28895.aspx

Poruka je uređivana zadnji put čet 28.10.2010 19:39 (Floki).
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
mozemo staviti 10 ucenika recimo
bole
16 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
Boškobuha kaže...
mozemo staviti 10 ucenika recimo

Možeš stavit koliko hoćeš, broj učenika je zapravo broj redaka, a to je kod mene br_red. Tak da ti je skroz svejedno jel ih 2 ili 500.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
jest tražili su mi strogo while,,, a sa do-while su mi rekli da zabranim unos neispravnih vrijednosti x i n
bole
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u

uvijek postave neki novi uvijet sada su stavili da radim while i do-while

bole
Poruka je uređivana zadnji put čet 28.10.2010 19:58 (Boškobuha).
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
Luuka kaže...
Boškobuha kaže...
mozemo staviti 10 ucenika recimo

Možeš stavit koliko hoćeš, broj učenika je zapravo broj redaka, a to je kod mene br_red. Tak da ti je skroz svejedno jel ih 2 ili 500.

 oke

 

bole
17 godina
offline
Trazim pomoc u programiranju u c-u

Napravi sada taj zadatak sa pow i faktorjel

da vidimo jesi li skužio

 
0 0 hvala 0
14 godina
neaktivan
offline
RE: Trazim pomoc u programiranju u c-u
Floki kaže...

Napravi sada taj zadatak sa pow i faktorjel

da vidimo jesi li skužio

 ev na jedan način

 

#include <stdio.h>
#include <math.h>

int main ()
{
int n, i=1, fakt=1;
float x, suma=1.0, d1, d, x1=1;

do{
printf("Unesi broj x: ");
scanf("%f", &x);
}while(x>=2147483646 || x<=-2147483646);

do{
printf("\nUnesi broj n: ");
scanf("%d", &n);
}while(n<=0 || n>=15);


while(i<=n){
fakt*=i;
suma+=(x*x1)/(float)fakt;
x1*=x;
i++;
}

d=fabs(suma-exp(x));

if(d>0.1){
printf("VELIKA GRESKA.");
}

else if(0.01<d && d<=0.1){
printf("SREDNJA GRESKA.");
}

else{
printf("MALA GRESKA.");
}

return 0;
}

 

 

 

 

bole
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice