Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- GoodSpeed: Kell e manapság egérpad vagy sem?
- sziku69: Szólánc.
- Meggyi001: Eldugott helyek Párizsban, amiket jó eséllyel még nem láttál... 2. rész.
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- bambano: Bambanő háza tája
- btz: Internet fejlesztés országosan!
Új hozzászólás Aktív témák
-
b.kov
senior tag
válasz
dangerzone
#4218
üzenetére
Szia,
Tudnám ajánlani ezt az oldalt: ExercismVannak fent egyszerűbb, illetve összetettebb feladatok is. Én csak a Swift-es dolgokat néztem, de nekem nagyon jól jött gyakorolni. Főleg, hogy a megoldásod után lehet nézni a community által megírtakat is, és tanulni belőlük.
-
b.kov
senior tag
válasz
gergoavideki
#4176
üzenetére
Szia!
Szerintem nyugodtan írhatod ide is a problémádat, több szem többet lát.
-
b.kov
senior tag
Hát akkor tényleg azt tudom mondani, hogy bekéred az első sorban az adatot, h melyik konstruktornak kell lefutnia, aztán az alapján annyit olvasol std::cin-nel, ahány paraméteres a kiválasztott konstruktor.
Igazából ha nem engednek STL konténereket (meg gondolom algoritmusokat sem), akkor talán ez a legegyszerűbb módszer.
szerk.: a scanf-es megoldás, meg vagdosás sokkal inkább favágómódszernek tűnik nekem

-
b.kov
senior tag
válasz
choco01
#4056
üzenetére
Ennek a pointernek a segítségével hozod létre az egyes kölcsönzőkhöz tartozó tömböket, amiknek az eleme "kolcsonzes" típusúak. Tehát ha pontosabbak akarunk lenni, akkor azt is lehet mondani, hogy a k pointered ennek a tömbnek a fejelemére mutat. A
k[i]pedig a fejelemtől i. távolságra lévő elemre.Ennek a pointernek pontosan azért kell privátnak lennie, mivel minden egyes "kolcsonzo" példány létrehozásával egy file-ból olvasod be a kölcsönzéseket. Ezek ugye statikus adatok, amiken később nem szeretnél vátloztatni. Tehát ne lehessen azt mondani, h pl. "mintaKolcsonzo" objektumon keresztül, a 3. kolcsonzés idejét megváltoztatod. Tehát:
kolcsonzo mintaKolcsonzo("inputFile_1");Ekkor beolvasod ugye a fájlból a statikus adatokat. Nem lenne jó, ha ezután tudnál ilyet csinálni:
mintaKolcsonzo.k[2]->datum = "Buddha szobor";Persze létezik igény fájlból beolvasott adatok utólagos módosítására (sőt), viszont ez akkor sem szép megoldás. Arra külön setter függvényeket szokás írni, csakúgy mint a mostani getter függvények.
Tehát az előző példában ha megengednénk a dátum módosítását, akkor így lenne mondjuk szép:
mintaKolcsonzo.modifyDate(2, "2018.02.03");
Ahol ez első paraméter a kölcsönzés száma, a második pedig az új kölcsönzési dátum. -
b.kov
senior tag
válasz
choco01
#4054
üzenetére
Ha van valami konkrét kérdésed, akkor írd nyugodtan, de egyébként jól látod szerintem a dolgokat.
Ha nincs öröklődés, akkor a protectedet felejtsd el egy kicsit, és csak a public-private részre koncentrálj.Nagyon egyszerűen tényleg csak annyi a dolog, hogy a privát adattagokhoz/függvényekhez kintről (az osztály példányain keresztül) nem lehet közvetlenül hozzáférni. Ez ugye az enkapszuláció lényege, előttem jól meg lett fogalmazva.

-
b.kov
senior tag
válasz
choco01
#4052
üzenetére
Nem rosszabb semmivel, azonban ekkor a stack-en jön létre az objektum, ahogy írták is korábban.

Amíg nem indokolt pointerek használata, addig egyébként is érdemes kerülni őket. Majd ha belemerülsz jobban a témába, és szembe jön veled a dinamikus kötés, referencia szerinti paraméterátadás, öröklődés, stb... akkor érdemes foglalkozni jobban a pointerekkel is. Addig tanulgatni teljesen jó ez a módszer is, ahogyan most csinálod.
-
b.kov
senior tag
válasz
m.zmrzlina
#4008
üzenetére
Ha ingyenes, és jó IDE-t szeretnél használni, akkor Windowson van Visual Studio, amiben tudsz C++ alkalmazásokat készíteni.
Én Linuxon/macOS-en semmi ingyeneset nem használok, inkább parancssor, vagy CLion, ami nem ingyenes.De egyébként kisebb programokhoz felesleges IDE-vel bajlódni szerintem, hacsak nem szeretnéd elsajátítani az adott fejlesztői környezet tulajdonságait.
-
b.kov
senior tag
válasz
m.zmrzlina
#4001
üzenetére
Esetleg próbáld meg ugyanezt a kódot parancssorból fordítani, -std=c++11 flaggel.
-
b.kov
senior tag
válasz
PandaMonium
#3989
üzenetére
Nálunk detto 50 sor, persze néha kivitelezhetetlen.

-
b.kov
senior tag
-
b.kov
senior tag
válasz
m.zmrzlina
#3971
üzenetére
Hát igen, azt mondják, hogy a programozás egyik legkihívóbb feladata a konzisztens nevek használata. Tehát egyébként sem szokás a, b, c neveket adni változónak, mert ha egy kicsit is összetettebb a program, akkor rengeteg idő elmehet azzal, hogy megértse más, te mire is gondoltál éppen akkor.

Egyébként igen, amit írtál az "teljesen jó", tehát lefordul, és működni is fog. Én személy szerint azért kerülöm, és kiírom a paraméterneveket is. Ez főleg akkor is hasznos, ha majd pl interfészeket írsz osztályokhoz, aztán szintén jön megint valaki, akinek sokkal egyszerűbb lesz megérteni egy-egy függvény működését, ha látja a paramétereit is annak.
-
b.kov
senior tag
válasz
m.zmrzlina
#3968
üzenetére
Szia!
Felesleges ilyenkor külön változókat létrehozni csak azért, hogy egyenlővé tedd a paraméterekkel, hiszen a paraméterek is ekkor lokális változók lesznek a függvényre nézve, melyek a függvény hívásakor lesznek megkonstruálva az adott paraméterek alapján.Tehát a fenti példádban az a, b és c akkor fog létrejönni, mikor meghívod a main-ben a fvAkarmi-t, és ekkor a megadott értékekkel fognak inicializálódni (2, 5, 10). Ezek után teljesen felesleges még 3 változót létrehozni, nem leszel előrébb semmivel.
A másik kérdésre pedig: a függvény deklarációjánál nem fontos neveket megadni, de definíciónál annál inkább, hogy tudj hivatkozni a paraméterekre. Lefordulni lefordul ha nem teszed meg, de én nem láttam még ilyet a gyakorlatban.

-
b.kov
senior tag
válasz
m.zmrzlina
#3939
üzenetére
Mondjuk szélsőséges esetben túlcsordul az int változó, és a legnagyobb felvett értéke után megnöveled -> felveszi a lehető legkisebb értéket (valami mínusz szám, attól függ, hány byte-on van ábrázolva). Ez ugye akkor probléma, ha pl. az arr.size() nagyobb, mint az int változó maximálisan felvehető értéke.
És konkrétan így nézne ki (egy általános esetben):
i = 0, i = 1, ... , i = 32767 , i = –32767 , ... , i = 32767 -> végtelen ciklus, ha pl az arr.size() nagyobb, mint 32767 . De mégegyszer említem, ez elég szélsőséges eset.Próbálj minél pontosabb típusokat használni, szebb, később olvashatóbb kódot fogsz így írni, illetve elkerülöd a warningokat (amiket pont az ilyen esetek miatt szeretünk).

Szerk.: igen, az előttem szólóhoz hozzákapcsolódva, size_t-vel jobban jársz.

-
b.kov
senior tag
válasz
daninet
#3925
üzenetére
Nem-nem, az std konténereknek pont ez a feladatuk, hogy helyettesítsék a régi tömböket.
Nagyobb a választék, feladatonként eltérően tudsz dönteni közülük, hogy melyik számodra éppen a legoptimálisabb.
Sok esetben nem kell a memória allokálásával, deallokálásával foglalkoznod.
Sok jó setter/getter műveleteik vannak, és működnek rájuk az std algoritmusok.Szóval ha van egy kis időd, nagyon érdemes rájuk szánni.

Érdemes esetleg itt kutakodni. -
b.kov
senior tag
válasz
daninet
#3923
üzenetére
Beolvasod az N-et, aztán indítasz egy ciklust, ami N-szer fog lefutni. A ciklusmagban pedig szépen belepakolod a vectorba a beolvasott értéket, hiszen az egy tároló, amivel a tömböt helyettesíted.
Nagyon egyszerűen:
#include <iostream>
#include <vector>
int main(int argc, char** argv)
{
int N; // jatekosok szama
std::cin >> N;
std::vector<std::string> names;
for(int i = 0; i < N; ++i)
{
// beolvasas
std::string tmpName;
std::cin >> tmpName;
// vektorba iras
names.push_back(tmpName);
}
return 0;
} -
b.kov
senior tag
válasz
m.zmrzlina
#3899
üzenetére
Esetleg használhatnál funktorokat, ebben az esetben ideálisak lehetnek.
Ha nem ismernéd, akkor kb ennyit csinál:
A functor is pretty much just a class which defines the operator(). That lets you create objects which "look like" a function:Lényegében csinálsz 2 struct-ot (Less, Greater), amiben túlterheled a () operatort. Ekkor a csere függvényed sablonargumentuma lehetne pl. Compare, az utolsó függvényargumentum pedig ilyen Compare típusú.
Ha bővebben érdekel a téma: C++ jegyzet, 71. oldal (Funktorok).
-
b.kov
senior tag
válasz
dobragab
#3896
üzenetére
Mentségemre szóljon, hogy igyekeztem valamiféle párhuzamot vonni az előző kódokkal, így van benne getline, és stringstream.
De természetesen igazad van, felesleges stringekbe olvasgatni.Másrészt, az olvashatóság szerintem teljesen szubjektív dolog, és megszokás kérdése.
Mobilról viszont elhiszem, hogy gyötrelem olvasni megfelelő indentálás nélkül, kódtól függetlenül.
-
b.kov
senior tag
válasz
#74220800
#3893
üzenetére
Üdv!
Nem egy kezdőszelet, de ha tanulod a nyelvet, előbb-utóbb úgyis el fogod hagyni a tömböket valószínűleg, és helyette stl konténereket, és algoritmusokat fogsz használni.Itt van egy gyors szösszenet C++11-es módszerrel a problémádra:
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <iterator>
#include <algorithm>
// Returns a matrix (N x M), storing read data from file
std::vector<std::vector<int32_t>> readData(std::string fileName)
{
// Open file
std::ifstream input;
try
{
input.open(fileName);
}catch(std::ios_base::failure& e)
{
std::cerr << e.what() << std::endl;
return std::vector<std::vector<int32_t>>();
}
std::string line; // For reading line by line
input >> line; // Reading N
std::vector<std::vector<int32_t>> result(std::stoi(line)); // Returnable vector
std::getline(input, line); // Reading M, but do not store
// Write from file to matrix
for(auto& matrixLine : result)
{
std::getline(input, line);
std::istringstream stringOfNumbers(line); // Split line into individual strings
// Perform a transform for storing string chunks as integers in line of matrix
std::transform(std::istream_iterator<std::string>(stringOfNumbers),
std::istream_iterator<std::string>(),
std::back_inserter(matrixLine),
[](const std::string& stringOfNumber)
{
return std::stoi(stringOfNumber);
});
}
return result;
}
int main(int argc, char** argv)
{
std::vector<std::vector<int32_t>> result = readData("input.txt");
// Writing the output into stdout
for(auto line : result)
{
for(auto elem : line)
{
std::cout << elem << ", ";
}
std::cout << std::endl;
}
return 0;
}Természetesen nem teszteltem teljes körűen, csak egyetlen bemenetre, de arra működött.

input.txt:
5 7
2 3 4 -4 3 1 0
-3 2 1023 3 -32 8 9
-2 1 0 22 3 4 93
5 3 8 2 -9 3 -9321
2 3 4 -4 3 1 0
Ú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!
- Milyen notebookot vegyek?
- 3D nyomtatás
- Kutyának sem kellenek a 8 GB-os VGA-k?
- Kerékpárosok, bringások ide!
- Milyen CPU léghűtést vegyek?
- Videó stream letöltése
- Google Pixel topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- NFL és amerikai futball topik - Spoiler veszély!
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- DELL Thunderbolt TB16 Dock (ELKELT)
- AKCIÓ! Asus ROG Flow Z13 +ROG XG RTX 3070- i9 12900H 16GB DDR5 1TB SSD RTX 3050Ti 4GB + RTX 3070 W11
- BESZÁMÍTÁS! Asus X370 R5 2600 8GB DDR4 250GB SSD 1TB HDD GTX 1650 4GB Zalman T7 Chieftec 400W
- ÁRGARANCIA! Épített KomPhone Ultra 7 265KF 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 13 256GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3425, 94% Akkumulátor
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest







