- Kicsomagolták a Vivo X Fold 5-öt (videó és fotók)
- Szerkesztett és makrofotók mobillal
- iPhone topik
- Honor 200 Pro - mobilportré
- Huawei Mate X6 - keleti oldal, nyugati oldal
- Milyen okostelefont vegyek?
- Android alkalmazások - szoftver kibeszélő topik
- VoLTE/VoWiFi
- Samsung Galaxy A54 - türelemjáték
- Egyszerre legnagyobb és legkisebb is a Garmin Venu X1
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
alapz@j #6345 üzenetére
Ja, hagyhattad volna. Dabadabnak válaszolva le is írtam, hogy én is arra gondoltam, mint ő. Technikailag nagyon is tisztában vagyok vele, hogy lehet ilyen hibát elkövetni. Inkább azt nem értem, hogy (valószínűleg nem kezdő) programozók production kódban hogyan követhetnek el ilyet, és hogy maradhat benne egy code review során. Egyébként évekkel ezelőtt tettem szóvá ezt: [link] . Move szemantika, lap alja, visszatérés jobbérték referenciával. A hibát elismerték, azóta is hibásan van kint. Remélem a diákok nem veszik szentírásnak az ott leírtakat. Vagy mégis? Mert akkor már értem.
-
pmonitor
aktív tag
válasz
alapz@j #6339 üzenetére
Nem azért írja ki a Hellot!-t, mert ugyanolyan a kezdeti stack frame-je! Ha t2()-t így módosítod:
void t2(void) {
int err = 0;
char chrarr[256] = "Erik.";
char msg[32];
puts(chrarr);
puts(msg);
}akkor is a Hello!-t írja ki. Egyszerűen memóriaszemét lesz a t1() után. Ezért kell mindig feltölteni a tömböt allokálás után.
-
ampulla
aktív tag
válasz
alapz@j #5867 üzenetére
Sajnos nem működik úgy sem azért kezdtem el paraméterezni. Azonban ha hozzáadom a path environment variable-hez, akkor működik. Ez mitől van?
A codeblocks siman lefordítja azzal a paranccsal, hogy:Gcc main.c -o hello
Egy sima hello world programot akarok lefordítani.
Másreszt azért mutat a bin-re mert a mingw install manager oda tette a dll fájlokat.
-
DasBoot
aktív tag
válasz
alapz@j #5768 üzenetére
Köszönöm! Nem is azzal van a probléma, mint kezdő, de nem a nulláról kezdő (nem írom le, hogy mi a munkám, de ilyen jellegű programozással először találkozom), hogy hová írjam, azt sok helyen leírják pl. könyvben ,és nem is a tutorial-lal van a gond, hanem mivel írjam oda, ahová kell! Ez volt az első kérdésem. Sajnos, akik válaszoltak itt éppen efölött siklottak el, persze később ez javításra került. Amint sikerül feltelepítenem és normálisan használatba vennem az adott programot, jöhet a link és a tutorial.
-
dobragab
addikt
válasz
alapz@j #5727 üzenetére
Vagy elolvasod ezt és lenyúlod a függvényeit. Mindenképpen utf-8-ként érdemes kezelni a szövegeket.
-
llaszlo
veterán
válasz
alapz@j #5725 üzenetére
Ok, de honnét tudom, hogy milyen bytesorozat kell nekem? Ilyet még nem csináltam korábban.
Kiolvasok 16 bitet/2 byte-ot és azt ellenőrzöm/hasonlítom?
Viszont ha a sima betűk meg csak 1 byte-ot foglalnak.
Esetleg kiolvasok 1 byte-ot, ellenőrzöm, hogyha van egyezés, akkor meg van a betű, hogyha nincs, akkor hozzá olvasom a következő byteot is és így hasonlítok? -
válasz
alapz@j #5690 üzenetére
Az egyik elv az, hogy csak akkor valtoztatnak meg szabalyokat/mintakat, amikor arra kifejezetten jo ok van. Tehat ha idaig jo volt az ANSI, es az ujabb feladatokat is meg lehet oldani igy, akkor nem tesznek a fejlesztokre extra mentalis terhet azzal, hogy varialnak.
A C++ (Scala, etc.) egyik fo problemaja, hogy nagyon sok modszerrel meg lehet csinalni ugyanazt. C++-ban irhatsz proceduralis, OO, funkcionalis, etc. programot, ami egyreszt meno+kenyelmes, masreszt sokkal nehezebb megakadalyozni, hogy egy nagyobb projektnel divergaljon a stilus/megkozelitest. A sokfele megkozelites meg azt eredmenyezi, hogy a projekt reszvevoinek 1) allandoan el kell donteni, hogy melyiket alkalmazzak 2) nehezebb ertelmezni a masik kodjat.
Pl. a Java ezert is olyan sikeres -- egy Java kodot _barki_ el tud olvasni. (Ott a komplexitast attoltak a frameworkok szintjere.)
-
dabadab
titán
válasz
alapz@j #5622 üzenetére
Ha már optimalizálunk, akkor csináljuk rendesen:
switch(c)
{
case 'a':
case 'e:
case 'i':
case 'o':
case 'u':
case 'A':
case 'E:
case 'I':
case 'O':
case 'U':
return 1;
default:
return 0;
}vagy ha van valakinek türelme egy 256 elemű tömböt teleírni egyesekkel meg nullákkal:
return maganhangzok[ c ];
-
don_peter
senior tag
válasz
alapz@j #5496 üzenetére
Hát így
Én nem kaptam oktatást minden amit tudok azt magamnak és nem a fizetett egyetemnek köszönhetem..
nem sok, de kérdezni tudok és ti remélhetőleg segítetek annak aki nem tud valamit.
Biztos én is tudnék példát felhozni arra, hogy te mit és miért csinálsz, ha ezt vagy azt nem tudod...
Mindig érdemes magadból kiindulni mielőtt kritizálsz.
Nem születik az ember programozónak, úgy tanulja meg, hogy megmondják neki.
Amúgy eljutottam odáig, hogy byte-onként olvasom be a fájlt egy tömbbe és azt íratom ki..
Szépen lassan megírom egyedül is a programot. -
EQMontoya
veterán
válasz
alapz@j #5496 üzenetére
Jó kérdés. Ha egyszer elkúrja, beszopja.
Első éves voltam BME-n, villanyosménök jánykával jártam, hát megírtam a C prog háziját (nyugi, már elévült!). Volt egy binary file hozzá, amiben volt tesztadat, megnyitottam szögevesen. Persze volt benne 0 byte. 2 óra debuggolás után jöttem rá, hogy hülye vagyok, de megtanultam a leckét egy életre!
-
buherton
őstag
válasz
alapz@j #5235 üzenetére
Helyes. Azt hittem, hogy már senki nem foglalkozik ezzel
. Ennek a megoldásnak az a lényege, hogy olyan függvényt használjunk, aminek van valamilyen visszatérési értéke (printf-el is lehetett volna), és hogy egy ciklus vagy elágazás kiértekélésekor hi'vjuk meg ezt a bizonyos függvényt.
Másik? [link] (cask vessző helyett pontos vesszővel, és lefordi'tani nem illik)
-
DrojDtroll
veterán
válasz
alapz@j #5043 üzenetére
kipróbáltam:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
ch=getchar();
printf("\n%c", ch);
ch=_getch();
printf("\n%c", ch);
ch=getch();
printf("\n%c", ch);
return 0;
}A getch() és a _getch() ugyan azt csinálta, beolvasta a karakter az Enter lenyomása nélkül, amíg a getchar() csak az Enter lenyomásával.
-
axioma
veterán
válasz
alapz@j #5028 üzenetére
Hat, amint nem magadnak hanem csapatban es/vagy kesobb atadassal dolgozol, ezek a szep megoldasok adjak a karbantarthatatlansagot. Persze jo neked, ha ezzel akarsz kikerulhetetlen lenni a cegnel, de me'g akkor is, mielott azza valnal, velhetoleg egy projvez eszreveszi.
[Az meg hogy lenne mar logikus matematikailag, hogy az 1 a paros jele, 2 a paratlane???]
Persze nem arrol van szo, hogy ezt a ket sort nem kutya kotelessege barmely programozonak megfejteni tudni, hanem arrol, hogy ezt a stilust ha kicsit is nagyobb meretben is megtartod, akkor jon az hogy jol mukodik de egy rossz kod. Es most arrol nem is beszeltunk, hogy beszedesebb konstansoknal kisebb az osszekeveresi lehetoseg (ha meg hiba soran - pl. atkuldod masik gepre - modosulhat is, akkor nem art ne'mi Hamming-tavolsag, nalunk a C-sek kod.szab.-aban benne van hogy minden konstansra azt is alkalmazni kell).
Java-ban meg irtam en mar prog.verseny feladatokat is, egy darab main-nel, nem csak objektum-hegyek eseten alkalmazhato[jo hat nem volt idealis valasztas, de abban voltam a leggyakorlottabb, es kezrealloan telepitett kornyezet is ahhoz volt].
-
axioma
veterán
válasz
alapz@j #5026 üzenetére
Nem is a ternary a problemas nekem (bar egyes kodolasi szabvanyok tiltjak), hanem az hogy kihasznalod az osszefuggest. Ha ezt irtad volna tomoritesnek:
return a == 0 ? 0 :
a%2==0 ? 1 : 2;
akkor nem szoltam volna, mert tomor, pont ugyanaz mint az if-ek, es barmikor az egeszek kicserelhetoek. Persze meg jobb lenne kulon definialni a konstansokat, es utana
return a == 0 ? RESULT_0 :
a%2==0 ? RESULT_EVEN : RESULT_ODD; -
axioma
veterán
-
-
BTminishop
aktív tag
válasz
alapz@j #4955 üzenetére
Igen,le is tudtam futtatni és működött csak én igazából arra vagyok kíváncsi,hogy amit megírtam programot azt összetudom "kovácsolni" egy ablakkal (nehéz elmondani mire gondolok
) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne!
Az előző hozzászólónak köszönöm a segítséget mindenféleképpen utána nézekpl.
#include <stdio.h>
void main ()
{
printf("Hello World!\n");
}
Most leirtam a világ legegyszerűbb programját,és igazából azzal nem vagyok én kibékülve,hogy ha ablakot akarok neki késziteni akkor ezt a programot másképp kell leírnom,más szintaxis szerint vagy ezt valahogy belehet helyezni?! -
#68216320
törölt tag
-
buherton
őstag
válasz
alapz@j #4807 üzenetére
Header-guardnak hívják. Az ok, amiért létezik azaz, hogy egy forrásból akaratlanul is többször hívódhat ugyanaz a header fájl*, ekkor minden, ami az adott header fájl tartalmaz az többször fog szerepelni. Ennek a fordítók nem igazán szoktak örülni.
* például: source.c-nek szüksége van foo.h-ra és bar.h-ra, igen ám de a bar.h-nak is szüksége van a foo.h-ra
-
axioma
veterán
válasz
alapz@j #4807 üzenetére
Konyhanyelven:
Hogy csak akkor legyen berakva, ha eddig nem volt. Mert hiaba ugyanaz, ha ketszer megjelenik pl. egy fg-fejlec, az nem derul ki ezen a szinten, hogy nem utkozest (kulonbozo megvalositast) jelent...
Effektive egy sajat "nemtobbszorozo" technika az, hogy minden egyes include-nal az adott file-hoz rendelt nevet define-oljak, illetve ha mashol meg az a define mar letezik, akkor elhiszik, hogy az include is megtortent. Termeszetesen ez csak akkor mukodik, ha szisztematikusan jol csinalod az egesz projekten vegig. -
buherton
őstag
válasz
alapz@j #4796 üzenetére
Fordító speicifikus parancs/címke.
Például az avr-gcc-ben hogyha te egy karakter tömböt a flash-be akarsz letenni, akkor nem elég csak a const-t elérni, hanem külön meg kell mondani a fordítónak, hogy tegye oda (PROGMEM-et kell használni). De hogy a példánál maradjunk mostanában egy STM8-ra fejlesztek (a fordtó nevére nem emlékszem), ahol @-al kezdődő szavak fordító specifikus direktívák. Például, ha azt mondom a függvényre, hogy @near, akkor a lehető legközelebb fogja rakni a hívás helyéhez.
-
dabadab
titán
válasz
alapz@j #4750 üzenetére
Az a pont, ahol egy kifejezes teljesen ki van ertekelve, a Wikipediaban van konkret lista illetve a C FAQ-ban egy reszletesebb magyarazat.
-
Karma
félisten
válasz
alapz@j #4708 üzenetére
Szerintem az lenne a pláne, ha lenne const char *-os konstruktor (ez heapre másol) és egy char *-os ami átveszi a tulajdonjogot a stringről, és döntse el a kóder hogy melyik releváns.
De egyébként mi az C-ben, hogy konstruktor?
Ha tényleg C-ről van szó, akkor semmi se gátol meg abban, hogy a függvények neve is tükrözze hogy mit csinál a pointerrel.
-
buherton
őstag
válasz
alapz@j #4706 üzenetére
Miről van szó amúgy? ARM-nál szintek vannak meghatározva, ahol a supervisor mindent megtehet, de ha egy user szintű akar oda írni, ahova nem lenne szabad, akkor ezt hard fault expection-nel köszöni meg a proci. Azaz itt az architektúra tartatja be a szabályokat. Továbbá az MPU-nak meg lehet mondani, hogy ki hova írhat, de az megint egy másik tészta.
Nem mellesleg a C standard nem beszél ilyenről, így ilyen nincs. Az, hogy az OS vagy az architektúra támogatja-e az már a C-n kívül álló dolog.
-
dabadab
titán
-
don_peter
senior tag
válasz
alapz@j #4623 üzenetére
Köszi, de mikrokontrollerbe használom így azt hiszem vagy is azt gondolom, hogy nem működne ez ebben a formában.
Főként talán azért mert nem emlékszem, hogy a C18-as könyvtárban lenne ilyen "intrin.h" állomány.Egyébként ha működne miért lenne ez jobb mint az előző?
A tömbökben amiket törlök memset()-el rövid életűek és csak az interfészen bevitt karaktereket tárolják majd ha végeztem a 14 adat bekérésével kimentem memóriába a tömb adatait és utána rögtön törlöm is.Tényleg ha már itt tartok:
Hogy tudom ellenőrizni a tömb tartalmát hogy abban karaktert vagy számot írtam?
Mutatok egy példát:unsigned char teszt[4] = {'1','2','3','\0'};
//ellenőrzés pedig
if(atoi(teszt)>0 & atoi(teszt)<255){
printf("Csak szám\n");
}else{
printf("Nem csak szám\n");
}
//Másik változat
unsigned char teszt[4] = {'1','1','A','\0'};
//ellenőrzés pedig
if(atoi(teszt)>0 & atoi(teszt)<255){
printf("Csak szám\n");
}else{
printf("Nem csak szám\n");
}Eredménye:
1. Csak szám - ez helyesen értékelődik ki
2. Csak szám - ez hibásan értékelődik ki mivel tartalmaz egy betűt isTegnap próbálkoztam vele és pl: ha betűvel kezdődik a tömb akkor helyesen értékelődik ki, de ha az elején szám van és a végére betűt írok akkor hibás a kiértékelődés.
Hogyan tudom megvizsgálni a tömböt, hogy abban csak számok van?
Köszi előre is..ui: tömb bejárásnál eszembe jutott, hogy talán elemnkénti vizsgálattal pl:
if(tomb[i] != 'A - Z' & tomb[i] != 'a - z') //helyes
Vagy valami ilyesmi...
-
don_peter
senior tag
válasz
alapz@j #4557 üzenetére
Ez ebben a formában még magas nekem, de azért köszi a szándékot.
A mutatókat már ismerem, de csak felületesen.
Átvariáltam a dolgot mivel a fentebbi kódomnál csak a char típus jöhetett szóba és így pazaroltam a bájtokat illetve a megfelelő típusmódosítások is igényeltek további sorokat.
Az új verzában már külön szedtem a char és int típusokat és így már szebben lehet e memóriába beírni és kiolvasni.
Nem kellenek az elválasztó karakterek sem.
Ahogy tanulom és gyakorlom a dolgot úgy értem meg egyre jobban a működéseket. -
don_peter
senior tag
válasz
alapz@j #4443 üzenetére
Srácok ez ugyan nem életbe vágó, de nekem még is érdekes lehet.
Van egy kódom ez ügye azt csinálja, hogy amit beviszel pozitív egész számokat azokat megfórdítva írja egymás mellé.
Ime:int number, right_digit;
printf("Adj meg egy számsort: ");
scanf("%i", &number);
while(number != 0) {
right_digit = number % 10;
printf("%i, ",right_digit);
number = number / 10;
}
printf("\n");2 dolog érdekel: (most kezdtem el a dolgot szóval nem vagyok még jártas a témában)
1. hogyan tudom azt megcsinálni a legegyszerűbben, hogy a számokat ugyan abban a sorrendben írja ki egyesével ahogyan azt én megadom.2. ezt teljesen külön: hogyan tudnám a szétszedett láncot újra egyesíteni úgy hogy azt egy egésznek vegye a rendszer? (pl.: 1 2 3 = 123)
Köszi előre is a segítséget. -
dabadab
titán
válasz
alapz@j #4423 üzenetére
Amit nem ertek, az az, hogy hogy a csudaba lesz a java gyorsabb. Megneztem magamnal is, a konkret loop, amit mer, arra ezt a kodot generalja a gcc:
.L14:
movsd 0(%rbp,%rdx), %xmm1
ucomisd %xmm2, %xmm1
jbe .L11
addsd %xmm1, %xmm0
.L11:
addq $8, %rdx
cmpq $800000000, %rdx
jne .L14Hogy ennel mi lehet gyorsabb, arrol fogalmam sincs, marpedig a java (legalabbis a rendezetlen tombnel) tenyleg gyorsabb egy jo 7-8%-kal.
-
buherton
őstag
válasz
alapz@j #4412 üzenetére
Nem szabvány szerinti függvény.Nálunk a C99 használatos.(#4413) alapz@j: A .NET alatt szinte mindeki a C#-ra gondol függetlenül attól, hogy nem csak abban lehet programozni.
(#4414) alapz@j: A C++ ahogy mondtad platform független, az hogy te mennyi függőséget viszel bele az már a te dolgod. Nem mellesleg a platform függetlenség alatt nem csak az OS-ek közötti átjárásra gondoltam hanem architektúra és rendszer váltásra is.
A Java pedig sajnos erőforrás igényes. Nézz meg egy Vuze-t (amióta átírták Java-ra azóta megy a panaszkodás, hogy nagy megterheli a gépet) vagy ott a Minecraft. Amilyen egyszerű a grafikája olyannyira erőforrás zabáló. A LibreOffice-ban sem véletlenül írják át folyamatosan a Java kódot C++-ra.
-
bucsupeti
senior tag
válasz
alapz@j #4298 üzenetére
igazad van. én sem kezdeném így. Azt viszont elmondanám hogy van a processzor, meg a memória stb. Aztán van egy olyan hogy oprendszer, ami müködteti az egészet. a programok hogyan hová töltődnek és hogy indulnak el stb... Ez nélkül nehéz elképzelni hogy valaki jó programozó lesz...
-
bucsupeti
senior tag
válasz
alapz@j #4296 üzenetére
Én azt vettem észre hogy akik programozást kezdenek tanulni azok közül sokan nem tudják hogy mi is az a program, hogyan készül, mi van az egész programozás mögött. Annyit látnak hogy begépelik a programsorokat, jó esetben tudják a programnyelv elemeit használni és azt tudatosan teszik, de sajnos azzal hogy a forráskód megírása után mi is történik, miért szükséges fordítani (vagy egy virtuális gépnek átadni, esetleg egy interpreterrel feldolgoztatni) arról nincs fogalmuk.
Egy képletes példa: A király elhatározza hogy palotát épít, olyat amilyet még nem látott a világ. Az utazók kíváncsian fogják felkeresni a várost, hogy csodájára járjanak majd ennek a nem mindennapi építmények. A kőfejtőben, ahol a palotához hasítják a kőtömböket, megkérdeznek két munkást hogy mit gondolnak, mit csinálnak itt egész nap.
Az első azt mondja: Egész nap izzadok, fejtem a követ itt a koszos, poros bányában. Nem tudom meddig bírom, már nagyon unom az egészet, lehet hogy más munka után nézek.
A második ezt mondja: Én palotát építek!A tanmesének vége. A lényeg hogy ha tudja az ember hogy mit csinál, sokkal nagyobb kedvvel, elhivatottsággal, lelkesedéssel, izgalommal telve végzi a munkáját.
Így van ez a programozással is. Kell hogy a programozó tisztában legyen a háttérben zajló dolgokkal, mert sokkal izgalmasabb lesz az egész programozás ettől! Akkor is ha interpretert használ, akkor is ha köztes bájtkódot és akkor is ha gépikódra fordított programot készít. -
Jester01
veterán
válasz
alapz@j #4207 üzenetére
A kapcsos zárójel elhelyezése ízlés dolga, de az egy soros dolgok köré is erősen ajánlott kitenni őket, mivel ahogy arra dababab már rámutatott, később könnyen hibához vezethet.
-
Jester01
veterán
válasz
alapz@j #4165 üzenetére
Ahogy a kollega írta, logikailag megsemmisül és a szabvány csak ennyit ír elő.
Az már fordítófüggő, hogy ez hogyan néz ki gépi kód szinten, de rendesen optimalizáló fordító nyilván előre lefoglalja a területet és újrahasznosítja. Mellesleg a stack kezelésnek igen minimális az overheadje hiszen csak egy-egy pointer művelet.Ha érdekel a végeredmény hogy néz ki akkor kérj assembly listát a fordítódtól vagy használd ezt a remek weboldalt.
-
Rickazoid
addikt
válasz
alapz@j #2869 üzenetére
Csatlakozom, szerintem sincs semmi gond vele. Mondom ezt kezdőként. Aki tanulja a C programozási nyelvet, igazából egy szövegszerkesztővel és egy GCC-vel is boldogulnia kéne. Én nemrég kezdtem újra tanulni C-t, sikeresen elfelejtettem mindent és a Code::Blocks-ra esett a választásom (megpróbáltam az Eclipse és a Netbeans monstrumokat is, de azok már végképp nem alkalmasak egy kezdő számára). Eddig minden programot meg tudtam írni vele, bár voltak gondjaim, de azok nem az IDE miatt. Aki tanulja a nyelvet, az IDE-től függetlenül kell hogy megtanulja. De az egyetemen például Blodshed Dev-C++-t használunk (mert nehogy már platformfüggetlen vagy bárki által támogatott, befejezett, stabil legyen az IDE)... na az tényleg katasztrófa. Rosszak az automatikus behúzások, vacakolni kell, hogy lehessen pontosvesszőt tenni (meg sem találja az ember, hogy mi a baj, ha nem mondják meg neki), nincs automatikus kiegészítés, nincs színezés... pedig elvileg IDE... lényegében csak egy túlbonyolított szövegszerkesztő egy beépített fordítóval. A gedit+GCC alkalmasabb a feladatra. A Code::Blocks meg szimplán első telepítésre működik, ahogy kell, konfigurálás nélkül. Nekem legalábbis nem kellett semmit beállítanom, csak telepíteni. Persze lehet majd bonyolultabb projekteknél kelleni fog egyfajta konfigurálás, de amire az ember eljut odáig, hogy összetett projektet hozzon létre, amihez a C jóval mélyebb ismerete szükséges, az IDE beállítása lesz a legkisebb problémája.
Szerintem.
Ú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!
- Milyen egeret válasszak?
- EAFC 25
- Gaming notebook topik
- Megszellőztette az új EPYC generációt az AMD
- Kicsomagolták a Vivo X Fold 5-öt (videó és fotók)
- Asztalos klub
- Víz- gáz- és fűtésszerelés
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Szerkesztett és makrofotók mobillal
- Azonnali notebookos kérdések órája
- További aktív témák...
- ÁRGARANCIA! Épített KomPhone Ryzen 5 5500 16/32/64GB RAM RTX 4060 8GB GAMER PC termékbeszámítással
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
- Csere-Beszámítás! Asus Tuf Gamer laptop! R5 3550H / GTX 1650 / 8GB DDR4 / 500GB SSD
- HATALMAS AKCIÓK! GARANCIA, SZÁMLA - Windows 10 11, Office 2016 2019 2021,2024, vírusírtók, VPN
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest