- Vodafone mobilszolgáltatások
- Milyen okostelefont vegyek?
- Yettel topik
- Honor 90 - modellalkat
- Samsung Galaxy S10e - esszenciális
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- Olyan telefon lett az idei foci EB hivatalos mobilja, ami nem kapható Európában
- Spanyolországban kezd a Vivo V40 5G és V40 Lite 5G
- MIUI / HyperOS topik
- Samsung Galaxy Watch4 és Watch4 Classic - próbawearzió
Hirdetés
-
OnePlus Pad 2 helyett OnePlus Pad Pro
ma Állítólag a OnePlus idei táblagépe nem a második generáció lesz, hanem az első modell Pro változata.
-
Nagy fordulat jöhet az OpenAI-n belül
it Profitorientált céggé válhat az OpenAI, erősítette meg Sam Altman.
-
Final Fantasy XIV Online - Befutott a Dawntrail utolsó előzetese
gp Jövő hónap második napján érkezik a kiegészítő, az előrendelők azonban már június végén belevághatnak az új kalandokba.
Új hozzászólás Aktív témák
-
cooldongo
tag
int egybeesik(struct kor y, struct kor z)
{
if(y.x==z.x && y.y==z.y)
printf("egybeesik");
else
printf("nem esik\n");
}
main()
{
struct kor r;
int i=1;
for(i=0;i<=2;i++)
{
printf("kerem az %d. kor x-et:\n",i+1);
scanf("%d",&r.x);
printf("kerem az %d. y-t\n",i+1);
scanf("%d",&r.y);
}
egybeesik(x,y)
printf("%d",egybeesik(...))
}
az egybeesiket h kéne meghívni[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz cooldongo #3249 üzenetére
Használd már azt a nyomorult Programkód gombot kérlek.
Kijelölöd a kódrészletet, majd rákattintasz erre a gombra, és máris normálisabban fog kinézni a beillesztett kód (lásd alább).
Szerk.: látom kingabo ugyanerre hívta fel a figyelmed, jogosan.int egybeesik(struct kor y, struct kor z)
{
...
int b;
...
return b;
}A b-t deklarálod, de nincs inicializálva sem, és értéket sehol nem kap. Akkor szerinted miért kéne visszaadnia a helyes eredményt?
return (y.x==z.x && y.y==z.y) ? 1 : 0;
bocs, ha lelőttem a poént...
[ Szerkesztve ]
Sk8erPeter
-
cooldongo
tag
válasz Sk8erPeter #3252 üzenetére
kösz,működik,am használtam a programkód gombot nekem úgy is jelenítette(elküldtem akkor is úgy van) meg a bemásolt forráskódot
-
kingabo
őstag
válasz cooldongo #3251 üzenetére
Ez már sokkal jobb.
Jól hívtad meg, viszont ennek megint nem szabadna fordulnia: int a visszatérési értéke az fv-nek, de nincs return sehol sem. Amennyiben elég a kiíratás, akkor int helyett legyen void az fv, ha kell egybeesik-e vagy sem, akkor használd (#3252) Sk8erPeter által leírt megoldást. -
Sk8erPeter
nagyúr
válasz cooldongo #3253 üzenetére
Itt nem hiszem, hogy használtad.
Később fejlődtél, ez becsülendő.
Na, most már vágod a függvény működését? Azt is, hogy hogyan tudod megvizsgálni a függvény visszatérési értékét?Gondold végig, mire is vagy kíváncsi, ilyenkor használd nyugodtan a magyar nyelvet először (vagy amilyen nyelven könnyebben tudsz gondolkodni, felőlem mongol is lehet ):
HA egybeesik, akkor:
kiírom, hogy fasza, egybeesik
EGYÉBKÉNT
kiírom, hogy vazze, nem esik egybena, ezt most fordítsd le szépen C-re (ha >>> if, egyébként >>> else, és így tovább), meg a kódod nyelvére, és akkor máris meglesz a megoldás... remélem így már kapiskálod.
(#3254) kingabo:
Inkább maradjon csak a visszatérési értéknél, nehogy rászokjon ilyen hülyeségekre, hogy a függvényen belül íratja ki...[ Szerkesztve ]
Sk8erPeter
-
cooldongo
tag
ha [1,60] intervalumba kell előállítanom 6 számot
for(i=0;i<6;i++)
{
a[i]=rand()%71-20;
}hogy kell megadni az intervallumot ezt láttam valahol de nem értem h miért,vki elmondaná,kösz
[ Szerkesztve ]
-
ArchElf
addikt
válasz cooldongo #3258 üzenetére
Akkor
for(i=0;i<6;i++) {
a[i]=rand()%11+10;
}általánosan [x, y] intervallumra
for(i=0;i<6;i++) {
a[i]=rand()%(y-x+1)+x;
}AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
MODERÁTOR
válasz cooldongo #3258 üzenetére
A randomizálás úgy működik C esetében, hogy meghívod a rand() függvényt így:
rand() % 100
A % 100 mindig azt az intervallumot jelenti, ahonnan akarod a random számot előállítani. Tehát 100 esetében: 0 - 100 között. Ezért kell ugye hozzáadni + 1 -et, hogy 1 - 100 közül kapjad az értéket, továbbá ezért kell + 10 -et hogy a rand() % 20 az 10 és 20 közül adjon vissza jó értéket.
Célszerű továbbá a time.h fejfájlt includeolni és a main függvény elejére egy srand(Time(NULL)) -t beilleszteni.
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
WonderCSabo
félisten
Nem, nem, nem.
% 100 mindig azt az intervallumot jelenti, ahonnan akarod a random számot
A % az egy teljesen szabályos aritmetikai operátor C-ben, semmi intervallum előállító, vagy ilyesmi. A % visszaadja a szám osztóval való osztásának maradékát (modulo). Pl. 12 % 5 az 2. Valóban, amikor véletlen számokat állítunk elő, a % operátort hívjuk segítségül. Ugyanis a rand() fv. egy baromi nagy számot ad vissza. Ha ezt mondjuk 100-al modulozod le, akkor a nagy szám 100-al való osztásának lehetséges maradékát kapod vissza.
Tehát 100 esetében: 0 - 100
Nem 0-100 között, hanem 0-99 között. A maradék nem lehet 100, hiszen akkor már nem maradék, hiszen még egyszer megvan a nagy számban, az igazi osztási eredmény nőne eggyel. Ha pedig 1-100 között akarod, akkor simán hozzáadsz egyet a lemodulozott értékhez.
Tehát, a moduloval az intervallum hosszát adjuk meg, a hozzáadással pedig az eltolást.
j0k3r! megelőzött a mondandóm egy részében.
[ Szerkesztve ]
-
MODERÁTOR
válasz WonderCSabo #3262 üzenetére
Heló!
A rand() % 100 - 0 és 99 "intervallum" tényleg elírtam bocsi! A második esetében pedig csak a végtelenül leegyszerűsíteni akartam a dolgot! Kicsit félreérthetőre sikeredett.
mobal,
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
it_service
csendes tag
Hellósztok, egy kis segítséget szeretnék kérni, egy php kód legenerál x sort, amiben intek vannak, és ezeket kilöki egy valami.txt-be írni szeretnék 1 progit ami megszámolja mennyi ebben a páros, majd kiirja egy másik .txt-be, de a file beolvasás után már elakadok, valaki tudna nekem segíteni? A file ki íratással sincs gond. C-be nem szoktam fejleszteni ezért is okoz nekem nehézséget.
Köszönöm
-
WonderCSabo
félisten
válasz it_service #3264 üzenetére
#include <stdio.h>
int main()
{
// megnyitjuk a filet olvasásra
FILE* file = fopen("valami.txt", "r");
int num;
// beolvasunk egy intet a fileból soronként, amíg nincs vége
while(fscanf(file, "%d", &num) != EOF)
{
// itt megnenézed páros-e, stb.
}
fclose(file);
return 0;
} -
it_service
csendes tag
így van, köszi eddig nekem is tökéletesen működik, csak azt nem tudom hogy hogyan vizsgáljam le a sorokat?
-
WonderCSabo
félisten
válasz it_service #3266 üzenetére
Ez a kód, amit írtam, egy olyan fájlt feltételez, amiben intek whitespacekkel van elválasztva. (én így értelmeztem az első hszedet). Szépen beolvassa az adott int-et, aztán te meg meg tudod vizsgálni a ciklusmagban, hogy az adott int páros-e vagy sem.
Vagy Neked soronként van több int, és soronként kell a párosokat megszámolni, nem az egész fájlban?
[ Szerkesztve ]
-
it_service
csendes tag
minden egyes sorban 1 darab int van, tehát soronként
[ Szerkesztve ]
-
WonderCSabo
félisten
válasz it_service #3268 üzenetére
Akkor baromi egyszerű az eset. Simán a ciklusmagban végzel egy számlálást a num változót vizsgálva, aztán a ciklus lefutása után kiírod a számot egy fájlba.
[ Szerkesztve ]
-
it_service
csendes tag
akkor valami ilyesmi legyen a while-on belül:
if(num % 2 == 0){
//páros(kiratom a fileba)
} -
WonderCSabo
félisten
válasz it_service #3270 üzenetére
Igen, paritást így lehet ellenőrizni.
-
it_service
csendes tag
válasz WonderCSabo #3271 üzenetére
ok köszi ki is próbálom az este
-
it_service
csendes tag
válasz WonderCSabo #3271 üzenetére
köszi szépen, működik a program.
-
it_service
csendes tag
Esetleg még annyit kérdezhetnék hogyha egy bizonyos sort szeretnék csak ki íratni azt hogyan tudnám? Itt olyan szerkezetről lenne szó hogy KERESZTNÉV-IPCÍM egymás mellett szóközzel elválasztva, és például ki szeretném outputba írni a képernyőre a 100-adik sort.
-
WonderCSabo
félisten
válasz it_service #3274 üzenetére
Olvasod a sorokat, és közben növelsz egy számlálót. Ha a számláló 100-hoz ér, kiírod az aktuális sort.
[ Szerkesztve ]
-
bucsupeti
senior tag
válasz it_service #3274 üzenetére
tömbbe (listába) olvasod be a sorokat, majd beindexelve kiíratod.
[ Szerkesztve ]
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
it_service
csendes tag
Köszi srácok, WonderCSabo amilyen példát írtál néhány hsz-el előbb azt átalakítom úgy hogy pl: int num > char valami[];? Ebbe beolvasom majd a while ciklusban ezt írom be hogy int szamlalo = 1; szamlalo++; majd egy if(szamlalo == 100) printf("%s", valami[99]); Valahogy így gondoljátok?
-
WonderCSabo
félisten
válasz it_service #3277 üzenetére
Lehet így is. Igazából tömbbe csak akkor kell tárolnod, ha később is akarod még használni az értékeket, ha csak ki akarod írni, akkor elég a feltételes kiírás, nem kell a tárolás. Illetve a tömb mérete fix, ergó ha a fájl mérete ismeretlen, akkor egy jó nagy tömböt kell deklarálnod, amibe biztos belefér az adat.
-
it_service
csendes tag
sajna sehogy sem akar összejönni
[ Szerkesztve ]
-
WonderCSabo
félisten
válasz it_service #3279 üzenetére
Hát akkor mutasd meg a kódot, és megnézzük mi a baja.
-
it_service
csendes tag
válasz WonderCSabo #3280 üzenetére
#include <stdlib.h>
#include <string.h>
#include <stdio.h>int main()
{FILE* file = fopen("beolvas.txt", "r");
char num[200];
int szamlalo = 0;while(fscanf(file, "%s", &num) != EOF)
{
szamlalo ++;
if (szamlalo == 99)
printf("%s" num[szamlalo]);
}
fclose(file);system("PAUSE");
}ennyit sikerült ki logikáznom belőle, szerintem így ésszerű hiszen belerakja a 200 sort a tömbbe és ha az indexére hivatkozok ki kellene írnia mi van az adott indexen.
-
WonderCSabo
félisten
válasz it_service #3281 üzenetére
Félreérted a C string kezelését. Stringeket akarsz beolvasni, nem?
C-ben a stringek karakter tömbbökként vannak reprezentálva. Minden string végén kell lennie egy lezáró 0 -nak a tömbben. Ez nem a tömb végét, hanem a string végét jelzi, ergó a tömbben bárhol, lehet. A stringnek bele kell férnie a lezáró nullával együtt a tömbbe, különben gáz lesz (ergó a tömb mérete > string hossza - 1).
Tehát, amikor Te beolvastad a tömbbe a stringet, akkor nem az n-dik string sort írtad bele, és tároltad az összeset, hanem csak mindig felülírtad az előzőt, mivel egy karaktertömb egy stringet tárol (persze még ez se ment, mivel rossz volt a szintaktika).
Átírtam, így mindig beolvassa a stringet, és ha a 100-at olvasta be, akkor kiírja.
Ha stringek tömbjét akarsz, akkor karakterek mátrixában kell tárolnod őket.
A számlálóra pedig 100-at kell vizsgálnod, nem 99-et, mivel a vizsgálat előtt növeled meg azt, nem utána, és 0-ról indul.
system hívásokat meg ne használj ilyenre. Ha meg akarod akadályozni az ablak bezáródásást, hívj egy getchar() -t a return előtt. Return pedig mindig kell a main fv.-ben ... (meg persze minden nem void fv.-ben)
#include <stdio.h>
int main()
{
FILE* file = fopen("beolvas.txt", "r");
char str[200];
int szamlalo = 0;
while(fscanf(file, "%s", str) != EOF)
{
szamlalo++;
if(szamlalo == 100)
printf("%s", str);
}
fclose(file);
getchar();
return 0;
} -
WonderCSabo
félisten
válasz WonderCSabo #3282 üzenetére
Áh, most vettem észre, hogy véletlenül elcsesztem az egyenlőtlenséget:...
tömb mérete > string hossza
-
it_service
csendes tag
köszi, amúgy úgy is működik ahogy először írtad, csak 2 if kell bele.
-
WonderCSabo
félisten
válasz it_service #3284 üzenetére
Hogy először?
-
Jester01
veterán
Jelzem, az fscanf(file, "%s", str) nem sorokat olvas hanem szavakat, ráadásul mérethatár nélkül tilos használni (túlcsordulás veszély). Sorok olvasására egyébiránt az fgets való.
Jester
-
WonderCSabo
félisten
válasz Jester01 #3286 üzenetére
Igaz, vmiért úgy értelmeztem, hogy soronként egy szava van, lehet, hogy még az első feladatával kevertem össze.
ráadásul mérethatár nélkül tilos használni (túlcsordulás veszély).
Ezt hogy érted?
Szerk.: Jaaa, úgy, hogy egy nagyobb stringet olvas be, mint a tároló, és a tároló tömbbe akarja beírni? Hogy lehet neki megadni limitet, hogyan paraméterezve?
(#3288) ArchElf: Köszi, közben én is rájöttem.
[ Szerkesztve ]
-
ArchElf
addikt
válasz WonderCSabo #3287 üzenetére
Úgy érti, hogy az előre definiált string hossznál is nagyobbat beolvas, ha akkora van a bemeneten (így túlcsordulhat a változó).
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
WonderCSabo
félisten
válasz WonderCSabo #3287 üzenetére
Ja megvan, a format stringben lehet megadni, pl.:
fscanf(file, "%10s", str)
-
weiss
addikt
Ígérem, több topikba nem szúrom be ezt a kérdést Szóval, olyan algoritmusra, vagy esetleg C implementációra volna szükségem, amely naaaaagyon hosszú /millió számjegy nagyságrendű/ pozitív egész számokat konvertál 2,3..-36 számrendszerek között. Találtam egy ilyet, de ez nagyon lassú. A Modern Computer Arithmetic-ban volt egy pársoros algoritmus, de az meg valahogy nem a várt eredményt adja.
I did nothing, the pavement was his enemy!
-
MODERÁTOR
válasz Gyuri16 #3294 üzenetére
Pont hogy gyorsabb. A legegyszerűbb dinamikus struktúra ugye, nem kell fix méretű sok esetben felesleges üres hellyel rendelkező tömb.
Szóval amit írtál nem biztos, hogy igaz.
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
Gyuri16
senior tag
tomb akarhogy is gyorsabb lesz, mar ha a beolvasasrol van szo. itt egy az egyben masolasrol beszelunk, ennel hogyan akarsz gyorsabban a memoriaba juttatni valamit? lancolt listanal sokszor kell memoriat foglalnod es erteket masolnod.
raadasul ha mar megvan a listad mit kezdesz vele? csak sorjaban tudod olvasni ami nagyon redukalja mit tudsz vele csinalni. a masik topicban irtam egy divide and conquer algoritmust, ilyesmit a listan nem tudsz megcsinalni.
ha annyira zavar, hogy kicsit tobb helyet foglaltal (ha mondjuk nem tudod elore mennyi adat lesz) azt utolag fel lehet szabaditani. ha ugyesen csinalod meg mindig kevesebb memoriad van feleslegesen mint lancolt listaval.
viszont tovabbra is nem ez a lenyegi kerdes, hanem, hogy mit akarsz kezdeni az adatokkal, hogyan szamolod at?
Nem vagyok egoista, csak uborkagyalu!
-
MODERÁTOR
válasz Gyuri16 #3296 üzenetére
Most már értelek. Elsőre nekem ez jutott az eszembe. Máshogy hogyan tárolsz egy millió hosszú számot ugye. Arra gondoltam a láncolt listát. Lényegében szerintem láncolt lista, tömb ugyanúgy működne az algoritmus. Ha nem akkor megint nem értem!
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
kingabo
őstag
Persze működne láncolt listával is, de 1millió elemnél elég durva overhead lenne az 500 000. elemet megtalálni, a felezgetésekhez. Másrészt a tömb elemei sorfolytonosan vannak a memóriában, ezekből egyszerre több is bekerül a proci cache-jébe, míg a lista elemei össze-vissza lehetnek a memóriában, sokkal többször kellhet a procinak a ramhoz fordulnia. Ekkora elemszámnál meg már elég rendesen érvényesül a sok kicsi sokra megy mondás...
-
Ricqy
tag
Sziasztok!
Van valami mód egy int "hosszúságának" meghatározására?
Úgy értem:
1-> 1
123-> 3
12-> 2
Köszönöm!Dealloc makes the ARC-angels cry.
Ú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!
- Óvodások homokozója
- ASUS blog: hátra a csatlakozókkal!
- Márkaértékben az Apple a legjobb a világon
- Milyen monitort vegyek?
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Vodafone mobilszolgáltatások
- Mesterséges intelligencia topik
- Luck Dragon: Asszociációs játék. :)
- Milyen CPU léghűtést vegyek?
- Parci: Milyen mosógépet vegyek?
- További aktív témák...
- Felújított Asus rog strix G15 G1512LI + ajándék, 2025.02.20-ig garis! /INGYEN FOXPOST!/
- BenQ PD3205U 4K Tervezői Monitor!32"/99% sRGB/Pantone/AQCOLOR/Type-c/Mac Ready/Beszámítás!
- Samsung Odyssey G8 Ívelt Ultrawide Oled Monitor!34"/Oled/WQHD/175hz/0,1ms/Freesync-G-sync/Beszámítás
- Ahh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 16GB 512GB SSD FHD IPS
- Ohh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 8GB 256GB SSD FHD IPS