- ASUS routerek
- A pápa egyre jobban tart a romlott AI veszélyeitől
- DIGI internet
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Mesterséges intelligencia topik
- Windows 11
- Tarr Kft. kábeltv, internet, telefon
- Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Milyen program, ami...?
Új hozzászólás Aktív témák
-
asuspc96
senior tag
Jó fátylat rá...majd ha szilveszterkor összefutunk (nem tudom hogyan) elhívlak sörözni
Most dobtam be neki egy hatalmas számot valami 999999999191919191919-et (hasra ütésszerűen)
Szegény azóta is számol.....ha jol latom, ez Delphi? megírhatom(juk) másban is (pl. C++) csak működjön very very big számokra is.
"lehet 'javitani' rajta: az in helyett long-ot kell hasznalni. sot, unsigned long long-ot, ez a szabvany szerint legalabb 2^64-1-ig tud szamot abrazolni, a te gepeden/forditoddal ervenyes maximum a ULLONG_MAX konstansban van"
Mennyi az elvi max ameddig számot tudna ábrázolni ?
Üdv, asuspc96
-
doc
nagyúr
válasz asuspc96 #1251 üzenetére
sor johet
igen, a szamitasi igeny exponencialisan no a szam meretevel, nem veletlenul ez az alapja komoly titkositasi eljarasoknak
a szamambrazolas meg eleg erdekes kerdes, altalanos programnyelvekben vagy ott van a limit (elvi maximum nincs, de gyakorlati az nyilvan igen), vagy ha barmekkora szammal kepes dolgozni (mint pl. Perl-ben a BigNum es tarsai) akkor baromi lassu
-
asuspc96
senior tag
rendben leadom a rendelést a picérlánynak
"barmekkora szammal kepes dolgozni (mint pl. Perl-ben a BigNum es tarsai) akkor baromi lassu"
Fel lehet gyorsítani ? említettél erre valamit...
HTML-ből (JavaScript) átírni C++-ba lehetséges ? Egyáltalán a megírt program mivel használható ?
-
doc
nagyúr
válasz asuspc96 #1253 üzenetére
persze, mindent lehet gyorsitani
a primszamkereses meg foleg olyan dolog, amit okosan vegiggondolva rengeteg prociidot lehet sporolni, van erre tobb modszer az agyatlan 'vegigmegyek es megnezem oszthato-e' megoldason kivul, kezdve az egyszeru Eratoszthenesz szitajatol a mindenfele trukkozesekiglehet sajat megoldast irni a szamabrazolasra is, de valoszinuleg nem lesz gyorsabb mint a masok altal mar megirt megvalositas
mindenesetre egy 64 bites uint maximuma 18446744073709551615 , ekkora szam gyors primbontasahoz mar ugyis tul kicsi lesz az otthoni PC, szoval nem az abrazolt szam merete a szuk keresztmetszet
-
válasz asuspc96 #1253 üzenetére
két tipp:
egyik: ha tényleg nagy számok kellenek, akkor lehet definiálni saját számábrázolási módszert, pl több long long összefűzésével. az elv hasonló, mint amikor az ember összeköt két 4bites összeadót carry bittel... csak kicsit bonyolultabb, de kb ez a lényeg. memóriaigény elszállhat.
másik: a naiv, végigpróbálom gyökXig és ha nem osztja semmi, akkor megyek következőre megoldás minden Xre gyökXet lép, tehát X*gyökX a futásideje. másképp exponenciális. gyorsabb prímtesztelési módszer van, pl a Katona/Recski/Szabó féle Számítástudomány alapjai ír gyorsabbat. bme info/elte mat ismerősnek biztos meglesz a könyv. eléggé elméletre fókuszál, de a lényeg benne van: polinomidőben prímtesztelés megy, ugyanakkor felbontást az ember nem kap.
namost, a másik probléma, hogy C++ban a szálkezelés fél éve jött be, itt meg lehet lehetne vele nyerni (prímkeresni több szálon nem próbáltam még, szóval nem biztos). ha csak egy szálon megy, akkor marad a kb 14%os max terhelés a procidon.
Don't dream it, be it. // Lagom amount.
-
doc
nagyúr
-
asuspc96
senior tag
Igazából még nem tervezek vele semmit... Jó lenne csinálni belőle egy ingyenes kis progit. (még tervezek bele egy két érdekes dolgot abból se szeretnék kihagyni benneteket)
Érdekel a matematikája ezt eltaláltad !
Hogyan lehet ezzel hozzájárulni valamilyen feltöréshez ?"pl a Katona/Recski/Szabó féle Számítástudomány alapjai ír gyorsabbat. bme info/elte mat ismerősnek biztos meglesz a könyv. eléggé elméletre fókuszál, de a lényeg benne van: polinomidőben prímtesztelés megy, ugyanakkor felbontást az ember nem kap."
Megkérdezhetem, hogy ennek a könyvnek mi a címe ?Üdv, asuspc96
-
amiklos
csendes tag
Sziasztok!
Úgy látom itt hozzáértő emberek vannak. Mérnők Info-ra járok. Most kezdtem és eddig nem foglalkoztam a programozás témakörrel és sajnos levelezőn tudom csak, mert mellette dolgoznom kell. Tudtok-e valami jó tanácsot, könyvet, vagy valami ötletet adni, hogy hogyan tudnám megtanulni úgy 1. A programozást, 2. A C nyelvet, hogy azt értsem is és használni is tudjam. Mivel érdekelni érdekel a dolog. Csak nem tudom honnan elkezdeni... Eddig odáig jutottam el, hogy adatot be tudok kérni, kiíratni és az egyszerű matematikai műveleteket vele. Segítségeteket előre is köszönöm!!!
Üdvözlettel: Mikey
[ Szerkesztve ]
-
Peppy89
csendes tag
Üdv mindenkinek!
Egy olyan kérdésem lenne, hogy miként tudom azt megoldani, hogy egy bizonyos oldalt többször megnyisson a program az alapértelmezett böngészőben, lehetőleg háttérben dolgozva úgy, hogy az oldalt ne a chache-ből tőltse le, hanem mindig a szerverről töltse le az oldalt.
Itt van az eddig készített forráskód:
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>using std::cout;
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}int main()
{
int z = 1;
int y = 0;
cout << "Hanyszor nyissam meg?" << std::endl;
y; std::cin >> y;
for(int x = 0; x < y; ++x){
std::cout << " " << z << std::endl;
z=z+1;
ShellExecute(NULL, "open", "http://www.logout.hu",
NULL, NULL, SW_SHOWNORMAL);
Sleep(100);wait(1);
}
system("PAUSE");
}Persze ez már mást is tartalmaz, de aki ért hozzá tudja mit nézzen
A segítséget előre is köszönöm.
Üdv: P
-
igen, arra.
asuspc96: wikipedia cikkeket érdemes elolvasni, a foglalkozó magyar oldalak jórésze elte/bme jegyzetekkel elég nagy hasonlóságot mutat (említett könyvet mindkét intézményben használják). a gyakorlatban pedig néha a wikis oldalak néha lényegesen érthetőbbek, mint maguk a jegyzetek.
angol wikis oldalakat szintén érdemes átnézni, általában relevánsak és használhatóak, implementációt is találni.
nevezett könyv egyébként eléggé száraz és inkább elméletre megy rá, cserébe meg lehet belőle érteni és eléggé tömören fogalmaz.
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
Jhonny06
veterán
Amikor ilyen apró pepecselős módosításokat kell végezni egy programon és fél percenként futtatni kell, hogy jó-e az eredmény, akkor ti mindig újrabuildelitek és debuggal futtatjátok? Én build és debug nélkül szoktam, de most észrevettem, hogy mintha nem mindig jegyezné meg a módosításokat, hanem az előző állapottal futtatja, én meg csodálkozok, hogy miért hibás még mindig, miután a 10. átnézésre is mindent rendben találtam.
-
válasz Jhonny06 #1266 üzenetére
elvileg fel kéne ajánlania a compilernek, hogy ha lát változást, akkor újra kell építenie.
ez az elmélet. a gyakorlat az, hogy unix környezetben (minix 3.1) már láttam olyat, hogy órákat szívtunk, mire észrevettük, hogy a C compiler nem lát egy változtatást és ezért még mindig a két órával előtti kernellel szívunk.
rebuild kell, ha azt nem csinálod, akkor nem fog fordítani. esetleg ha nagyon nem megy, akkor lehet rá nyomni egy clear+rebuildet, de azzal projekt méretének függvényében nagyon óvatosnak kell lenni.
én debug módban szoktam (jelenlegi beadásnál csináltam automatizált tesztet assert is, azt meg release módban elvileg nem is futtatja), rebuildelni meg akkor, ha outdatednek írja. ill néha clear+rebuild, ha valami nagyon nem stimmel.
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
WonderCSabo
félisten
válasz Jhonny06 #1266 üzenetére
Én Code::Blocks-ot használok. Ha a Run-ra kattintok, nem érdekli volt-e változás, az utolsó fordított binárist futtatja (már ha van, ha még nincs, akkor fordíttat veled). Ezért mindig Build and Run parancsot adok ki. Persze ez a Build parancs csak a megváltozott fordítási egységeket fordítja újra, és linkeli a programot. A teljes újrafordítás a Rebuild. Olyan még nem fordult elő, hogy a Build nem vette észre, hogy volt változás.
Más:
Ha meg kell akadályoznom a programom automatikus bezárását, mindig cin.get()-et, vagy getchar()-t használok. Legalábbis Windowson. Most valgrind miatt Linuxon forgattam, és meglepően tapasztaltam, hogy legújabb GCC-vel Ubuntuval az előbbi hívásokat simán ignorálja és terminál a program. Tapasztalt ilyet vki? Ha igen, milyen alternatívák vannak, amik Linuxon is műxenek?
-
válasz WonderCSabo #1268 üzenetére
hm, CPTből futtatás megoldható/nem túl macera?
Don't dream it, be it. // Lagom amount.
-
válasz WonderCSabo #1270 üzenetére
cpt: command prompt, másképp parancssor.
elsőre kicsit minimál (bár a négy párhuzamos parancssor+csomó segítség miatt meglepően gyors), de pl puttyolva egész használható (úgy már lehet másolni is róla).
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
amargo
addikt
válasz WonderCSabo #1274 üzenetére
Nem kell izgulni, embert nem ismertem eddig, aki így használja, bár szerintem CPT - Command Post Terminal.
A cmd-t szerintem mindenki megérti vagy terminál.“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
Jhonny06
veterán
Sziasztok!
Ha az osztálydeklaráción belül nem tudok definiálni egy változót, akkor hogy tudom megoldani azt, hogy egy bizonyos értéktől kell indulnia (mondjuk 100) egy egész típusú változónak? Mert oké, hogy rakok a konstruktorba egy szam++-ot, de az 0-tól fog számolni, amikor létrehozok egy példányt. C#-ba simán meg lehetett adni neki a 100-as kezdőértéket. Köszönöm.
[ Szerkesztve ]
-
doc
nagyúr
válasz Jhonny06 #1277 üzenetére
nem egeszen ertem a kerdest...
kezdoerteket meg tudsz adni neki siman, ha erre gondoltal
pl. osztaly.h:
class osztaly
{
int x;
};osztaly.cpp:
#include "osztaly.h"
int osztaly::x = 100;illetve ha arra gondoltal, hogy egy kozos valtozot az osztaly osszes peldanyanak, akkor a deklaracional ele kell irni egy static modositot
[ Szerkesztve ]
-
Jhonny06
veterán
Egy változó kell, ami minden példány létrehozásakor növekedik 1-el, ami oké, mert beleírom a konstruktorba, csak a legkisebb érték 100 lehet, azaz mondjuk 99-től indul. Az értem, amit írtál, de hova írjam a kezdőértéket? Az osztálydeklarációba nyilván nem lehet, a konstruktorba meg azért nem jó, mert minden példány létrehozásánál a kezdőértéket fogja megkapni.
-
válasz Jhonny06 #1277 üzenetére
szerk, módosítás utánra: konstruktor megkaphajta pluszban inputnak a számot. azt viszont valamilyen módon követned kell, hogy hány darab cucc lett már létrehozva (létrehozó osztályba esetleg egy variáns amit megkap a konstruktor?), nem lenne egyszerűbb azt a változót használni létrehozni az új objektumokat?
ha pedig az aktuális számuk az objektumoknak is fontos, akkor a destruktorban még mindig meg lehet rakni egy hívást a container class felé.
ha meg akarod az objektumokat számozni, és mindegyiknek akarsz egy sorszámot, akkor legegyszerűbb és leggyorsabb megoldás még mindig egy container class szerintem egy globális változóval. ha törölni is akarod őket akkor a dolog bonyolultabbá válik, főleg ha a korábban foglalt de már szabad számokat is újból ki akarod tudni adni.
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
Jhonny06
veterán
Na, még egy (bocs, utálok kérdezni, de sehol nem találok rá megoldást). Objektumtömb létrehozása privát adattagként(Osztalynev tomb[]) megvan, ezután konstruktorban random mérettel kéne feltölteni. Ilyen C#-osan próbáltam, hogy random értéktől függően for ciklus, majd tomb[i] = new Osztalynev();. Random érték nélkül, simán main()-ben létrehozva, azonnali méretadással nem nagy kaland, így viszont nem megy.
Szerk.: Mutatóval megy:
Hallgato *tomb[]
[ Szerkesztve ]
-
doc
nagyúr
válasz Jhonny06 #1283 üzenetére
a tomb merete az, amit veletlenszerunek szeretnel? tehat csak a konstruktorban dol el, hogy hany eleme lesz a tombnek? mert akkor ne tombot hasznalj, hanem az STL-es adatstrukturakat, pl. vectort, annak a merete dinamikusan valtoztathato
a sima C-s tomb meretet meg kell adnod, nincs mese. illetve ugy meg megoldhato, hogy a konstruktorban lefoglalod a tomb meretenek megfelelo tarteruletet mondjuk igy:
tomb = malloc(sizeof(Osztalynev*) * meret)
amit aztan a destruktorbol free-vel felszabaditasz
de ilyet ugyebar nem csinalunk, C++ -ban C++-szul beszelunk, tehat vector, esetleg listMOD: akkor ugy tunik, megintcsak nem ertettelek
tehat te Osztalynev tomb[10] modon deklaraltad?
mert akkor a new Osztalynev() tenyleg nem fog belemenni, tekintve hogy az egy pointer, de meg a teljes osztalyt tartalmazo tombot csinaltal (ez utobbit NE!)[ Szerkesztve ]
-
Jhonny06
veterán
(Ilyenkor jövök rá, hogy mennyire nem tudok semmit.)
Szóval, most megpróbálom vectorral:
Osztálydeklarációnál, privát adattagként:
vector<Adatbazis> lista;
Ennek kéne elérő és módosító függvény, mert privát. Ez viszont nem megy, simán a "lista"-t nem engedi visszaadni.Mégis sikerült.A konstruktorban pedig lista.resize(random)-oltam, ez oké. És ezzel meg is van, vagy még for ciklusban inicializálni kéne, mint C#-ban a new taggal, minden egyes indexű elemet, vagy ez így ennyi? Ezt a részét nem értem C#-ban sem, hogy miért kell. Mármint a memóriafoglalásnak ezen része. Ezt csak akkor kell, ha deklarációnál nem adom meg rögtön a méretét, mert itt dől el, hogy mégis mekkora méretű lesz, nem? Így már van értelme. Bár gondolom vector-nál ezt nem kell, mert dinamikusan kezeli a memóriafoglalást.
(Ti is ennyit kérdeztetek kezdőként? Nyugtasson már meg valaki.)
[ Szerkesztve ]
-
doc
nagyúr
válasz Jhonny06 #1285 üzenetére
na azert ugy latom vannak itt eleg alapveto hianyossagok
szoval
az adatszerkezet (akar tomb, akar vector, akar valami mas) puszta adatszerkezet, ha ugy tetszik, egy darab a memoriaban, ami pont akkora meretu, amiben elfer az altalad megjelolt szamu es tipusu adat (osztaly, valtozo, stb)
ha te deklaralsz egy tombot pl. int tomb[10] akkor a memoriaban egy akkora darabot, amiben 10 int tipusu ertek elfer, lefoglal a program. de arrol, hogy ott azon a memoriateruleten mi van, semmit nem tudsz (illetve annyit, hogy 'hasznalhatatlan szemet'). neked kell azzal az adattal feltoltened, amit utana ki akarsz majd olvasni belole
ebbol adodoan a vector<Adatbazis> lista valtozod annyit mond, hogy ez egy olyan vector, amiben Adatbazis tipusu objektumok vannak, semmi tobbet. nyilvan neked kell belepakolnod az abban tarolni kivant objektumokat, maga az adatszerkezet nem fogja helyetted kitalalni hogy mit akarsz belerakni...
raadasul teljes objektumpeldanyt (nalad Adatbazis) nem tarolunk sem tombben, sem mas adatszerkezetben, helyette az arra mutato pointert szokas (tehat vector<Adatbazis*> lista)
a feltoltesnel meg nyilvan neked kell minden elemet hozzaadnod, a pointer eseteben a new-val letrehozva
a vector eseteben a resize() csak annyit mond, hogy szerinted mi a maximalis darabszam, amit bele fogsz rakni, ennek megfeleloen optimalizal, ettol fuggetlenul akar kevesebb, akar tobb elem is lehet benne
tehat ha te akarsz egy vectort amiben 10 darab Adatbazis objektum van, akkor csinalsz egy ilyet:
for (int i=0; i<10; ++i)
lista [i]= new Adatbazis();es amikor mar nem kellenek, pl. a destruktorban meg is szunteted az ojjektumokat (ez nem C#, nincs garbage collector!)
for (int i=0; i<10; ++i)
delete lista[i];ez utobbi persze szebb egy olyan megoldassal, amiben nem tarolod elore az elemek darabszamat, hanem vegigmegy a teljes listan annak meretetol fuggetlenul es kitorli mindegyik elemet
kerdezni meg mindenki szokott az elejen, sot a kozepen is ezen ne aggodj, ha normalis hangnemben kerdezel (mint ahogy eddig is tetted) szivesen segitunk
MOD: ha a listat visszaado metodust csinalsz, figyelj arra hogy ne magat a listat, hanem arra mutato referenciat adj vissza, hogy ne kelljen feleslegesen egy csomo adatot a verembe pakolni/kivenni
tehat nem vector<Adatbazis*> addide() {return lista;} hanem const vector<Adatbazis*>& addide() const {return lista;}
a const ne zavarjon meg, nem feltetlenul muszaj, de erdemes raszokni a hasznalatara
[ Szerkesztve ]
-
Jhonny06
veterán
Ezzel a vektorral el lehet érni az objektumom adattagjait? Igazából két osztályom van, egy Hallgato meg egy Adatbazis, most az Adatbazis osztályon belül csináltam egy Hallgato objektumtömböt és ezen osztály elemeit szeretném egy Adatbazis példányon belül elérni, mármint a példánytömb segítségével. Tehát valahogy így:
Adatbazis peldany;
peldany.lista[0].erdemjegy; //ez már hibás[ Szerkesztve ]
-
válasz Jhonny06 #1288 üzenetére
jaja, használd a függvényeket listát manipulálni.
próbálj valami ilyet listázni
std::vector<Hallgato*>::iterator i = lista.begin();
for(; i !=lista.end(); i++){
Hallgato *hallgato = *i;
cout << lista->getAzonosito() << endl;
}(rem nem írtam el semmit)
esetleg ha tolsz egy
typedef std::vector<Hallgato*> Hallgatok;
sort, azzal későbbiekben egy csomó kódot megspórolhatsz. pl elég a
Hallgatok::iterator i
is.(azért néha örülök neki, hogy a 7.5kredites c++ programkomponenteknek lassan vége, köv negyedévben meg megint javazunk)
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
Jhonny06
veterán
-
válasz Jhonny06 #1293 üzenetére
tényleg írj segédfüggvényeket szvsz manipulálni a listát.
a c++ ugyan nem dobál mindenféle fura hibaüzeneteket ha az ember megsérti az encapsulationt (ellentétben pl a netbeanssel), ugyanakkor a segédfüggvények sokkal de sokkal egyszerűbbé tudják tenni az ember életét.
vector access element
vector.at(i)
vector referencevannak példák is, azokat másolva el tudsz valahova indulni. csak pl vector<int> helyett vector<Hallgato*> kell (lehetne Hallgato is, de az lassabb).
Don't dream it, be it. // Lagom amount.
-
Jhonny06
veterán
Egy átlagos vektort tudok kezelni, ami sima elemeket tartalmaz, azzal nem szokott gond lenni. Itt viszont már bekavarnak az osztályok is.
Szerintem itt valami más lesz a rossz, mert most kikommenteltem az elérő függvényeket és áttettem public-ba a listát próbaként és így sem éri el a Hallgato osztály elemeit.
pl:
peldany.lista[0].valami
Tehát egy Hallgato példányokból álló tömb kéne az Adatbazis osztályban.
proci985: Mondjuk az is érdekes lenne, ha még ezzel is küzdök.
[ Szerkesztve ]
-
WonderCSabo
félisten
-
doc
nagyúr
válasz WonderCSabo #1296 üzenetére
azert, mert a 4 byte-os pointerek helyett sok-sok byte meretu objektumokat kell ide-oda pakolaszni
pl. ha fv parameterkent vagy visszateresi ertekkent hasznalod a listat, akkor akar hatalmas mennyisegu adatot kell a verembe rakni/kivenni, ami eleve nagyon lassu muvelet
raadasul mikor a container (jelen esetben a vector) nekiall dolgozni az adatokon (pl. ha a meretnoveles miatt kenytelen az osszes elemet mashova rakni), akkor nem mindegy hogy siman atmasol egy negybyte-os pointert, vagy egy komplett osztalyt rakosgat (raadasul gyanitom, hogy olyankor az osztalyt megsemmisiti, es ugy peldanyt hoz letre a default copy construktorral, de ez csak tipp)
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- A Samsung hazánkban is piacra dob idén egy friss Micro LED tévét
- ASUS routerek
- Yettel topik
- A pápa egyre jobban tart a romlott AI veszélyeitől
- LEGO klub
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Milyen légtisztítót vegyek?
- World of Tanks - MMO
- Okos Otthon / Smart Home
- Milyen notebookot vegyek?
- További aktív témák...