Kezdőoldal » Számítástechnika » Programozás » Megcsináltam sprintf-el egy...

Megcsináltam sprintf-el egy programot csak annyi a baj vele, hogy megadok neki egy számot és például ha a szám 10 akkorcsak a 7-est irja ki 2,3,5,7 helyett, a program GUI-val van megcsinálva elsöre csinálok ilyet mit hibáztam el?

Figyelt kérdés

Megnéztem a cmd-s változatot amit csináltam printf meg scanfekel ugy müködik valami hiba az sprintfnél van szerintem:

if(strcmp(val, kiir_list[5])==0)

{



int M; //Meddig vizsgáljuk a számokat


GetWindowText(beker[0], bekert, 20);

sscanf(bekert, "%d", &M);

int tomb [M+1]; //tömböt hozunk létre

char s[M+1];

tomb[0]=tomb[1]=0; // a 0-át és az 1-et alapból hamisnak vesszük, hiszen nem prímek.

for (int i=2;i<=M;++i) tomb[i]=1; //2-tol indítjuk a for-t, alapból mindent igazra állítunk.

int j=2; //indexet ezzel figyelem

while (j<=M) {

for(int i=j*j; i<=M; i+=j) tomb [i] = 0;// a többszörösök logikai értékét hamisra állítom

while(tomb[++j]==0);} // ha a következo érték hamis, akkor továbbugrik a következore



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



if(tomb[i]==1) //megnézzük hogy igaz e

sprintf (s, "%d ", i);

SetWindowText(kiir[1], s);



}


2013. ápr. 29. 13:45
1 2
 1/18 A kérdező kommentje:
Eratoszthenész szitája lenne ami annyit jelent h megadok 1 számot és addig kiirja a primszámokat a programrészlet.
2013. ápr. 29. 13:48
 2/18 anonim ***** válasza:

Ezt borzalmas nekem még látni is.


Jó hogy csak a hetest látod, ha folyamatosan újradeklarálod a tömböt.

a szita nagyon rosszul van implementálva. Feleslegesen dolgozol tömbben. Elég lenne úgy gondolkodni, az osztók számát összeadnád, és ha ez nagyobb mint 2( ugye 1 és önmagával oszható a szám)


De ha mindenáron tömbben dolgozol, akkor tüntesd el, a tömb[M+1].

Előre hozz létre egy olyan tömböt, mint amekkora maga a szám.

int tömb[szam];

Ha dinamikus adatszerkezet kell, akkor használd a struktúrát.

Akkor a s[m+1] is baromság, újradefinálod a változót, csak a legutolsó eredménye marad meg. Ez porzalmas.


Primeket erasztothenész szitájával így tudsz előállítani.

int prime(unsigned int szam)

{

unsigned int i

unsigned int oszto=0;

for (i=1;i<szam-1;i++)

{

if (szam%i==0)

{

oszto++;

}

}

if (oszto==2)

{

return 1;

}

else

{

return 0;

}

}

int main()

{

printf("Meddig kéred a primeket? ( maxérték 65535);

scanf("%d",&a);

for(b=0;b<a;b++)

{

if(prime(b)==1)

{

printf("%d",b);

}

}

return 0;

}

a windows-os alkalmazásokhoz nem értek. De valami borzalmas a kódod. Ennél rosszabbat nem láttam még erre a feladatra.

2013. ápr. 29. 14:28
Hasznos számodra ez a válasz?
 3/18 A kérdező kommentje:
A kód müködik de azért megprobálom ugy ahogy te csináltad wikipédiás c++ programot alakitottam át c-be nézd meg : [link]
2013. ápr. 29. 14:38
 4/18 A kérdező kommentje:
A te változatod annyira se müködik mint az enyém :D
2013. ápr. 29. 14:55
 5/18 anonim ***** válasza:

De nem vettél figyelembe jó pár dolgot.

A c és a c++ közötti különbségeket.

Nem a printf a fő különbség.

c-ben változókat a program elején kell deklarálni a c++-ban már ez nincs így.

Ha tömbben csinálod, akkor felülírod az összes elemet egy újbőli deklarációval. Ez emiatt van csak 7. eleme.

másrészt.

De én a pszeudokód alapján nem így implementálnám őket.

Mindkettőt értem a pascal-ost meg a c++-osat is. De nem túl szép megoldás. Legalább egy függvénybe csinálná a feladatot.

2013. ápr. 29. 14:56
Hasznos számodra ez a válasz?
 6/18 anonim ***** válasza:

" c-ben változókat a program elején kell

deklarálni a c++-ban már ez nincs így."

LoL. Innentõl kezdve légszi.ne.osztogass segítséget programozás témakörben jó?

2013. ápr. 29. 15:06
Hasznos számodra ez a válasz?
 7/18 anonim ***** válasza:
A kódod meg egy nagy rakás szar és semmi köze a szitához, kedves "segítõ"...
2013. ápr. 29. 15:09
Hasznos számodra ez a válasz?
 8/18 anonim ***** válasza:

Jah mert dierkt szintax error-al csináltam, hogy te is dolgozz valamit.

Azért nem működik.

Keresd meg a szintaktiai hibás és működni fog.

Kódod ettől még hibás( és logikailag) hibás.

2013. ápr. 29. 15:22
Hasznos számodra ez a válasz?
 9/18 anonim ***** válasza:
LOL, okoskodó kis takony, kérdezõ ne is foglalkozz vele, mintha itt se lenne. :D
2013. ápr. 29. 15:26
Hasznos számodra ez a válasz?
 10/18 A kérdező kommentje:

Itt a program cmds változata c-ben ez mukodik rendesen:

include <stdio.h>


void szita()

{

int M; //Meddig vizsgáljuk a számokat



scanf("%d", &M);

int tomb [M+1]; //tömböt hozunk létre

char s[M+1];

tomb[0]=tomb[1]=0; // a 0-át és az 1-et alapból hamisnak vesszük, hiszen nem prímek.

for (int i=2;i<=M;++i) tomb[i]=1; //2-tol indítjuk a for-t, alapból mindent igazra állítunk.

int j=2; //indexet ezzel figyelem

while (j<=M) {

for(int i=j*j; i<=M; i+=j) tomb [i] = 0;// a többszörösök logikai értékét hamisra állítom

while(tomb[++j]==0);} // ha a következo érték hamis, akkor továbbugrik a következore



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

if(tomb[i]==1) //megnézzük hogy igaz e


printf ("%d ", i);



}


int main()

{

szita();

}


Fent van az a programrészlet amit átraktam a Guis verzióba csak valamiért a GUI-s verzióban csak az utólsó primet irja ki a szám után valamit biztos a kiirásnál rontottam el az sprintf az egész tipusu i-t átalakitja stringé csak azt nem tudom mit rontottam el:

sprintf (s, "%d ", i);

SetWindowText(kiir[1], s);

2013. ápr. 29. 15:45
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!