Segítene valaki programozás feladatban? (c-ben)
Igazából a "Majd meghív egy eljárást.." résztől érdekel főleg, hogy hogyan lehetne megoldani ezekkel a paraméterekkel?
Bemásolom a feladatot, hogy érthető legyen:
Bekéri a felhasználó kedvenc számát, majd létrehoz egy 10 elemű egészek tárolására alkalmas tömböt, amit feltölt -51 és 51 közötti véletlen egész számokkal (-51 és 51 is lehet a generált szám). Majd meghív egy eljárást, amely paraméterül megkapja a kedvenc számra mutató mutatót, a tömböt és annak méretét, majd módosítja a kedvenc számot úgy, hogy minden tömbelemhez generál egy véletlen egész számot 0-t vagy 1-t. Ha a 0-t generált egy tömbelemhez, akkor azt a tömbelemet hozzáadja a kedvenc számhoz, ha 1-est generált, akkor pedig kivonja a kedvenc számból a tömbelemet.





Mi a kérdés konkrétan?
Megcsinálod az eljárást 3 paraméterrel, amiben van egy for ciklus 0tól méretig, ahol minden lépésben randomgenerálsz egy számot, és az eredménytől függően csökkented vagy növeled a tömb i-edik elemét.
Azt mondjuk nem értem a kedvenc számnak miért a mutatója kell, de C-hez nem nagyon értek.





Nem teljesen tiszta, hogy miután hozzáadta vagy kivonta a számot a kedvencből, azt utána pontosan hová mentse. Én úgy értettem, hogy a tömbbe mentse vissza, irja felül vele az eredeti értéket.
Valami hasonló lenne az eljárás:
void tombkezelo(int *kedvenc, int tomb[], int darab){
for(int i; i<darab; i++){
int veletlen = rand()%2;
if(veletlen==0){
tomb[i] += *kedvenc;
} else {
tomb[i] = *kedvenc-tomb[i];
}
}
}
Nincs szükség visszatérési értékre.
Köszönöm a válaszokat.
Ezzel mi a gond?
#include<stdio.h>
#include<stdlib.h>
void eljaras(int *ip,int t[], int darab){
int i;
for(i=0;i<darab;i++){
int veletlen = rand()%2;
if(veletlen==0){
*ip+=t[i];}
else{
*ip+=-t[i];
}
}
}
int main(){
int a,t[10],i,*ip;
printf("Kerem a kedvenc szamodat:");
scanf("%d",&a);
for(i=0;i<10;i++)
t[i]=rand()%(102-0)-51;
ip=&a;
eljaras(*ip,t,10);
printf("A modositott szam: %d\n",*ip);
return 0;}





LEfordul, de nem működik.
Már írtam egy egyszerűsített változatot is, de ez se jó.
Ha 1-et adok meg kedvenc számnak, akkor 141 a módosított, ha 2-t akkor 142...
#include<stdio.h>
#include<stdlib.h>
int main(){
int a,t[10],i,b;
printf("Kerem a kedvenc szamodat:");
scanf("%d",&a);
for(i=0;i<10;i++)
t[i]=rand()%(102-0)-51;
for(i=0;i<10;i++){
b=rand()%2;
if(b==0){
a=a+t[i];
} else {
a=a-t[i];}}
printf("A modositott szam: %d\n",a);
system("pause");
return 0;}










Ja, bocs, elfeledkeztem egy dologról. rand() egy megadott seed szerint generálja a véletlen számokat. Ha nem állitod át a seedet, akkor mindig az alapértelmezett szerint fogja generálni, azaz minden alkalommal ugyan azokat a számokat fogod kapni, akár hányszor futtatod a programot.
#include <time.h> az elejére, meg valahová az első rand() elé be kell szúrni ezt:
srand(time(null)); ez átállitja a véletlenszám generálás seedjét, az aktuális időre alapozva.
Ennyit tudtam kitalálni abból amit leirtál. Jobban is megfogalmazhatnád a jövőben a kérdéseket, leirhatnád akár példákkal, hogy a várt eredmény micsoda, hogy ne nekünk kelljen találgatni.





Mit értesz engedélyezett, szabályosnak?
Működik, amennyire tudom hiba nélkül.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!