- Motorola Moto Tag - nyomom, követ
- Ez lehet a legnagyobb akkuval szerelt Snapdragon 8 Elite telefon
- Motorola Edge 40 neo - színre és formára
- Honor 200 Pro - mobilportré
- Xiaomi 12T Pro - kétszínű, mint a kétszázas
- Motorola Edge 30 Neo - wake up, Jr...
- VoLTE/VoWiFi
- iPhone topik
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Xiaomi 13 - felnőni nehéz
Új hozzászólás Aktív témák
-
buherton
őstag
válasz
kovisoft #6373 üzenetére
Úgy érzem, hogy ezt nem fogom megérteni soha. Évek óta nem nyúltam C kódhoz csak C++-hoz, de annak is már 2 éve. Bár ezekkel akkor sem voltam tisztában.
Ráadásul rettenetesen bosszant az, hogy több C kvízes oldalon vannak hibás feladványok. Az egyik típus hiba az volt, hogy a függvény int-t várt és rendbe ott volt az if, hogy csak 0-nál nagyobb számokkal foglalkozzon. Negálás sehol nem volt, vagyis negatív számokra nem működik jól a függvény. A másik típus hiba az, hogy a két sequence point között csak egyszer lehet az értéket módosítani. Illetve volt még olyan is, hogy singed negatív számot akart shiftelni, ami undefined.
struct player
{
char pname[20];
}pl;
char* play(struct player *temp_pl)
{
strcpy(temp_pl->pname, "kohli");
return temp_pl->pname;
}
int main()
{
strcpy(pl.pname, "dhoni");
printf("%s %s", pl.pname, play(&pl));
return 0;
}Ez is egy kvíz, ahol nincs olyan opció, hogy undefined. Undefined-nak gondolom, mert a függvény paraméter kiértékelés sorrendje nincs leírva a szabványban.
-
buherton
őstag
válasz
kovisoft #6329 üzenetére
Hirtelen nem fogtam fel a kódot és azt hittem ez két külön megoldás. Igen, egyébként pont így van. Annyit tennék hozzá, óvatosan azzal, hogy “nem fog hivatkozni rá senki”
.
Nem is olyan régen találtam egy elég nagy program részt ahol tömegével voltak ilyen már nem érvényes memóriára való hivatkozások. Megpróbáltam kijavítani, de csak több ilyen hibába futottam. Inkább gyorsan dobtam a módosításom és fütyürészve tovább álltam, mintha mi sem történt volna. Soha nem csináltam még ilyet, de az a katyvasz hetekre magával rántott volna. Köszöni szépen azóta is “jól” van.
Egy másik sztori. Kernel spaceben ügyködtek a “kompetens” kollegák. Egy függvény lokálban létrehozott egy struct-t, ami aztán meg is szűnt. Aztán jött egy másik függvény, ami szintén létrehozta a saját structját. Aztán jöttem én. Teljesen más helyen javítottam egy bugot, amire elkezdett a kernel pánikolni. Kiderült hogy a másik függvény structja a előző struct értékeit olvasta ki a stackről és a módosításom csúsztatott annyit a stacken, hogy pont ne passzoljanak.
-
#90088192
törölt tag
válasz
kovisoft #6280 üzenetére
Mindig valami új, azért érdeklődöm, mert tirisztor gyújtás szöget akarok kiszámolni a szinusz hullám integrálásával ami megadott kimenő teljesítmény mellett értendő
A másik pedig egy inverter IGBT gyujtasa ami impulzus alapon nyugszik, vagyis egyfajta kvantalast akarok csinálni.Tudom ez nem C de a matek igen, hiszen egy processzor lesz megbízva a számítással.
Köszönöm
-
pmonitor
aktív tag
válasz
kovisoft #6247 üzenetére
Egy olyan kódot, mint ami itt a 272-473 sorok között van(vagy ennél hosszabb függvény) kódot így sem, úgy sem lát át utólag senki, akármennyire az olvashatóság jegyében íródott, nem az akadémiai szempontok szerint. Tehát így is úgy is, megizzad vele, aki ezt utólag át akarja látni. Még ha az nézi, aki csinálta, ő is beleizzad.
-
pmonitor
aktív tag
válasz
kovisoft #6232 üzenetére
Ki mit szokott meg. Nekem pl. teljesen idegen ez a behúzás:
if (!raw)
{
utasítás1;
}Tehát hogy a blokk elejét-végét jelző kapcsos zárójelet is behúzzák.
Én inkább így szoktam:if (!raw)
{
utasítás1;
}Vagy pl. Javascriptben:
if (!raw) {
utasítás1;
}Így sokkal több behúzást könnyebb megérteni számomra.
-
DopeBob
addikt
válasz
kovisoft #6137 üzenetére
Ah, megvan, azt nem állítom, hogy pontosan értem de működik:
Ez nem jó:
int (*statData)[statDay] = malloc(sizeof(int[statDay][OPEN_HOURS]));
Ez ok, szépen lehet indexelni, adatok a helyükön.
int (*statData)[OPEN_HOURS]= malloc(sizeof(int[statDay][OPEN_HOURS]));
Nagyon köszi a segítséget
-
DopeBob
addikt
válasz
kovisoft #6137 üzenetére
Megnézem, de ennél a résznél kezdem elveszteni már a fonalat
Pluralsight-on csinálom a C képzéseket, pont azt monta az oktató ennél a résznél, hogy ez a legegyszerűbb módja mert egyszerű utána felszabadítani a memóriát, és ugyan úgy lehet hivatkozni egy elemet, ahogy statikus 2D tömbnél. Neten- YT-n mindenhol a for ciklussal feltöltögetős verziót láttam, azért örültem meg ennek, de hát nem megy.
Amit írtál azt hogy kell elépzelni, nem teljesen értem. Egy sort ki tudok választani egy pointerre és egy elemet egy indexel?
-
-
#90088192
törölt tag
válasz
kovisoft #6105 üzenetére
Köszönöm
Az y_offset át kell hogy nevezzem mert megtévesztő, ez az x tengelyen való eltolást jelöli, semmi dolga nincs magával a fonttal, vagy nem teljesen értelek
Próbáltam utána olvasni a struktúrának, egyenlőre nem vagyok vele meg kibékülve, de dolgozom rajta
A másik dolog amin ügyeskedek, a font magassága se jelentsen problémát, vagyis képes legyek több memória lapra kivetítve is elküldeni az adatokat. Arra mar rá jöttem, a font sima decimálisban van(olyat találtam mind a 16 bit egy számot alkot, ami a magasságát teszi ki a karakternek), akkor egyszer 8 pozíciót jobbra, máskor 8 pozíciót balra kell tolni és maris megvan a 8-8 bit, vagy legalábbis remélem
A memória olvasást megoldottam, így mar tudok 1 db pixelt bárhol kapcsolni, anélkül, hogy befolyásolnám az adott lapon levő többi pixelt
Köszönet a segítségért meg egyszer
-
#90088192
törölt tag
-
dabadab
titán
válasz
kovisoft #6091 üzenetére
amúgy sem jó, mert a feltételben a szimpla = jel nem egyenlőségvizsgálat, ami a dupla ==, hanem értékadás
És az még mindig nem lenne jó, mert a szükségesnek pont a fordítottja lenne - ugyanis az ott nem a kilépés feltétele, hanem az ismétlésés (vagyis akkor hagyja abba a do ... while-t, amikor az NEM igaz)
-
-
borisz1994
csendes tag
-
jattila48
aktív tag
válasz
kovisoft #6042 üzenetére
Bármelyik kivágott lyuk a forgatások miatt 4 pozíciót határoz meg, amelyek közül csak ezt az egyet lehet kivágni. Hogy egy, forgatások által meghatározott négyes melyik elemét választod ki, az 4-féleképpen lehetséges. Összesen 9 db. négyes van, amelyek mindegyikéből csak egy-egy elemet lehet kiválasztani, ezt pedig összesen 4^9 féleképpen lehet megtenni. Szerintem az én megoldásom a jó!
Egyébként ilyen módon a Cardano rácsot a (rejtjelezés kulcsát) egy 9 hosszú sorozattal lehet reprezentálni, amelynek minden eleme pl. 1,2,3, vagy 4 (pl. 1,3,2,1,2,4,3,2,4), és meg lehetne állapodni, hogy a sorozat elemei rendre az (sor,oszlop)=(1,1),(1,2)(1,3)(1,4),(1,5)(2,2),(2,3),(2,4),(3,3) elemek által reprezentált 4-esek valamelyik elemét jelentik. A fenti példából az (1,1),(6,5),(3,6),(1,4),(5,6),(5,2),(5,4),(4,5),(4,3) Cardano rács adódik, méghozzá úgy, hogy a reprezentáló elemeket helyben hagyjuk (a kulcsban ezt 1 jelöli), vagy 90 fokkal jobbra (2 jelöli), 180 fokkal jobbra (3 jelöli), 270 fokkal jobbra (4 jelöli) forgatjuk.
Lehetne bonyolítani a programot, hogy a kulcsot ilyen tömörebb módon adjuk meg.
Érdemes lenne elgondolkozni azon, hogy hogy lehet egy elég hosszú szöveget a kulcs ismerete nélkül megfejteni. A maga idejében ez elég reménytelen feladatnak látszott, azonban számítógép segítségével ma már nem az. -
jattila48
aktív tag
válasz
kovisoft #6034 üzenetére
A baj csak az, hogy a tömbre mutató pointerhez hozzá van kötve a tömb mérete. Tehát, ha a tömbre mutató ponter egy fv. argumentuma, akkor annak semmilyen más méretű tömböt nem lehet átadni. Így aztán a tömb méretét lekérdezni nem sok értelme van, hiszen ez a fv. csak ilyen méretű tömböt képes fogadni.
Nem vitatkozni akarok, csupán érdekel, hogy miért létezik ez a konstrukció a C nyelvben. Akkor lenne értelme, ha nem lehetne elkerülni a használatát, vagy az elkerülése bonyolultabb lenne. Ehelyett mindig el lehet kerülni, és egyszerűbben, mint használni. Pointereket leggyakrabban azért haználunk, hogy az általuk mutatott memória címen megváltoztassuk a memória tartalmát (vagy mert a stack-en nem lehet nagyméretű objektumokat átadni). Ehhez képest a tömbre mutató pointeren keresztül nem változtatjuk meg a tömböt (ami itt a tömb címét jelenti), hiszen az nem is balérték. Úgy tűnik, hogy igazából semmi értelme nincs, mindössze a C típusdefiníciós szintaxisának egy csökevénye. -
jattila48
aktív tag
válasz
kovisoft #6032 üzenetére
Ha több ugyanolyan típusú tömböt egységesen akarok kezelni, akkor:
int ia1[5],ia2[5];
int *pia;
pia=ia1;
//valamit csinálok a pia pointeren keresztül
pia=ia2;
//stb...Ha a méretükre van szükségem, akkor
ARRAYSIZE(ia1)
,
de még egyszerűbb, ha#define ASIZE 5
int ia1[ASIZE],ia2[ASIZE];
... -
elistvan
őstag
válasz
kovisoft #5999 üzenetére
Szia!
Köszi. Pont azt szerettem volna elérni, hogy átláthatóbb legyen. Rosszul fejeztem ki magam.
A dupla kiírás eredeti célja az lett volna, hogy előbb simán kiírja a ciklus ahogy megtalálta a számot aztán emelkedő sorrendben. (Mint a tv-s sorsoláson.)
A konkrét programon egy ilyen tömbös rövidítést meg tudnál mutatni? Mert ezt a részt nem igazán értem.
-
DEV_NULL
őstag
válasz
kovisoft #5995 üzenetére
Köszi a segítséget!
Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:
#include <stdio.h>
typedef struct
{
unsigned int tomb[50];
unsigned int szam, db;
unsigned int meret, meret2;
} Nehez;
Nehez meret()
{
Nehez hazi;
hazi.meret2=0;
hazi.db=0;
scanf("%u", &hazi.meret);
return hazi;
}
Nehez beker()
{
Nehez hazi;
unsigned int h, a;
for(h=0; h<hazi.meret; h++)
{
scanf("%u", &hazi.szam);
a=0;
while(a<h && hazi.szam!=hazi.tomb[a])
{
a++;
}
if(a==h)
{
hazi.tomb[hazi.meret2]=hazi.szam;
hazi.meret2++;
}
}
return hazi;
}
Nehez rendez(Nehez hazi)
{
unsigned int h, a;
for(h=0; h<hazi.meret2; h++)
{
for(a=h+1; a<hazi.meret2; a++)
{
if(hazi.tomb[h]>hazi.tomb[a])
{
hazi.szam=hazi.tomb[a];
hazi.tomb[a]=hazi.tomb[h];
hazi.tomb[h]=hazi.szam;
}
}
}
return hazi;
}
Nehez szamol(Nehez hazi)
{
unsigned int h, a, z, i;
for(h=0; h<hazi.meret2; h++)
{
for(a=h+1; a<hazi.meret2; a++)
{
for(z=a+1; z<hazi.meret2; z++)
{
for(i=z+1; i<hazi.meret2; i++)
{
if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z])
{
hazi.db++;
}
}
}
}
}
return hazi;
}
void kiir(Nehez hazi)
{
printf("%u", hazi.db);
}
int main()
{
Nehez hazi;
hazi=meret();
hazi=beker();
hazi=rendez(hazi);
hazi=szamol(hazi);
kiir(hazi);
return 0;
}
-
#PeTeY#
aktív tag
válasz
kovisoft #5986 üzenetére
Nagyon köszönöm. Már munkahelyen vagyok, este megnézem.
Bár, most első ránézésre... Na, megpróbálom majd értelmezni. És tisztáznám, mit is akarok, mert valószínű nem voltam valami összeszedett már tegnap este. Mondjuk nem biztos, hogy most jobb lesz...
Szóval a feladat szerint a program egy fájlból kiolvas majd 3 dolgot. Egy egész számot, mint kód. Ennyi oszlopa lesz majd a mátrixnak, amibe be kell "tölteni" a harmadik paraméterben kapott szöveget, amit kódolni, vagy dekódolni kell. Illetve egy kulcsot azaz számsort, ami ebben a mátrixban mutatja az oszlopok sorrendjét. Kódolásnál be kell írni sorfolytonosan a mátrixba a szöveget: azaz a[0][0]-ba az első karakter, a[0][1]-be második, stb, és kiolvasásnál a kulcs által megadott sorrendben kell kiírni. Nálam a konkrét kódban, ugye a 3. oszlop utolsó sorában lévő karakter lesz az első, aztán ugyanezen oszlop utolsó előtti sorában lévő a második egészen az első sorig, majd jön a 4. oszlop utolsó sorában lévő, stb. Ezt a segítségetekkel sikerült is megcsinálni. Viszont a dekódolásnál ezt írja szó szerint a feladat: "A dekódoláshoz az adott sorrendben töltjük fel az oszlopokat, majd a szöveget sorfolytonosan olvassuk ki a táblázatból..." Azaz ha jól értem, fordítva kéne, mint a kódolásnál. Bocs a hosszú szövegért. -
#PeTeY#
aktív tag
válasz
kovisoft #5984 üzenetére
Valóban. Nagyon köszi... Logikus, hogy sorok esetében lentről felfelé kell haladni, ha azt akarom, hogy így legyen kiírva.
Pár év és belejövök.
Még egy kérdésem lenne, mert ehhez már nagyon fáradt vagyok: Hogyan oldom meg, ha azt szeretném, hogy a titkosítani kapott szöveget a kulcsnak megfelelően rendezze oszlopokba? Azaz itt az első négy karakter kerüljön a 3. oszlopba, úgy hogy az első karakter van a legalsó sorban... -
#PeTeY#
aktív tag
válasz
kovisoft #5982 üzenetére
Rendben. Szóval, a lényeg, hogy kódolni kéne egy szöveget úgy, hogy egy megadott kulcs alapján olvasom ki oszloponként a szöveget alulról felfelé. Sikerül megcsinálni a kódolás részét, azaz megfelelő sorrendben adja vissza az oszlopokat, de nem alulról felfelé. És nem látom, miért. Bár biztos ez is tök egyszerű:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int kod = 7;
int kulcs[32] = {3,4,2,1,5,6,7};
char szoveg[256] = {"eztaszovegetkelltitkositanod"};
int n = 28 / kod;
char tomb[n][kod];
FILE* ki = fopen("ki.txt", "w");
if (ki == NULL) {
printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
exit(1);
}
int i, j, count = 0;
for (i=0; i<n; ++i) {
for (j=0; j<kod; ++j) {
tomb[i][j]=szoveg[count];
count=count+1;
fprintf(ki, "%c ", tomb[i][j]);
}
fprintf(ki, "\n");
}
fclose(ki);
FILE* ki2 = fopen("ki2.txt", "w");
if (ki2 == NULL) {
printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
exit(2);
}
char kodolt[256];
int l=0;
for(j=0; j<kod; j++) {
for(i=0; i<n; i++) {
kodolt[l] = tomb[i][kulcs[j]-1];
fprintf(ki2, "%c", kodolt[l]);
}
}
fclose(ki2);
return 0;
}
-
kovisoft
őstag
válasz
kovisoft #5955 üzenetére
Közben még agyaltam egy általánosabb megoldáson is, ami egyesével olvassa ki a biteket. Triviálisan mindig az alsó bitet lehetne kiolvasni, kiírni, aztán jobbra shiftelni a biteket a számban amíg el nem fogynak a bitek. Viszont így fordított sorrendben írnánk ki a biteket. A lenti kód ehelyett mindig a felső bitet olvassa ki, majd balra shifteli a biteket, de legelőször berak jobbra egy plusz 1-es bitet, hogy tudja, mikor kell abbahagyni a ciklust:
dec=(dec<<1)|1;
while ((dec&255)>0)
{
printf("%d", (dec&256)>>8);
dec=dec<<1;
}
printf("\n");
Szerk: mi a hibaüzenet?
Ú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!
- Egyedi ékszerdobozka
- BESZÁMÍTÁS! ASRock B250 i5 7400 16GB DDR4 512GB SSD GTX 1660 SUPER 6GB Rampage Everest 500W
- Bomba ár! Lenovo X1 Yoga 2nd - i7-7G I 8GB I 256SSD I 14" WQHD I HDMI I W11 I CAM I Garancia!
- BESZÁMÍTÁS! Gigabyte B760M i5 13400F 16GB DDR4 512GB SSD RTX 3070 8GB Pure Base 500DX fehér 650W
- Új és használt laptopok , üzletitől a gamerig , kedvező áron. Garanciával !
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest