- Hosszú idő után újabb előzetest kapott a Gothic Remake
- Hivatalosan is bemutatkozott a Kingdom Come Deliverance 2
- Rövid teaser trailert kapott a Dragon Age: Dreadwolf
- EAFC 24
- GTA VI
- Alkoholista nevelde
- Nintendo Switch
- PlayStation 5
- Teljes verziós, ingyenes mobil játékok és alkalmazások
- PlayerUnknown’s Battlegrounds
Új hozzászólás Aktív témák
-
Korcsii
őstag
Sziasztok!
Nos én is csatlakoznék a C klubhoz
Így az érettségire való jelentkezési határidő előtt nemsokkal úgy döntöttem, hogy pascal helyett C-ben fogok programozni (már ha emeltre megyek, mert még ez se biztos). Előzmények: érettségin turbo pascalt nem lehet már használni, csak free pascalt, amivel viszont még nem sikerült barátságot kötnöm - egyrészt nem tudom működésre bírni itthon, másrészt a suliban csak a tanári gépen írja ki a hibákat, a többi gépen csak a hibák számát, és rejtély hogy mért... éppen ezért a két héttel ezelőtti kis próbaérettségi szerűségen nem is tudtam megcsinálni a programozási feladatot (nem röhög: a program neve ugyan az volt, mint az egyik változó neve... hibaüzenettel én is kiszúrtam volna)... mivel félek, hogy a vizsgahelyszínen (emelt szint miatt más iskolában írjuk) sem lesz minden rendben vele, így jobbnak láttam, hogy nyár helyett már most nekiállok a C-nek. Nem, nem őrültem meg, tudom, hogy ez nem megy egyik napról a másikra, de úgy gondoltam, hogy kb egy év Pascal, és több mint 4 év PHP után össze tudom rakni a két nyelvet (előbbiből a programozási tételek, szemlélet, utóbbiból a kinézet, felépítés jött jól).
Az érettségi szoftverlistában Borland, Turbo, és Dev-C++ van felsorolva.
Ezek közül a legutolsót telepítettem fel két hete, és eddig meg is vagyok vele elégedve ("tanulás" közben írtam vele 10 apró programot, ami a fő funkciók/parancsok próbálgatása volt, azután egy program tele prog. tételekkel, majd egy hosszabb program, majd két korábbi érettségi). Szóval úgy néz ki, hogy ok lesz a dolog, de azért megkérdezem:
Ti melyik programot ajánljátok a fenti 3 közül? Avagy kérdezhetném úgy is, hogy van valami ellenjavallat a Dev-C++ ellen? Van valami, amiben a többi program jobb (választás lenne)?
Előre is kösz
-
Korcsii
őstag
nah első prog kérdésem: van egy n elemből álló tömb:
typedef struct {
char varos[21];
char termek[21];
short int darab;
} adatok;
adatok adat[1000];nos ezt kellene az adat[i].termek szerint ABC sorrendbe rendezni...
számoknál ez nem is nagy cucc, de szövegeknél?és jó lenne mindezt egy új, mondjuk rendezes nevű eljárásba belepakolni, hogy utána vissza is lehessen rendezni az adat[i].varos szerint (igazából azt nem tudom, hogy hogyan lehetne azt megadni neki, hogy varos vagy termek alapján rendezzen... az if-nél valami értelmesebb megoldást keresek)...
na de ez már opcionális, elkínlódok majd vele, a lényeg inkább az ABC sorrend lenne....[ Szerkesztve ]
-
Korcsii
őstag
kösz mindenkinek, este majd próbálkozok velük
strcmp-t már használtam, de eddig csak arra, hogy megnézzem ugyan az-e a kettő... most már értem, hogy miért is viselkedik úgy, ahogy (magyarul 0, ha ugyanaz)... apropó, nincs valami php.net-hez hasonló oldal, ahol rá lehetne keresni ezekre (eddig PHP-ztam, és nagyon jól jött)?
függvény talán azért lenne szerencsésebb, mert 3x kell használni, és így elég lenne egyszer megírni... de igazán semmi ötletem nincs erre, max az, hogy egy sima váltózóból kap egy értéket, és azt megvizsgálva a megfelelőt pörgeti végig... na de ez lehet még hosszabb/rosszabb, mint ha mindenhova odaírnám...
[ Szerkesztve ]
-
Korcsii
őstag
sry, valahogy így gondoltam:
int rendezes(int mit) {
if (mit=1) {
// rendez adat[i].varos szerint
} else if (mit=2) {
// rendez adat[i].termek szerint
} ...
}
na ez most szép és jó, de túl sok értelme nincs... de inkább hagyom, annyira nem lényeges... esetleg majd ha unatkozom, rágooglezek még párszor -
Korcsii
őstag
fogadjuk valami kezdőkre jellemző hiba, de akkor sem tudok rájönni:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
// az elejét inkább nem idézem be
printf("Kérek egy évfolyamot: ");
short int evfolyam;
scanf("%d",&evfolyam);
printf("Kérek egy osztályt: ");
char osztaly;
scanf("%c",&osztaly);
printf("%d %c\n", evfolyam, osztaly);
}namármost ha az evfolyam-ot nem kérem be, akkor ok minden, kiírja az osztályt (még ha az évfolyamnak adok kezdőértéket, akkor is)... de így egyszerűen átugorja a második scanf-et, és nem tudom, hogy mi lehet a hiba ha megcserélem a kettőt, akkor mind a kettőt bekéri, de mire a kiíráshoz jut, elfelejti az osztály... ennyire benéztem volna valamit?
előre is kösz, mert én már felrobbanok
-
Korcsii
őstag
válasz Sk8erPeter #1826 üzenetére
valóban, igazad van, most át is pakoltam, viszont a helyzet nem változott
Dev-C++ a fordító egyébként...szerk:
ui: én meg ugyanoda szeretnék...[ Szerkesztve ]
-
Korcsii
őstag
ejj, ezek a fránya char-ok...
short int x,y;
printf("Kezdő koordináta: ");
scanf("(%d,%d)",&x,&y);
printf("%d %d",x,y);ez működik is, de az x,y max 100 lehet, így jobb lenne a(z unsigned) char... ha csak az elsőt adom meg, akkor azt megjegyzi, kiírja, a második valami random lesz... de ha mind a kettőt megadom, az elsőt elfelejti (0 lesz)...
van erre valami egyszerű és szép megoldás, vagy inkább ne sajnáljam azt a plusz 1 (?) byte-ot?
[ Szerkesztve ]
-
Korcsii
őstag
illik char-ral számlálni? vagy jobb a short int?
pl egy for cikluson belül, ahol az i mondjuk max 100 lehet... -
Korcsii
őstag
válasz macikos #1894 üzenetére
pl csinálsz két változót: int melyik, mekkora;
A melyik megkapja az első elem sorszámát (i, azaz valószínűleg 0), a mekkora pedig az első elem értékét. Majd egy for ciklussal végignézed az összes többi elemnél, hogy az kisebb-e nála. Ha igen, akkor a melyik megkapja az i értékét, a mekkora meg az adott értéket. Végül a melyik alapján be tudod azonosítani, hogy melyikről van szó... persze ha csak egy adat van, akkor i helyett egyből lehet azt is tárolni... ha meg csak az ár kell, akkor a melyik el is hagyható...
(nem néztem a kódod, és eddig még csak C-ztem, C++ még a jövő zenéje)[ Szerkesztve ]
-
Korcsii
őstag
C-ben hogy lehet a legegyszerűbben megvizsgálni, hogy egy string-ben egy adott karakter szám-e? egy jó hosszú if-el (esetleg switch) biztos, de remélem van valami egyszerűbb módja is... PHP-ban pl erre való az isint(), de C-ben nem találtam hasonlót...
-
Korcsii
őstag
nem tudom már ki keresett meg egy kis helpért, amikor épp zh-t írt, de tényleg így készül a programozó?
[ Szerkesztve ]
-
-
Korcsii
őstag
válasz Sk8erPeter #1987 üzenetére
és akkor return j; jó is a függvény végére...
viszont azt nem teljesen értem, hogy miért kell strlen(tomb1)-et vizsgálni?
-
Korcsii
őstag
válasz Sk8erPeter #1993 üzenetére
tegnap éjjel (azaz ma hajnalban) láttam már én is a kérdést de túl sok sebből vérzett, így gondoltam inkább tőlem profibbak magyarázzák el
strlen pedig jogos, erre nem is gondoltam...
-
Korcsii
őstag
válasz Klupi01 #2156 üzenetére
kétlem, hogy ez lenne a jó megközelítés... 2-3 hét alatt meg simán át lehet állni, ha napi szinten foglalkozol vele (keveset - bár ez relative, ha belemélyülök, 1 óra is kevés)... legalábbis nekem sikerült... utána meg úgyis kelleni fog... ráadásul olyan dolgok, amik pascal-ban nem is nagyon vannak, vagy máshogy...
[ Szerkesztve ]
-
Korcsii
őstag
hogy lenne célszerű személyneveket eltárolni?
random hosszúak, és azért feleslegesen ne foglaljunk sok memóriát...
realloc? láncolt lista? hányasával?
meg aztán jó lenne, ha kereshető lenne a tartalma valami nem túl bonyolult módon...
hmm, marad a realloc?
egyéb ötleteket/megerősítést szívesen fogadok -
Korcsii
őstag
-
Korcsii
őstag
válasz FehérHolló #2286 üzenetére
ja hogy vill, akkor az előző hozzászólásom indító kérdése is tárgytalan...
fáradt voltam tegnap, hogy ez beugorjon -
Korcsii
őstag
válasz [pod]Diablo #2300 üzenetére
if (t[i] < t[i+1]) printf("az i+1 nagyobb");
kétlem, hogy ennyire egyszerű lenne a kérdés, de amit kérdeztél, az így valósítható meg... csak épp vigyázni kell, hogy az i, i-1 és/vagy i+1 is létezzen, különben szépen elszáll a program... ha mindez esetleg egy ciklusba kerül, akkor meg főleg....
[ Szerkesztve ]
-
Korcsii
őstag
válasz RexpecT #2310 üzenetére
szerk:
kellett nekem belekezdeni, aztán nem tudom félreérthetetlenül megfogalmazni...i=3+1, maradjunk ennyiben... egészet osztasz egésszel, ezért az operátor az egész osztást valósítja meg (amennyiszer pontosan megvan benne), tárolni utána tárolhatnád másban is... csak mivel a tároló, és az osztandó itt ugyanaz, mégse teheted, mert ha doble lenne, akkor már engedné
[ Szerkesztve ]
-
Korcsii
őstag
válasz gergo00 #2365 üzenetére
ha 2 dimenziós tömbben akarsz stringet tárolni (pl [sor][oszlop]), akkor 3 dimenziós char tömb kell... vagy egy 2 dimenziós char * tömb, és akkor csak a pointerét tárolod, viszont akkor dinamikusan kell neki memóriát foglalni, és annak a helyét megadni pointernek... én érettségin az előbbit választottam, főleg azért, mert a dinamikus foglalásig nem jutottam el (nekem sem volt tanárom)...
-
Korcsii
őstag
válasz gergo00 #2367 üzenetére
char *tomb[25][25][123];
while (!feof(fp))
{
fscanf(fp, "%s", tomb[sor][oszlop]);
}a kódodból kiindulva így gondoltam a 3D tömböt... mondjuk abban nem vagyok biztos, hogy a feof() nem csak eggyel később így fog igazzal visszatérni...
dinamikusan ez jóval összetettebb, de végül is szebb megoldást ad...
[ Szerkesztve ]
-
Korcsii
őstag
válasz Korcsii #2368 üzenetére
persze a * nem kell az elejére, hülyeséget írtam, sry...
a lényeg, hogy a számokkal ellentétben sztringeknél kell egy 3. dimenzió is, mivel a string az egy char tömb, így azt is kell indexelni...kingabo: strcpy jó, csak épp semmi nem létezik, amit neki adni kéne...
[ Szerkesztve ]
-
Korcsii
őstag
válasz gergo00 #2372 üzenetére
nah, szóval hogy olvasunk be sztringet?
char szoveg[123];
scanf("%s", szoveg);mondjuk ha azt írod be, hogy alma, akkor a végeredmény ez lesz:
szoveg[0] = 'a';
szoveg[1] = 'l';
szoveg[2] = 'm';
szoveg[3] = 'a';
szoveg[4] = '\0';magyarul a sztringeket a hosszuknál eggyel nagyobb char tömbben tároljuk
mivel neked kell még egy sor és egy oszlop/szó is (legalábbis remélem jól értettem), ezért kell még 2 dimenzió ezeknek is...
1. sor
2. oszlop/szó
3. karakter helyepl
char szoveg[12][12][123];
scanf("%s", szoveg[0][0]);
szoveg[0][0][0] = 'a';
szoveg[0][0][1] = 'l';
szoveg[0][0][2] = 'm';
szoveg[0][0][3] = 'a';
szoveg[0][0][4] = '\0'no de ez ronda, mert ki tudja, hogy hány oszlop/sor kell, illetve milyen hosszú lesz a szöveg, amit tárolni akarunk...
erre jó a dinamikus memóriafoglalás, úgy csak annyit foglalunk le, amennyi tényleg kelleni fog (a mostani esetben 12*12*123 bájtot foglaltunk le, függetlenül attól, hogy tárolunk-e benne valamit)... viszont jó pár sorral több lesz úgy a kód, meg kicsit jobban oda ekll figyelni...
viszont érettséginél mindig megmondják, hogy max mekkora lehet (legalábbis tavalyig így volt), így csak azokat az értékeket kell behelyettesíteni...
-
Korcsii
őstag
válasz Pcmagicnet #2379 üzenetére
a \0 egy speciális karakter (NULL karakternek is hívják), szerepe, hogy jelezze a string végét (miért jó, azt csak akkor érted meg igazán, amikor nem engedik meg a string.h használatát )
szóval egy char tömbben (stringben) csak egyszer szerepelhet, bár tárolhatsz mögötte bármit, meg is jegyzi, de nem fogja kiírni, mert a kiírás is \0-ig történik...
strcat-tal lehet őket összefűzni, vagy ha egy mondatot akarsz egyben beleolvasni, akkor a szóközt is beleveszed, etc...
scanf("[^\n]",string);
pl én ezt szerettem anno, mindent beolvas addig, amíg sortörést nem talál... DE ez csak akkor alkalmazható, ha el is fér a string tömbben, azaz ha a feladat leírja, hogy márpedig csak ekkora meg ekkora lehet...a másik változatot:
int i = 0;
while((c = getchar()) != '\n') string[i++] = c;
string[i] = '\0';a probléma ugyanaz, ha nem fér el a megadott helyen (regényt adsz neki), akkor elszáll a program, de ha meg van adva a méret, használható...
ez utóbbiból azonban ki lehet indulni, ha dinamikusan akarjuk a memóriát lefoglalni: legjobb megoldás talán az, hogy foglalunk x méretűt, ha elérjük az x-et, foglalunk még egyszer akkorát, aztán a legvégén, amikor már az egész string megvan, megnézzük a méretét (vagy vesszük az i értékét), foglalunk egy akkorát, és belemásoljuk - így pont akkora helyet foglalunk neki, amekkora...
-
Korcsii
őstag
Tud valaki olyan megoldást, amivel egy C(++) program el tudja indítani a lejátszást win meadia playerben (vagy VLC, Winamp)? A sebesség is számítana, így ha nem muszáj, a cmd kimaradna... akár meg is nyitom neki előre, akár le is pause-olom 00:00-nál, csak pöccre induljon
[ Szerkesztve ]
-
Korcsii
őstag
hmm... hmmm...
#include <stdio.h>
int main(void) {
char c;
printf("Adj meg egy szamot: ");
while ((c = getchar()) != '\n') {
switch (c) {
case '0': printf("zero"); break;
case '1': printf("one"); break;
case '2': printf("two"); break;
case '3': printf("three"); break;
case '4': printf("four "); break;
case '5': printf("five"); break;
case '6': printf("six"); break;
case '7': printf("seven"); break;
case '8': printf("eight"); break;
case '9': printf("nine"); break;
}
printf(" ");
}
return 0;
} -
Korcsii
őstag
getchar()-t sokszor inkább eltitkolják, mert ugyan az, mint a scanf("%c", &c); csak ha már ott csak egy betűt kell csak kicserélni, akkor ne tanítsanak új funkciót c++ rulz, ott csak >> operátor van, semmi más függvény
azért ami csúnya az én kódomban, hogy gyakorlatilag nem számot olvasol be, és kicsit bonyolult lenne, ha utána a számot még bármire is szeretnéd használni... viszont mivel a feladat csak ezt kérte, szerintem ez a legegyszerűbb megoldása
-
Korcsii
őstag
Ú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!
- 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