- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy A56 - megbízható középszerűség
- Egyszerre legnagyobb és legkisebb is a Garmin Venu X1
- Fotók, videók mobillal
- Samsung Galaxy S23 Ultra - non plus ultra
- Egy hét múlva érkezik a Honor Magic V5
- Szívós, szép és kitartó az új OnePlus óra
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Xiaomi 13 - felnőni nehéz
Új hozzászólás Aktív témák
-
Korcsii
őstag
válasz
superfinest #4284 üzenetére
Két külön nyelv a kettő. Más kérdés, hogy a megfelelő headerek behívásával lehet használni a C-s függvényeket is C++ alatt. Éppen emiatt a fejlesztőkörnyezetek is általában támogatják mindkettőt.
Az általad írt példakód egyértelműen C.
Milyen megfontolásból szeretnél elkezdeni C nyelven tanulni?
-
Korcsii
őstag
válasz
PumpkinSeed #3428 üzenetére
Nincs mit.
Mondjuk előbb lehet vizsgálni kéne, hogy a valóban nagyobb-e, mint b, és ha nem, akkor felcserélni...
-
Korcsii
őstag
válasz
PumpkinSeed #3425 üzenetére
Megkeresi a két szám legnagyobb közös osztóját.
-
-
Korcsii
őstag
-
Korcsii
őstag
válasz
Chipi333 #3158 üzenetére
A for elvileg ugyan az, mint a while, csak máshogy írva, így nem látok kivetnivalót benne.
De azért szépen benéztem a kódot én is (hiába, lehet aludni is kéne néha):
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n; ++i) {
for (j=0; i<n; ++j) {
if (tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db); -
Korcsii
őstag
válasz
shinodas #3137 üzenetére
Rég C-ztem már, de úgy rémlik, hogy amikor létrehozod a tömböt, akkor a zárójelbe a méretét írod, tehát int tomb[5] egy 5 elemű int tömb lesz. A sorszámozás persze 0-tól indul. Így for-ban 0-tól <méret-ig lehet számolni, ami pont jó, mert szép, megjegyezhető, és mindent elárul - pl azt is, hogy 6 eleműnek akartad definiálni.
-
Korcsii
őstag
sscanf-re gondoltam, csak rosszul... elfelejtettem, hogy fájlból olvasol...
Hogy hogyan kezeli őket, az attól függ, hogy hogyan olvasod be.
Mindenesetre fscanf-et és f(?)getc-t nem kéne keverni, elég a kettő magában is (az előbbi kódoddal levágsz egy karaktert, aztán beolvasol egy számot a maradékból).
Egyszerű programban én simán fscanf-fel olvasnék, esetleg vizsgálnám, hogy sikeres-e.
-
Korcsii
őstag
-
Korcsii
őstag
válasz
Hujikolp #2792 üzenetére
A maradékképzés (xor) általában két egész szám között van, és azért warningol, mert az egyik float. Viszont a math.h-ban van egy olyan függvény, hogy fmod(a,b); /* még soha nem használtam */ Mondjuk math.h nélkül is 3 sor.
Még annyi, hogy az nn-nek mi a szerepe a for-ban?
-
Korcsii
őstag
srand( (unsigned)time (NULL) );
num1 = rand()%7001+1000;Az elvet értsd meg, utána menni fog: a rand() egy 0-sok közötti számot generál. Ha megnézed ennek mondjuk 10-es maradékos osztását, akkor ugye a maradék 0-9. Ha hozzá adsz 1-et, akkor 1-10. Szóval előbb megcsinálod a tartományt, aztán eltolod valamennyivel valamerre...
-
Korcsii
őstag
Egy érdekes kérdés, bár végül lehet mégis maradok a nem szép megoldásnál...
sleep() nélkül, hogyan érdemes valamit időzíteni? Mondjuk ha 3-4 perc elteltével is 1 másodpercen belüli hibahatárral akarunk számolni, és mondjuk egy másodperc alatt több dolgot is szeretnénk időzíteni - mondjuk 128-at vagy 256-ot.
-
-
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
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
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
-
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
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
-
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...
-
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
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é
-
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....
-
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
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
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...
-
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
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
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ó?
-
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
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) -
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
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?
-
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... -
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
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
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...
-
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.... -
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
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- exHWSW - Értünk mindenhez IS
- Egyre csak fejlődik az AI, emberek tízezreit rúgja majd ki a BT
- Kettő együtt: Radeon RX 9070 és 9070 XT tesztje
- Vicces képek
- Kerékpárosok, bringások ide!
- PlayStation 5
- Drum 'n' bass
- Micro Four Thirds
- További aktív témák...
- Thinkpad X230 legenda: i7 CPU, IPS kijelző, 12 GB, dupla SSD, magyar villbill, webcam, fingerprint
- Honor X6b 128GB Kártyafüggetlen 1Év Garanciával
- Apple Watch SE2 / 44mm / Midnight / Black Sport / Cellular (99%)
- Iphone 13 Pro Max 128 GB /// 86% Akku // Számlával és Garaniával
- Iphone 12 Pro Max 128 GB /// 88% Akku // Számlával és Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 7 9800X3D 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- PROCASTER 40UNB700 40" 101cm televízió + Számla + Garancia
- Bomba ár! Lenovo ThinkPad T470s - i5-6GEN I 8GB I 256GB SSD I 14" FHD I Cam I W10 I Garancia!
- Bomba ár! Lenovo ThinkPad T490 - i5-8GEN I 16GB I 256GB SSD I 14" FHD I Cam I W10 I Garancia!
- Bomba ár! Dell Latitude E7270 - i7-6GEN I 8GB I 256GB SSD I 12,5" FHD I HDMI I CAM I W10 I Gari!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest