Új hozzászólás Aktív témák
-
csicsaaa
tag
Sziasztok!
Tudnátok segíteni abban hogy szinte a nulláról vagyok de egy olyan házit kellene csinálni ami két tömbe, egy A és B-be kér be egy-egy nevet max 30karaktert, és enterre befejezi a bekérést.
Nagy köszönet érte ha valaki szán rá időtVédd a fákat, egyél hódot!!!
-
Geresics
addikt
Hali!
Kicsit későn állok neki a Prog I. háziknak, ezért szükségem lenne egy kis segítségre!
A tömb feltöltését és kinyomtatását már megcsináltam, de az oszlopok felcserélése még hátravan.
A nagyobb problémám az, hogy hogy csinálok különálló függvényeket?/* Írja meg a tömb kezelő programot olyan módon,
hogy a tömb a main függvényben legyen definiálva
és minden egyéb műveletet egy külön függvény tartalmazzon.
Például a beolvasás, keresés, számítás mindegyik egy külön függvénybe kerüljön! *//* Töltsünk fel egy 5x5-es integer mátrixot futási időben!
Ezután olvassunk be még két egész számot 0 és 4 között.
Végül a program cserélje fel a két egész számmal megadott oszlop elemeit.
Nyomtassuk ki az eredményt. */#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2, mem;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &a[i][j]);
}
}
/* két szám beolvasása */
printf("\nAdjon meg egy szamot 0 es 4 kozott: ");
scanf("%d", &szam1);
printf("Adjon meg egy masik szamot 0 es 4 kozott: ");
scanf("%d", &szam2);
/* két oszlop megcserélése */
/* a következő algoritmust találtam ki, de még nem írtam meg:
a[0][szam1]=mem;
a[0][szam2]=a[0][szam1];
mem=a[0][szam2];
mem=0;
*/
/* nyomtatás */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("\nA(z) %d oszlop %d. eleme: [%d]", i+1, j+1, a[j][i]);
}
}
}[ Szerkesztve ]
*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Geresics
addikt
válasz tototos #3853 üzenetére
User tölti fel, egyesével. Erre csináltam meg a beolvasás részt:
...
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &a[i][j]);
}
}
...*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
tototos
őstag
válasz Geresics #3854 üzenetére
akkor kell csinálnod egy beolvas függvényt
void beolvas(int array[5][5])
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &array[i][j]);
}
}
}
ez pedig a main:
int main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2, mem;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
beolvas(a);
return 0;
} -
Geresics
addikt
válasz tototos #3855 üzenetére
Istenkirály vagy!
Ez alapján kezdem kapizsgálni a lényeget, meg is csináltam gyorsan a nyomtat függvényt is!
Már csak erre a fránya oszlopcserére kell rájönnöm, és mehetek is a másik feladatra!
Tényleg, az int array[5][5] miért van? Mert az én értelmezésemben (ahogy a nyomtatban csináltam) az "a" nevű 5x5-ös mátrixra hivatkozom. Vagy rosszul értelmezek valamit?#include <stdio.h>
void beolvas(int array[5][5])
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &array[i][j]);
}
}
}
void nyomtatas(int a[5][5])
{
int i, j; /* i lesz az oszlop száma */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("\nA(z) %d oszlop %d. eleme: [%d]", i+1, j+1, a[j][i]);
}
}
}
int main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2, mem;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
beolvas(a);
/* nyomtatás */
nyomtatas(a);
return 0;
}*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
tototos
őstag
válasz Geresics #3856 üzenetére
Attól hogy a függvény paraméterben is a-nak nevezed még nem fogsz arra hivatkozni. Amikor meghívod a beolvas(a) függvényt akkor fogja az array-t az a-ra állítani.
a csere meg kb így néz ki:
void csere(int a[5][5], int oszlop1, int oszlop2)
{
int i; //sorokat jelöli
int temp = 0;
for(i=0;i<5;i++)
{
temp = a[i][oszlop1 - 1];
a[i][oszlop1 - 1] = a[i][oszlop2 - 1];
a[i][oszlop2 - 1] = temp;
}
} -
Davs
tag
válasz Geresics #3856 üzenetére
Hmm a beolvas fuggveny parameterevel nincs gond? Marmint az nem tetszik, hogy a parameter se nem globalis tomb, se nem pointer egy lokalis tombre. Tehat a beolvas fuggveny meghivasanal, letrejon egy [5][5]-os LOKALIS (funkcio szinten) tomb, ami azutan nem marad meg, miutan kilep a funkcio (Ugyebar a memoria maga nem torlodik, szoval ha a beolvas es a nyomtatas fuggvenyek activation record-ja (nemtudom mi a magyar forditasa) megegyezik, akkor elvileg mukodhet, de nemhiszem, hogy egy alapszintu hazinal ezt joszemmel neznek).
Egy szo mint szaz, en egy 2D tombre mutato pointert adnek meg a beolvas fuggveny parameterekent. VAGY valamit NAGYON felreneztem, azesetben pedig kernek valakit, hogy mielobb rakjon helyre koszi -
Geresics
addikt
válasz tototos #3859 üzenetére
sajnos a csere nem működik. Próbafuttatáskor errorral kilép.
Megpróbáltam itt-ott átírni (pl. az általam korábban definiált változókra, stb.), de nem jutottam előrébb.
Jelenleg így fest a teljes kódom:/* Írja meg a tömb kezelő programot olyan módon,
hogy a tömb a main függvényben legyen definiálva
és minden egyéb műveletet egy külön függvény tartalmazzon.
Például a beolvasás, keresés, számítás mindegyik egy külön függvénybe kerüljön! */
/* Töltsünk fel egy 5x5-es integer mátrixot futási időben!
Ezután olvassunk be még két egész számot 0 és 4 között.
Végül a program cserélje fel a két egész számmal megadott oszlop elemeit.
Nyomtassuk ki az eredményt. */
#include <stdio.h>
#include <stdlib.h>
void beolvas(int array[5][5])
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &array[i][j]);
}
}
}
void csere(int a[5][5])
{
int j; /* j a sorokat jelöli */
int szam1, szam2;
int mem=0;
for(j=0;j<5;j++)
{
mem=a[j][szam1-1];
a[j][szam1-1]=a[j][szam2-1];
a[j][szam2-1]=mem;
}
}
void nyomtatas(int a[5][5])
{
int i, j; /* i lesz az oszlop száma */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("\nA(z) %d oszlop %d. eleme: [%d]", i+1, j+1, a[j][i]);
}
}
}
int main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2;
int mem=0;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
beolvas(a);
/* két szám beolvasása */
printf("\nAdjon meg egy szamot 0 es 4 kozott: ");
scanf("%d", &szam1);
printf("Adjon meg egy masik szamot 0 es 4 kozott: ");
scanf("%d", &szam2);
/* csere */
csere(a);
/* nyomtatás */
nyomtatas(a);
return 0;
}Megpróbáltam azt is, hogy a két szám beolvasását beleraktam a "csere" függvénybe, de nem segített...
*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
csicsaaa
tag
Akkor erre senki semmit?
Védd a fákat, egyél hódot!!!
-
Geresics
addikt
válasz csicsaaa #3851 üzenetére
#include <stdio.h>
void main()
{
char neva[31];
char nevb[31];
/* beolvasás */
printf("Kerem a 30 karakter hosszu A nevet:\n");
gets(neva);
printf("Kerem a 30 karakter hosszu B nevet:\n");
gets(neva);
printf("\nA nev:%s",neva);
printf("\nB nev:%s",neva);
}[ Szerkesztve ]
*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Geresics
addikt
Ismét szeretnék én is segítséget kérni, ugyanis továbbra is gondjaim vannak a külön függvényekkel... :S
/* Írja meg a tömb és sztring kezelő programokat olyan módon,
hogy a tömb vagy vektor a main függvényben legyen definiálva
és minden egyéb műveletet egy külön függvény tartalmazzon.
Például a beolvasás, keresés, számítás minegyik egy külön függvénybe kerüljön! */
/* Olvassunk be egy maximum 70 karakter hosszú mondatot.
Számoljuk meg, hogy hány szóból áll a mondat.
A szavakat a szóköz (' ') karakter választja el egymástól.
A mondat végén a pont ('.') karakter áll és ne vegyük figyelembe a pont utáni karaktereket */
#include <stdio.h>
#include <stdlib.h>
void beolvas(char szoveg[71])
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
}
void szamlalas (int db)
{
char szoveg[71];
int i;
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ')
db++;
i++;
}
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
szamlalas(db);
printf("A szoveg: %s", szoveg);
return 0;
}*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
dudika10
veterán
válasz Geresics #3883 üzenetére
Egy függvény nem dolgozik a változóidon.
Másolatokat készít róluk.
Így ha a darab változódba beírod az 5-öt, és átadod egy függvénynek, akkor a függvény csinál ezzel valamit, átírja 6-ra, majd visszatér.
De mivel a függvény csak egy másolaton dolgozik, ezért a változóddal nem történik semmi.Erre találták ki a pointereket és/vagy globális változókat. Előbbit ajánlanám.
Pointerek segítségével átadhatod a memóriacímet, és így a függvény oda fogja írni.
Amíg csak 1 darab értéket kell módosítani a függvénynek, addig használhatod a visszatérési értékét.
Ha nem void ... a függvény, hanem int ... akkor a return darab; azt fogja eredményezni, hogy a darab értékét a függvény visszaadja.Pl.: int szamlalas ()
...
return db;
}és meghívásnál pedig:
db=szamlalas(db);Remélem érthető nagyjából és nem írtam semmi hülyeséget.
[ Szerkesztve ]
Prodipe Pro 5 aktiv hangfalpar elado.
-
dudika10
veterán
válasz Geresics #3886 üzenetére
(#3885) tototos: a kettő közül az egyik kell csak, persze.
A szöveg pointerként adódik át, mivel tömb neve [] nélkül mindig pointer.(#3886) geresics:Ha mutatót akarsz átadni, akkor (int *db) igen.
Viszont ekor a main-ben &db-t kell átadni.
int db;
Ekkor a db egy változó, &db a címe.
int * db;
Ekkor *db a változó, db a memóriacím.Ha int *db; -t írsz, akkor amikor értéket akarsz adni, akkor *db= ; kell.
Ha csak db= ; -t írnál, akkor a mutatót írnád át, és elveszítenéd az értéket.Amíg csak egy értéket akarsz visszaadni a függvénnyel, addig használd a visszatérési értéket. Ezt például a rekurzióhoz muszáj tudni kezelni, a rekurzió pedig gyakran ügyes kis trükk tud lenni.
(#3887) tototos: Ezzel nem is foglalkoztam még, de teljesen igazad van, kell neki a szöveg.
Globális változókról nekünk azt tanították, hogy amíg lehet kerüljük.(#3889) geresics : az i-nek adni kell egy kezdőértéket. Ha for ciklust használsz, akkor az for (i=0; ... értékadás is egyben. De mivel while ciklust használsz, ezért nincs ilyen értékadás, és az i jelenleg memóriaszemét.
A deklaráció után írj egy =0-t.
int i=0;[ Szerkesztve ]
Prodipe Pro 5 aktiv hangfalpar elado.
-
Geresics
addikt
válasz tototos #3885 üzenetére
Most meg az "i"-re reklamál
Így fest jelenleg a kód, és kezdek megőrülni, mert azt írja, hogy "The variable 'i' is being used without being defined."void beolvas(char *szoveg[71])
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
}
int szamlalas()
{
char szoveg[71];
int db;
int i;
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ')
db++;
i++;
}
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
szamlalas();
printf("A szoveg: %s", szoveg);
return 0;
}*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Bobrooney
senior tag
válasz tototos #3885 üzenetére
Függvényben a tömbök átadásánál, mindig a tömb kezdőcíme adódik át.
int szamlalas(char szoveg[], int db)
{
int i;
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ')
db++;
i++;
}
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
szamlalas(szoveg, db);
printf("A szoveg: %s", szoveg);
return 0;
}
valahogy így kéne paraméterezni, nem futtattam le, de szerintem jó lesz![ Szerkesztve ]
-
tototos
őstag
válasz Geresics #3889 üzenetére
na figyi, a szamlalas függvényed honnan tudja a beolvasott szöveget? attól mert ugyanazt a nevet használnod még az nem lesz ugyanaz, plusz a változóknak illik kezdőértéket adni
void beolvas(char* szoveg)
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
}
int szamlalas(char *szoveg)
{
int db [B]= 0[/B];
int i [B]= 0[/B];
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ') db++; // ha nem használsz {} jeleket akkor érdemes egy sorba írni az if-fel
i++;
}
return db;
} -
dudika10
veterán
válasz Geresics #3889 üzenetére
#include <stdio.h>
#include <string.h>
void beolvas(char * szoveg)
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
return;
}
int szamlalas(char *szoveg)
{
int db=0;
int i=0;
while (szoveg[i]!='\0' && szoveg[i]!='.')
{
if (szoveg[i]==' ')
db++;
i++;
}
return db;
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
db=szamlalas(szoveg);
printf("A szoveg: %s, szavak szama: %d\n", szoveg, db);
return 0;
}Így jó.
A while ciklusod végtelenciklusba kerülne, nem logikai vagy, hanem és kapcsolat kell. Ha bármelyik megtörténik egyből ki kell lépni.
Láthatod azt is, hogy sztringet hogy kell átadni a függvénynek, és azt is, hogy a vissszatérési értéket hogyan kell használni.
Felhívnám a figyelmed az int db=0; és int i=0; sorokra. A deklarált változók memóriaszemetet tartalmaznak mindaddig, amíg értéket nem adsz nekik. Lehet, hogy az i-ben például a 2341 volt tárolva pont, és akkor úgy kezded, hogy a 71 lefoglalt bájtodból a 2341-ediket akarod olvasni, ahol lehet, hogy éppen az operációsrendszer dolgozik. Ezt nem szabad, ezért a fordító figyelmeztet, hogy adj értéket használat előtt.Remélem senki nem fogja leharapni ezért a fejem, de a BME VIK villamosmérnök hallgatók első féléves tárgya a C, és ebben a félévben nagyszerű diasort állítottak össze az oktatók.
[link]
Van gyakorlati anyag, elméleti anyag, rengeteg példa.[ Szerkesztve ]
Prodipe Pro 5 aktiv hangfalpar elado.
-
Geresics
addikt
válasz dudika10 #3893 üzenetére
Tökéletes köszönöm!
Ráadásul már azt is értem, hogy miért nem volt jó eddig!Csupán annyit kellett átírnom, hogy a db=1-ről induljon, mert a szóközök száma mindig egyel kevesebb, mint a szavaké.
Még egyszer millió köszönet mindenkinek!
Szerk.:
Közben (#3894) tototos is megírta[ Szerkesztve ]
*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
PumpkinSeed
addikt
Azt, hogy az általam megrajzolt labirintus falára ne tudjon rámenni a játékos azt hogyan lehetne megcsinálni.
Nekem úgy sikerült, ha rá akar menni akkor visszadobja az elejére. Máshogy nem sikerült."Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
Karma
félisten
válasz PumpkinSeed #3899 üzenetére
Egy egyszerű megoldás, ha a koordináták azonnal léptetése előtt megnézed, hogy lehetséges-e az adott lépés (korlát, pályaszéle, akármi), és ha nem, akkor nem állítod be
“All nothings are not equal.”
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Alkoholista nevelde
- Világító alma helyett világító tok és szíj az almákra
- Jövedelem
- Rossz üzlet az EV-kölcsönzés
- Milyen videókártyát?
- Milyen egeret válasszak?
- Motorola Moto G24 Power - hol van az erő?
- Elektromos rásegítésű kerékpárok
- Milyen TV-t vegyek?
- További aktív témák...
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5