Kezdőoldal » Számítástechnika » Programozás » Hogyan kell a következő...

Hogyan kell a következő feladatot megoldani C-ben, illetve mi a hiba a megoldásomban?

Figyelt kérdés

Péter egy N-nél nem nagyobb pozitív egész számra gondolt. Ezen kívül azt is megmondta Pálnak, hogy a gondolt szám M-mel osztható. Mekkora valószínűséggel találja ki Pál elsőre a gondolt számot, ha jól tudja a matematikát?


Az én megoldásom ez lenne:

értem az alapelgondolást, hogy N-ig kéne egy ciklus, ami mindig növeli egy szám értékét, és növeli egy másikét, ha az osztható M-mel (tehát maradékosa 0 az eredmény)

(mivel a maradékos osztást csak egész számok esetén lehet elvégezni, így x és y egésznek lett deklarálva, de utána a normál osztást viszont csak már float-ban érdemes, hogy valós eredményt kapjak), azonban mindig 0-át kapok így is... hogyan lehetne ezt a lehető legegyszerűbben megoldani, illetve mit rontottam el a programomban?

igazából, ha próbaszerűen P helyére y-ot írok, hogy legalább a kedvező feltételeket kiírja-e jól, de akkor meg mindig 1-et kapok. Próbálkozni mindig N=6-al és M=2-vel szoktam, így P=0.5-nek kéne lennie.

Előre is köszönöm a segítséget!


#include <stdio.h>


int x=0, N, M, y=0;

float P, a,b;


int main()

{

printf("Ennél nem nagyobb: \n");

scanf("%f", &N);

printf("Ezzel osztható: \n");

scanf("%f", &M);


while (x<=N)

{

x++;

if ((x%M)==0.0) y++;

}

a=x;

b=y;

P=b/a;

printf("Valószínûség: %d\n", P);


return 0;

}


2015. szept. 19. 15:45
 1/10 anonim ***** válasza:

Nem néztem át az algoritmust, de "P=b/a;"

Mindig int lesz, ugyanis két intet osztasz.

Megoldás:

P=b/(float)a;

2015. szept. 19. 16:21
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

Janem, a és b is float.

Akkor nem szóltam.

2015. szept. 19. 16:21
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

"x%M)==0.0"

Ez mondjuk szintén csúnya.

Egyrészt int számot hasonlítasz lebegőpontossal. Minek?

Másrészt meg lebegőpontos számokat sosem hasonlítunk egyenlőséggel.

2015. szept. 19. 16:22
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

1/(n/m)


(a nevezőben egészosztás van)


Minek ide ciklus?

2015. szept. 19. 16:59
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
x miért lenne lebegőpontos? szerintem M és x ugyanúgy egész (M adott lesz, x pedig 0-ról indul és mindig egyel nő) és elvileg el kéne tudni végezni normálisan az osztást. A ciklus pedig azért kell, mert ha mond egy számot, akkor az annál kisebbeket sorban meg kell vizsgálni. vagy erre vagy valami ciklustól eltérő módszer is? nekem 1/(n/m) sem jön össze (hiszen ha egészosztás történik az már nem jó ott), illetve (float)-ot is próbáltam már, azzal sem ment...
2015. szept. 19. 21:20
 6/10 A kérdező kommentje:
Várj! Igazad van! Hiába deklaráltam egésznek, véletlen lebegőpontosnak olvastattam be! Köszönöm szépen a segítséget, így már minden oké, a segédváltozók bevezetésével működik! :)
2015. szept. 19. 21:25
 7/10 anonim ***** válasza:
Válts IDE -t. A jobbak az ilyen hibákat jelzik.
2015. szept. 19. 21:44
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Elvileg a CodeBlocks is az nem?

Am Linux terminálban nyomjuk... :D

2015. szept. 19. 23:49
 9/10 anonim ***** válasza:

"nekem 1/(n/m) sem jön össze (hiszen ha egészosztás történik az már nem jó ott)"


Nézd, lehet nem jól értem a feladatot, de én erre gondoltam:

például N=22, M=3

N/M = 7

P = 1/(N/M) = 1/7


(3,6,9,12,15,18,21 közül gondolt valamelyikre)

2015. szept. 20. 02:57
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:
Igen, igazad van, jogos, nem is kell így ciklus, hisz a példádban minden 3. szám van benne (M-mel pedig minden M-edik). Teljesen igazad van! Köszönöm! :)
2015. szept. 20. 11:45

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!