- Azonnali fotós kérdések órája
- Vezeték nélküli fülhallgatók
- Fejhallgató erősítő és DAC topik
- Vezetékes FEJhallgatók
- Milyen TV-t vegyek?
- Nyárbúcsúztató hardvermix
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- A 3D V-Cache és a rengeteg memória lehet az új PlayStation fő fejlesztési iránya
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
Ú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!
- BOMBA ÁR Új Dell Inspiron 16" Gamer Tervező Vágó Laptop -50% Ultra 7 155H 16/1TB RTX 4060 8GB 2,5K
- ASUS ROG STRIX RTX 4070 Ti SUPER OC Edition 16G (kishibás) videokártya garanciával
- Iskolakezdési AKCIÓ! - I7-8700/16GB DDR4/Gigabyte B360/GTX1070/1TB HDD/240GB SSD - 144.999,-
- HP ZBOOK 17 G6 Tervező Vágó Laptop -60% 17,3" i7-9850H 16/512 QUADRO RTX 3000 6GB FHD
- Samsung S21 5G megkímélt jó állapotban.
- Xbox Game Pass Ultimate előfizetések kedvező áron
- BESZÁMÍTÁS! Gigabyte H510M i3 10100F 16GB DDR4 512GB SSD GTX 1050 Ti 4GB Zalman N4 Chieftec 400W
- GYÖNYÖRŰ iPhone 11 Pro 256GB Midnight Green -1 ÉV GARANCIA - Kártyafüggetlen, MS2048, 96% Akksi
- Asus TUF Gaming F17 FX707 - 17.3"FHD IPS 144Hz - i7-13620H - 32GB - 1TB - RTX 4060 -3+ év garancia
- Microsoft Surface Laptop 5 13,5" i7-1265U 16GB 512GB magyarbill 1 év garancia
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest