Kezdőoldal » Számítástechnika » Programok » A következő c++ program...

A következő c++ program rekurziós modszer?

Figyelt kérdés

Ha nem akkor miért , és hogyan kéne ? Könyvből tanulok egyedül, igy értettem meg. Kérlek javitsatok ki ha nem jó .

A program fut, Kiirja egy szám, prim számjegyeinek szorzatát.


#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int prim(int n)

{int k=1,p ;

if (n==0) return 0;

else

while (n>0)

{ p=n%10;

n=n/10;

if((p==1)||(p==2)||(p==3)||(p==5)||(p==7))

k*=p;

else

k=k;}

return k;

}


int main()

{

int n;

printf("Kerek egy szamot:");

scanf("%d",&n);

printf("A primek szorzata = %d\n",prim(n));

system("pause");

}


2013. jún. 14. 00:39
 1/8 anonim ***** válasza:
Először nézz utána, hogy mi is az a rekurzió és máris világos lesz számodra.
2013. jún. 14. 00:46
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
Mituán kikinlódtam magamból, hogy megirjam ezt a programot, kicsit hasznosabb válaszra számitottam. Kedves válaszoló, szerintem világos, hogy zavaros számomra a rekurzió fogalma, és valószinüleg már utánanéztem de még midnig nem tiszta valami :)
2013. jún. 14. 00:50
 3/8 A kérdező kommentje:
Én úgy értettem, hogy a rekurzió abból áll, hogy felosztom a feladatot al-részekre, amik elvégzik a dolgukat és a main csak bekéri a végeredményt. Ha ez jó, akkor szerintem a programom is jó . Viszont ha rosszul értettem meg akkor valósdzinüleg a programom hibás a kérelemhez képest ahol rekurziós módon kell megoldani a feladatot.
2013. jún. 14. 00:54
 4/8 anonim ***** válasza:
100%

"Én úgy értettem, hogy a rekurzió abból áll, hogy felosztom a feladatot al-részekre, amik elvégzik a dolgukat és a main csak bekéri a végeredményt."


Nem.

A rekurzió olyan eljárás, amikor pl. egy függvény a kódjában önmagát hívja meg. A kódod akkor használna rekurziót, ha mondjuk a prim(int n) függvényen belül lenne pl. egy prim(1) hívás.


Ez hátha segít.

[link]

2013. jún. 14. 01:04
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:
átnézem, köszönöm
2013. jún. 14. 01:08
 6/8 A kérdező kommentje:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>


int rek(int x){

if(x<=9&&x==2||x==3||x==5||x==7) return x;

else if (x<=9) return 1;

if(x%10==2||x%10==3||x%10==5||x%10==7) return(x%10)*rek(x/10);

else return rek(x/10);

}

int main(){

int x;

printf("Kerem a szamot x=");scanf("%i",&x);

printf("prim sz szorzat:%i\n",rek(x));

system("pause");

}



igy jó ?

2013. jún. 14. 01:12
 7/8 zsomkovacs ***** válasza:

Rekurzívnak mindenképpen rekurzív, illetve első ránézésre úgy tűnik, helyesen is működik.


Azért pár jótanács (nem éppen rekurzió témában):

- kétszer is végigírtál egy olyan sort, amiben ellenőrzöd egy számjegyről, hogy prím-e. Egyszerűsíti és átláthatóbbá teszi a kódot, ha ennek a feltételnek létrehozol egy függvényt. Pl. bool primjegye(int n) {

return (n==2) || (n==3) || (n==5) || (n==7);

}

Az feltételeid pedig valahogy majd így néznek ki:

if (primjegye(x)) {...

if (primjegye(x%10)) {...


Általában ha egy kódrészletet sokszor használsz, célszerű azt egy külön függvénybe kihelyezni, mert később ha módosítani akarod majd a programot, sokkal könnyebben megérted majd, hogyan működött.


- Nem tudom, hogy ez a bemásolás során lett ilyen, vagy eleve így írtad (esetleg a telefonom tördel rosszul), de a programot célszerű valamiféle "style guide" szerint építeni. A fordítónak nem gond, ha így írsz egy kódot:

while( igazeafeltetel (feltetel )) {a=2;if (a ==2){

printf("kiskutya" );}}

Csak kellően nagy projekt esetén már a zárójelpárokat sem találod meg (a lehagyott zárójelek kifejezetten nagy gondot jelentenek ilyen kódban, a fordító ugyanis nem találja meg a hiba helyét), nemhogy átlásd, hogy mi hova tartozik. Sokkal szebb ez így:

while (igazeafeltetel(feltetel) )

{

    a = 2;

    if (a == 2)

nbsp;   {

        printf("kiskutya");

    }

}


Javaslom, hogy olvass el pár ilyen style guide-ot, és válassz egy olyat, ami tetszik neked, akár módosíthatsz is rajta, ha valamit te máshogy gondolsz, ezek nincsenek kőbe vésve (munkahelyen meg úgyis megmondják, hogy kb. hogy nézzen ki a kód). A lényeg az, hogy következetesen alkalmazd a szabályokat, és átlátható legyen a kód. Ezt célszerű minél előbb elkezdeni. Eleinte még figyelned kell majd rá, hogy szépen tördelj, de egy idő után automatikusan úgy írod majd a kódot, fel sem fog tűnni.

2013. jún. 14. 07:29
Hasznos számodra ez a válasz?
 8/8 zsomkovacs ***** válasza:

Na, a szépen írt kódot sikerült elrontanom, úgyhogy még egyszer:


while (igazeafeltetel(feltetel) )

{

    a = 2;

    if (a == 2)

    {

        printf("kiskutya");

    }

}

2013. jún. 14. 07:33
Hasznos számodra ez a válasz?

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!