Új hozzászólás Aktív témák
-
don_peter
senior tag
-
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?[ Szerkesztve ]
-
elistvan
senior tag
-
#PeTeY#
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;
}
-
#PeTeY#
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#
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. -
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;
}
-
elistvan
senior tag
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.
[ Szerkesztve ]
Minőségi angol humor magyar felirattal: http://goo.gl/5kvyBr
-
sztanozs
veterán
-
jattila48
aktív tag
válasz kovisoft #6028 üzenetére
Nem felel meg, mert az arr nálad csak egy tömb, nem pedig tömbre mutató pointer. Az én példámban
sizeof(pia)==4
(vagy 8), azaz pointer méret. Náladsizeof(arr)
az arr tömb mérete. A tömb nem ugyanaz, mint a tömbre mutató pointer.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
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];
...[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
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.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
elistvan
senior tag
válasz kovisoft #6019 üzenetére
Ez okés de a kódolás része akkor hogy zajlik?
6. A felcserélt karakterekből álló szöveget rejtjelezzük a megadott Cardano-rács alkalmazásával, és az eredményt 6×66×6-os rácsban – a minta szerint – írassuk ki a sandormatyas.txt fájlba.
Minőségi angol humor magyar felirattal: http://goo.gl/5kvyBr
-
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.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz kovisoft #6044 üzenetére
Lehet nem jó smiley-t tettem a mondat végére? Reméltem, hogy érteni fogod a viccet. Direkt nem írtam oda kiszámolva, hogy szemmel láthatóan különbözőnek tűnjön. Na persze, ha valaki kiszámolja,... úgy nem ér!
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
borisz1994
csendes 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)
DRM is theft
-
#90088192
törölt tag
-
#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
[ Szerkesztve ]
-
jattila48
aktív tag
-
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?
[ Szerkesztve ]
MZ/X
-
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
MZ/X
-
Szőrös
veterán
válasz kovisoft #6146 üzenetére
Ahaaa, na talán kapizsgálom amit írtál. Köszi szépen, nekiesek majd és e szerint átírom Nem voltál lassú amúgy, elvi iránymutatást kértem azt megadtad, a fenti kódot még nem néztem meg. Majd ha nem sikerül megírnom akkor rálesek arra
https://starcitizen.hu ha tudni akarod mi újság az univerzumban
-
pmonitor
aktív tag
-
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.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
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.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
Ú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!
- Ezek a OnePlus 12 és 12R európai árai
- Kerékpárosok, bringások ide!
- Android alkalmazások - szoftver kibeszélő topik
- Robotporszívók
- Autós topik látogatók beszélgetős, offolós topikja
- Linux kezdőknek
- Stellar Blade
- HiFi műszaki szemmel - sztereó hangrendszerek
- Politika
- Motorola Moto G24 Power - hol van az erő?
- További aktív témák...
- Amazfit I T-REX 2 I GTS 3 I GTR 3 I GTR 3 Pro
- Új Latitude 7440 2-in-1, FHD+ IPS kihajtható érintő, i7-1365U, 32GB DDR5, 512GB NVMe, IR kamera, gar
- Beszámítás! GB H610M i5 13400F 32GB DDR4 1TB SSD RTX 3070Ti 8GB MONTECH AIR 1000 Lite Corsair 650W
- Xiaomi Instant Photo Printer 1S Set Bontatlan!
- Beszámítás! GB H610M i5 13400F 16GB DDR4 250GB SSD RTX 3070Ti 8GB MONTECH AIR 100 Lite Chieftec 700W