- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Nvidia GPU-k jövője - amit tudni vélünk
- Jönnek a 144 Hz-es LG OLED tévék
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- AMD GPU-k jövője - amit tudni vélünk
- Milyen belső merevlemezt vegyek?
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- TCL LCD és LED TV-k
- Apple MacBook
- AMD Navi Radeon™ RX 9xxx sorozat
Új hozzászólás Aktív témák
-
WonderCSabo
félisten
válasz
PumpkinSeed #3572 üzenetére
-
WonderCSabo
félisten
válasz
WonderCSabo #3287 üzenetére
Ja megvan, a format stringben lehet megadni, pl.:
fscanf(file, "%10s", str)
-
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.
-
WonderCSabo
félisten
válasz
it_service #3284 üzenetére
Hogy először?
-
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
-
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
it_service #3279 üzenetére
Hát akkor mutasd meg a kódot, és megnézzük mi a baja.
-
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.
-
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.
-
WonderCSabo
félisten
válasz
it_service #3270 üzenetére
Igen, paritást így lehet ellenőrizni.
-
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.
-
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?
-
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;
} -
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.
-
WonderCSabo
félisten
válasz
ArchElf #3196 üzenetére
Jah, csak az a típus .NET könyvtárban érhető el...
shinodas: Használhatsz double -t, akkor közelebb kerül az érték. Sajnos a számítógépes számábrázolásnak vannak ilyen hátulütői, pont ezért lebegőpontos értéknél sosem nézünk egyenlőséget, mindig vmi küszöbértéket vizsgálunk.
Ehh, Jester megint megelőzött...
-
WonderCSabo
félisten
#include <stdio.h>
/* C - ben nincs namespace,
includeolni viszont itt is kell... */
const float p = 3.14;
void f(const float x, float* const u, float* const a)
{
/*
az itt deklarát lokális változókat
nem látja az ir fv, ezárt át kell adni módosításra is
*/
*u = p * x * x;
*a = 2 * p * x;
}
void ir (const float u, const float a) /* át kell adni ezeket - et, a main-beli
lokális a, u az ir - bõl nem látszik */
{
FILE* file; /* ha ez is f-nek hívod, bekavar az u.a.
nevû fv - el... */
file = fopen("eredmeny.txt","w");
fprintf(file, "terulet: %f cm2 kerulet: %f cm", u, a);
fclose(file);
}
int main()
{
float x, a, u;
char cont = 'i';
char c;
do
{
printf ("\n sugar: ");
scanf ("%f", &x);
scanf("%c", &c); /* különben a getchar a bufferben lévő
\n - t olvassa be, és emiatt terminál a ciklus*/
if (x < 1 || x > 500) printf ("hiba"); /* a feltételed szerint 1 - nél se lehet kisebb */
else
{
f(x, &u, &a);
ir (u, a);
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont = getchar(); /* a fv. neve getchar... */
}
while ((cont == 'I') || (cont == 'i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getchar();
return 0;
} -
WonderCSabo
félisten
A meg egy B mátrixom azokat úgy írom fel hogy B*A
Akkor, ha B-t kell balról A-val megszorozni, egyébként fordítva.
Látom sikerült az első Google találatot lemásolni, és azt is rosszul... Tessék:
#include <stdio.h>
int main()
{
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[2][2];
int i, j, k, r1=2, r2=3, c1=3, c2=2;
for(i=0; i<r1; i++)
{
for(j=0; j<c2; j++)
{
fMatrixBA[i][j]=0;
for(k=0; k<r1; k++)
{
fMatrixBA[i][j]+=fMatrixA[i][k]*fMatrixB[k][j];
}
printf("%f\t",fMatrixBA[i][j]);
}
printf("\n");
}
return 0;
}Ja és egy 2x3 * 3x2 szorzatából 2x2 -es mátrix lesz...
-
WonderCSabo
félisten
Nem tanultál mátrixalgebrát? Itt van szépen leírva mik a mátrixszorzás szabályai (ami 2x2 * 2x2 esetben még egyszerűbbre degradálódik), ez alapján már elég könnyű megírni az algoritmust. Azt, hogy balról szorzod, így önmagában nem elég megszorítás, kérdés melyik mátrix lesz a baloldalon.
-
WonderCSabo
félisten
válasz
Jester01 #3002 üzenetére
Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van
Miért is? Én lefuttattam a progit a kijavított keresőfv-el, megtalált mindent, ezzel nem volt gond. Nyilván 255-nél hosszabb stringekre nem próbáltam meg.
Egyébként a maint nem nagyon néztem, csak az algoritmust.
-
WonderCSabo
félisten
Megírtam egy picit más megközelítéssel. Nem lehet, hogy a mainben rossz vmi? Én most már fáradt vagyok elemezni ezt a bonyolult problémát.
int vizsgal(char s1[], char d1[])
{
int i, j;
int b = 1;
for(i = 0; i<= strlen(s1)-strlen(d1); ++i)
{
for(j=0; j < strlen(d1); ++j)
{
if(s1[i+j-1] != d1[j])
{
b = 0;
break;
}
else
b = 1;
}
if(b)
return i-1;
}
return i-1;
} -
WonderCSabo
félisten
Válaszoltam a C++ topikban, de itt folytassuk.
-
WonderCSabo
félisten
válasz
LumberJack #2965 üzenetére
Ez sztem le se fordul, mert a szamok valtozó sehol sem volt deklarálva. Egyébként miért az ifekkel szórakozol, miért nem csinálod a beolvasást/kiírást beágyazott ciklussal?
-
WonderCSabo
félisten
válasz
Sk8erPeter #2940 üzenetére
Ez nem fordítási hiba, még warning sem.
-
WonderCSabo
félisten
válasz
Neoteric #2856 üzenetére
lordfreyr: Nem lehetséges. Csinálj egy structot, és azt rakd be egy tömbbe.
Szerk.: Vagyis lehetséges, polimorfizmussal, de sztem Te nem erre gondoltál.
Illetve hogy tudom az előbbi módon eltárolt értékeket eltárolni a programban annak kilépése után is azok fájlba írása nélkül?
Ezt nem is értem hogy gondoltad. Fájlba írás nélkül semmit se tudsz eltárolni. A program futásakor az össze lefoglalt memória felszabadul, de ha mégsem, akkor áramtalanításkor mindenképp. De amúgy se érheted már el normális esetben ezeket a területeket. Fájlba kell kimenteni.
-
WonderCSabo
félisten
válasz
eriktoth #2811 üzenetére
Nem tudom mivel kell műveletet végezned, de csináld ezt: vmilyen változókba visszatérsz az első beolvasó fv-el, majd ezekre a main-ben meghívod a műveletet elvégző fvt.
int main(){
a = beolvas();
művelet(a);return 0; }
Szerk.: De ha erre nem jöttél rá magadtól, akkor nem magyarázták el rendesen a függvényeket.
-
WonderCSabo
félisten
Mondjuk nem hiszem, hogy az algoritmus implementálása bárkinek gondot okozna. Ha mégis, akkor az angol wikin ott van implementálva pszeudokódban, azt már csak át tudja írni C-re.
-
WonderCSabo
félisten
Van egy pár, a legismertebb az Euklideszi algoritmus.
-
WonderCSabo
félisten
válasz
Sk8erPeter #2421 üzenetére
LOL. Ezt a képet minden programozás fórumtopik első hszébe kéne rakni.
Ú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!
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Azonnali játékos kérdések órája
- Megjelent a Poco F7, eurós ára is van már
- Foxpost
- Formula-1 humoros
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Bittorrent topik
- Mibe tegyem a megtakarításaimat?
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- További aktív témák...
- BESZÁMÍTÁS! Gigabyte A620M R5 7500F 32GB DDR5 512GB SSD RX 6700 XT 12GB Rampage SHIVA Chieftec 700W
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 9800X3D 64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- Samsung Galaxy S22 128GB, Kártyafüggetlen, 1 Év Garanciával
- Csere-Beszámítás! AMD Ryzen 5 9600X Processzor!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest