Hirdetés

2024. május 2., csütörtök

Gyorskeresés

Hozzászólások

(#751) Jester01 válasza emvy (#750) üzenetére


Jester01
veterán

Nem annak, abból van const overload. Hanem ahogy írtam is, a String::print metódust kell const-tá alakítani.

Jester

(#752) Sk8erPeter válasza papa019 (#747) üzenetére


Sk8erPeter
nagyúr

Legközelebb azért az ilyen hosszúakat légyszi a pastebin.com-ra, vagy a pastie.org-ra copy-paste-eld, ezeken az oldalakon szépen kiemeli a szintaktikát is (ha bejelölöd, hogy pl. C++ nyelvű forráskód), és így könnyebb áttekinteni, mint itt a PH-n. :K Ja, és ide csak dobd be a linket, amit kapsz a bemásolás után.

[ Szerkesztve ]

Sk8erPeter

(#753) papa019


papa019
senior tag

Oké, köszi.

[ Szerkesztve ]

(#754) papa019


papa019
senior tag

Sziasztok!

Van egy új problémám. :S

A feladat szövege:

Írjunk C++ programot a következő feladatra:

A Húsvéti Nyúl háromfajta ajándékot (Gift) oszt:
színes tojást (ColoredEgg),
csokitfigurát (ChocolateFigure),
cukrot (Candy).

Mindegyik különböző súlyú, az alapegység egy statikus változója az alaposztálynak (baseWeight=10).
A színes tojás súlya darabonként ennek konstansszorosa (eggFactor=9), míg a csoki esetében ez a tényező chocolateFactor=10.5, a cukornál candyFactor=13.2.

A Nyúlnak írt programunk egy tömbben tartja nyilván a kiosztott ajándékokat. Az egyes ajándékok darabszámot is tartalmaznak. A színes tojásnál saját paraméterként nyilvántartjuk még a színt (RED, GREEN, BLUE, VIOLET), a csokifiguránál az olvadáspontot (MeltingPoint), a cukorkánál a minőséget (HARD, SOFT). A célunk kiszámolni és kiírni az egyes ajándékok súlyát (getWeight()).

a) Implementáljuk az osztályokat és konstansokat az EasterBunny névtérben figyelve arra, hogy esetlegesen egyes konstansokat is tagként vagy statikus tagként érdemes implementálni. Ne legyen egy függvénytörzsben sem felesleges, nem használt kód! Egy új ajándéktípus esetleges felvételéhez ne kelljen a már meglévő osztályokat módosítani!

b) Írjon egy egyszerű programot (nem dinamikus tömbbel!), ami megmutatja legalább három különböző típusú ajándék felvételét, valamint kiírja a nevüket a súlyukat és a paraméterüket.

A nem működő megoldásom az alábbi linkeken látható:
Headers.h
http://pastebin.com/YWd9tYSb
Functions.cpp
http://pastebin.com/hYSd5Vu3
Testing.cpp
http://pastebin.com/6SveRAWV

A problémáim:

- A Testing.cpp fájlban létrehozott tömböm elemeinek neveit miként tudom kiírni a for ciklusban?
- Az alosztályok egyedi paramétereit hogy tudnám kiírni?
Az általam használt módszer igazábból már ott "megbukott", hogy a getParameter függvényt kéri a Gift osztályba is, de oda a feladat kritériumai szerint nem tehetem be. Ezen megoldásomban még benne van, de itt az ostream ír hibát.

Kérlek segítsetek.
Előre is köszönöm.
Üdvözlettel: Papa

[ Szerkesztve ]

(#755) Mr. Teddy


Mr. Teddy
őstag

Sziasztok!
Egy conosle applicationt szeretnék grafikus felülettel megáldani. Lényegébe a graf felhasználói felületen csak indulóparamétereket kérnék be, amivel majd fog futni a program.
Próbáltam windows form-ban a meglévő kódomat alkalmazni, de van pár hely ahol hibát dob, mert nem managed kódban történtek a dolgok (ilyen pl.egy új szál indítása).

Megoldható e úgy a dolog, hogy a meglevő programomból egy függvényt csinálok, majd lefordítom DLL-be? Majd ezt a DLL-t felhasználni a windows form programban a megfelelő paraméterek meghívása után?

(#756) sghc_toma válasza Mr. Teddy (#755) üzenetére


sghc_toma
senior tag

van lehetoseg nativ kod hivasara managed kodbol: DllImport

in asm we trust

(#757) Sk8erPeter válasza papa019 (#754) üzenetére


Sk8erPeter
nagyúr

Hali!
Az eredeti kód azért nem fordul, mert void visszatérési értékű a getParameter() függvényed a Gift osztályban, ami miatt a cout elszáll.
Ezt megoldhatod úgy, hogy inkább double visszatérési értékűvé változtatod:
double getParameter(){ return 0; }; /// void getParameter(){} helyett

De ennél a kiíratást egyszerűbben oldanám meg, mondjuk lehetne minden osztálynak egy void print() művelete, ami épp a feladat által kiírt tulajdonságokat írná ki.

Egy lehetséges példa a Te feladatodra vonatkozóan:
-a Gift osztályban deklarálj egy
virtual void print();
függvényt, az összes többi osztályban pedig egy sima (nem virtuális)
void print();
függvényt.
-maga a megvalósítás pedig a következőképpen nézhetne ki (csak egy lehetséges megoldás, lehetne rajta bőven csiszolni, de gyorsmegoldásként szerintem megfelel):

using namespace std;

void Gift::print()
{
cout << "Weight: " << baseWeight << endl;
cout << "Quantity: " << db << endl;
}

void ColoredEgg::print()
{
cout << "Name: Colored Egg" << endl;
cout << "Quantity: " << getWeight() << endl;

//Paraméter:
char colours[4][7] = { "RED", "GREEN", "BLUE", "VIOLET" };
cout <<"Color: "<< colours[colour] << endl;
}

void ChocolateFigure::print()
{
cout << "Name: Chocolate Figure" << endl;
cout << "Quantity: " << getWeight() << endl;

//Paraméter:
std::cout <<"Melting Point: "<< MeltingPoint << endl;
}

void Candy::print()
{
cout << "Name: Candy" << endl;
cout << "Quantity: " << getWeight() << endl;

//Paraméter:
char quality_names[4][5] = { "HARD" , "SOFT" };
std::cout <<"Quality: "<< quality_names[quality] << endl;
}

-Ezenkívül szerintem a destruktort a Gift osztályban virtuálissá kellene tenned, hogy ne legyen memóriaszivárgás:

virtual ~Gift() {}

A Testing.cpp-ben pedig a for ciklus akkor ez alapján a következőképpen nézhetne ki (a többi rendben van):

for (int i = 0; i < 3; i++) // kiíratjuk
{
cout << "************************" <<endl; //csak az elválasztás kedvéért
Present[i]->print();
}

Sk8erPeter

(#758) Tuostein


Tuostein
csendes tag

Sziasztok!
Van egy beadandóm és valamiért nem akar lefutni, hibát nem dob ki, csak simán kiakad! CodeBlocks-ban írom... tudom van jobb is... a debuggal arra jutottam hogy megakad a keres fgv-ben az if-es sorban. legalábbis oda rakta a sárga nyilat a debug..
A feladat: "Egy N résztvevőjű kutyaszépségversenyen M különböző szempont szerint pontoznak minden kutyát, s az eredményt a KUTYA(N,M) mátrix tartalmazza. Minden szempont alapján maximum MAX(I) pont adható (nem negatív egész szám). Az összetett versenyből automatikusan kiesik az a kutya, amely valamelyik kategóriában nem éri el a kategóriánként megadott alsó ponthatárt (MIN(I)). Készítsen C++ programot, amely megadja azt a kategóriát, ahol a legkevesebb kieső volt!"
És a kód:
#include <iostream>

using namespace std;

void beolvas(int&, int&, int*, int*, int**);
void keres(int&, int&, int*, int*, int**);
void kiir(int&, int&, int*);

int main()
{
int n,m;
cout << "Kutyaszepsegverseny" << endl << endl;
int *min, *max, *k;
int** kutya;
beolvas(n,m,max,min,kutya);//ellenőrzött beolvasás
k = new int[m];
keres(n,m,k,min,kutya);//legkevesebb kieső keresése
kiir(n,m,k);//az összes legkevesebb kieső kiírása
return 0;
}

void beolvas(int &n, int &m, int* max, int* min, int** kutya){
bool rossz=true;
string temp;
do {
cout << "Hany kutya szerepel (1-...): ";
cin >> n;
if (cin.fail()) {
cout << "Nem szamot adott meg!" << endl << "Adjon meg egy pozitiv egesz szamot!" << endl;
rossz=true;
}else {
rossz= (n<1);
if (rossz) {
cout << "Helytelen erteket adott meg!" << endl << "Adjon meg egy pozitiv egesz szamot!" << endl;
}
}
cin.clear(); getline (cin,temp,'\n');
}while (rossz);//kutyák számának (n) ellenőrzött beolvasása

do {
cout << endl <<"Hany szempontot pontoznak (1-...): ";
cin >> m;
if (cin.fail()) {
cout << "Nem szamot adott meg!" << endl << "Adjon meg egy pozitiv egesz szamot!" << endl;
rossz=true;
}else {
rossz= (m<1);
if (rossz) {
cout << "Helytelen erteket adott meg!" << endl << "Adjon meg egy pozitiv egesz szamot!" << endl;
}
}
cin.clear(); getline (cin,temp,'\n');
cout << endl;
}while (rossz);//szempontok számának (m) ellenőrzött beolvasása

max = new int[m];
for (int i=1; i<=m; i++){
do{
cout << i << ". szempont maximum ponthatara (2-...): "; cin >> max[i-1];
if (cin.fail()) {
cout << "Nem szamot adott meg!" << endl << "Adjon meg egy kettonel nagyobb egesz szamot!" << endl;
rossz=true;
}else {
rossz= (max[i-1]<2);
if (rossz) {
cout << "Helytelen erteket adott meg!" << endl << "Adjon meg egy kettonel nagyobb egesz szamot!" << endl;
}
}
cin.clear(); getline (cin,temp,'\n');
}while (rossz);
}//szempontok maximum ponthatára

min = new int[m];
for (int i=1; i<=m; i++){
do{
cout << i << ". szempont minimum ponthatara (0-" << max[i-1]-1 << "): "; cin >> min[i-1];
if (cin.fail()) {
cout << "Nem szamot adott meg!" << endl << "Adjon meg egy nem negativ szamot (0-" << max[i-1]-1 << ")!" << endl;
rossz=true;
}else {
rossz= ((min[i-1]<0) || (min[i-1]>=max[i-1]));
if (rossz) {
cout << "Helytelen erteket adott meg!" << endl << "Adjon meg egy nem negativ szamot (0-" << max[i-1]-1 << ")!" << endl;
}
}
cin.clear(); getline (cin,temp,'\n');
}while (rossz);
}//szempontok minimum ponthatára

kutya = new int*[n];
for (int i=1; i<=n; i++){
kutya[i-1] = new int[m];
}

for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
do{
cout << i << ". kutya " << j << ". szempontra kapott pontja (maximum: " << max[j-1] << "): "; cin >> kutya[i-1][j-1];
if (cin.fail()) {
cout << "Nem szamot adott meg!" << endl << "Adjon meg egy nem negativ szamot (0-" << max[j-1] << ")!" << endl;
rossz=true;
}else {
rossz= ((kutya[i-1][j-1]<0) || (kutya[i-1][j-1]>max[j-1]));
if (rossz) {
cout << "Helytelen erteket adott meg!" << endl << "Adjon meg egy nem negativ szamot (0-" << max[j-1] << ")!" << endl;
}
}
cin.clear(); getline (cin,temp,'\n');
}while (rossz);
}
}
}

void keres(int &n, int &m, int* k, int* min, int** kutya){
for (int j=1; j<=m; j++){
k[j-1]=0;
for (int i=1; i<=n; i++){
if (kutya[i-1][j-1]<=min[j-1]) {
k[j-1]=k[j-1]+1;
}
}
}
}

void kiir(int &n, int &m, int* k){
int v=n;
for (int i=1; i<=m; i++){
if (k[i-1]<v) {
v=k[i-1];
}
}
if (v==0) {
for (int i=1; i<=m; i++){
if (k[i-1]==v) {
cout << i <<". szempont szerint nem volt kieső kutya!" << endl;
}
}
}else {
for (int i=1; i<=m; i++){
if (k[i-1]==v) {
cout << i <<". szempont szerint volt a legkevesebb kieső kutya!" << endl;
}
}
}
}

Nagyon megköszönném a segítségeteket, mert már semmi ötletem sincs hogy miért nem megy!
üdv: Péter

(#759) Jester01 válasza Tuostein (#758) üzenetére


Jester01
veterán

Igen, ott a hiba.
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400cca in keres (n=@0x7fff4645dc2c, m=@0x7fff4645dc28, k=0x18960b0, min=0x0, kutya=0x0) at t.cpp:118
118 if (kutya[i-1][j-1]<=min[j-1]) {

Innen rögtön látszik mi a baj: a min és a kutya paraméter is 0. Ha közelebbről megnézed, az is kiderül miért: mert a beolvas függvény az érték szerinti átadásból következően nyilván nem módosítja a main-ben lévő változókat.
Egyébiránt ezt a fordító (gcc) nekem jelzi is:
t.cpp:15: warning: 'max' is used uninitialized in this function
t.cpp:15: warning: 'min' is used uninitialized in this function
t.cpp:15: warning: 'kutya' is used uninitialized in this function

Ha ezeket referenciaként adod át már jobb lesz a helyzet, ekkor működni is látszik a programod :K

Jester

(#760) Tuostein válasza Jester01 (#759) üzenetére


Tuostein
csendes tag

Tudatlanabb vagyok mint sejtettem! :P Még csak most kezdtem el tanulni a c-t és úgy tanították hogy a tömböknél nem kell eléírni &-t. Ezekszerint van más amit elé kell írni?!

(#761) Jester01 válasza Tuostein (#760) üzenetére


Jester01
veterán

Azt kell eléírni :K
Ha tömbben lévő értékeket akarod módosítani, akkor nem kell. Itt viszont magát a tömböt (a kezdetére mutató pointert) akarod módosítani, tehát kell a referencia.

Jester

(#762) Tuostein válasza Jester01 (#761) üzenetére


Tuostein
csendes tag

Ehh... hát erre soha nem jöttem volna rá magamtól! :S :) Tökéletes! Nagyon köszönöm! :R

(#763) Mr. Teddy


Mr. Teddy
őstag

Sziasztok!
Az volna most a problémám, hogy egy unsigned char tömböt használok puffernek, miután olvasok hálózatról bájtokat.
Az a baj, hogyha megnövelem a méretét, kifagy a program. Mitől lehet ez, vagy mit tudtok javasolni, hogy csináljak kellően nagy buffert? Eddig a tömb indexeivel szépen körbe tudtam járni a bufferem, keresgélni ami kell nekem, csak ilyesmi buffer féle lenne jó.
Köszi

(#764) Sk8erPeter válasza Mr. Teddy (#763) üzenetére


Sk8erPeter
nagyúr

Nem ártott volna, ha leírod, milyen módon hoztad most létre a tömbödet. :)
Hogyan növeled a méretét? Dinamikusan kezeled, nyújtózkodó tömbről van szó?

Amúgy ha string osztályt használsz az #include <string> után, akkor azzal elég kényelmesen tudsz dinamikusan hozzápakolászni elemeket, pl. egy string * buffer változóba (feladattól függően simán string buffer is elég (* nélkül) ), és azon is ugyanúgy végig tudsz rohangászni indexeléssel.
Itt vannak az elérhető függvények: string class, itt meg példa pl. a hozzáfűzésre: append.

[ Szerkesztve ]

Sk8erPeter

(#765) Mr. Teddy válasza Sk8erPeter (#764) üzenetére


Mr. Teddy
őstag

Úgy hozom létre, hogy unsigned char [100000];
Első körben fix nagy tömbre van szükségem, szal nem akarom dinamikusan növelni.
Jó lenne kb 1MB adat tárolására képes tömböt létrehozni.

(#766) Sk8erPeter válasza Mr. Teddy (#765) üzenetére


Sk8erPeter
nagyúr

Ezt írtad: "Az a baj, hogyha megnövelem a méretét, kifagy a program."
És akkor mégis hogyan akarod megnövelni, ha ilyen módon hozod létre a tömböt? :Y
Mi bajod van a dinamikus növeléssel? :F

Sk8erPeter

(#767) Mr. Teddy válasza Sk8erPeter (#766) üzenetére


Mr. Teddy
őstag

Na szal félreértjük egymást.
Szal úgy növelem meg, hogy átírom az értéket, majd újrafordítom.
Tehát Char[100]-al megy, Char[200]-al nem. Persze nem 100-as mértéken fagy ki, hanem ilyen 1000000 nagyságban. Stack overflow hiba...

(#768) sghc_toma válasza Mr. Teddy (#767) üzenetére


sghc_toma
senior tag

egy mega adatot nem szokas a stack-ra pakolni.. a compilered/OS-ed jelenlegi beallitasaival nem is fer el ott, ezt meg is mondja neked a rendszer (stack overflow).. hasznald a free store-t:

unsigned char * str = new unsigned char[1000000];

in asm we trust

(#769) j0k3r!


j0k3r!
senior tag

hello!

egy nagyon egyszeru kerdesem lenne, megsem tudok rajonni.
a feladat az, hogy olvassak be txt-bol szavakat, es taroljam el oket egy tombben.
a gondom az, hogy ki van kotve, hogy nem "tudhatom" elore, hogy hany adatbol all a txt, ezert is gondoltam dinamikus tombre, megsem mukodik :/

a kodom:

#include <iostream>
#include <fstream>

using namespace std;

void main ()
{
int x=0;
char *szavak;
szavak= new char[];
ifstream be("adatok.txt");
if(!be)
{
cerr<<"hiba a filemegnyitas soran";
}
else
{
do
{
be.read(szavak[x],15);
x++;
}
while (!be.eof());
be.close();
}
for (int i=0;i<x;i++)
{
cout<<szavak[i]<<endl;
}
}

havernak csinalom a hazifeladatat, ami holnapra kellene neki.
nagyon megkoszonnem, ha valaki tudna segiteni.

[ Szerkesztve ]

some men just wanna watch the world burn...

(#770) emvy válasza j0k3r! (#769) üzenetére


emvy
nagyúr

Muszaj primitiv tombot ( char ** ) hasznalni? Ha igen, akkor azt kell csinalnod, mint pl. amit az std::vector, azaz lefoglalni X meretu tombot, es ha betelik, foglalni mondjuk egy duplaakkorat, es atmasolni a meglevoket, stb.

while (!sleep) sheep++;

(#771) j0k3r! válasza emvy (#770) üzenetére


j0k3r!
senior tag

stringgel meg lehetne oldani?
mert kesobb szuksegem lesz a szavakon beluli karakterek cserejere is.

(#772) Sk8erPeter char helyett valahogy stringgel meglehetne oldani?

[ Szerkesztve ]

some men just wanna watch the world burn...

(#772) Sk8erPeter válasza j0k3r! (#769) üzenetére


Sk8erPeter
nagyúr

Akár úgy is megoldhatod, ahogy itt szerepel: istream::read - C++ Reference

// read a file into memory
#include <iostream>
#include <fstream>
using namespace std;

int main () {
int length;
char * buffer;

ifstream is;
is.open ("test.txt", ios::binary );

// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);

// allocate memory:
buffer = new char [length];

// read data as a block:
is.read (buffer,length);
is.close();

cout.write (buffer,length);

delete[] buffer;
return 0;
}

Viszonylag primitív (de végül is célravezető) megoldás, a fájl végére ugrik, így tudja meg a fájl méretét, ennek megfelelő helyet foglal, majd vissza az elejére, és elkezdi a beolvasást fájl végéig.

De emvy megoldás-javaslata is tökéletes.

---------------------------------------------------------------------------------------------
Szerk.:
(#771) j0k3r!
persze, a string típus is teljesen jó. :K

PÉLDA:
string::push_back

// string::push_back
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
string str;
ifstream file ("test.txt",ios::in);
while (!file.eof())
{
str.push_back(file.get());
}
cout << str;
return 0;
}

Sokkal rövidebb is a kód.

[ Szerkesztve ]

Sk8erPeter

(#773) j0k3r!


j0k3r!
senior tag

emvy, Sk8erPeter nagyon szepen koszonom a segitseget!
majd jelentkezem, ha elakadok : )

some men just wanna watch the world burn...

(#774) emvy válasza Sk8erPeter (#772) üzenetére


emvy
nagyúr

A fajlmeret-beolvasas nem mukodik - gondolom szavankent kell belerakni a tombbe, azt meg elore nem tudja, hogy hany szo van.

while (!sleep) sheep++;

(#775) j0k3r!


j0k3r!
senior tag

nem is kellett olyan sokat varni... :(((
ez a megoldas jol mukodik:
// string::push_back
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
string str;
ifstream file ("test.txt",ios::in);
while (!file.eof())
{
str.push_back(file.get());
}
cout << str;
return 0;
}

de mivel karakterenkent menti el, nem pedig szavankent, ezert nem jo nekem.
get helyett getline meg nem mukodik, vagy valamit rosszul csinaltam :/
(a txt fileban soronkent vannak irva a szavak)

some men just wanna watch the world burn...

(#776) j0k3r!


j0k3r!
senior tag

up!

some men just wanna watch the world burn...

(#777) WonderCSabo válasza j0k3r! (#776) üzenetére


WonderCSabo
félisten

Nálam tökéletesen megy.

(#778) j0k3r! válasza WonderCSabo (#777) üzenetére


j0k3r!
senior tag

szavankent rakja bele egy string tombbe?

some men just wanna watch the world burn...

(#779) Sk8erPeter válasza j0k3r! (#775) üzenetére


Sk8erPeter
nagyúr

Ja bocsi, az elkerülte a figyelmem, hogy az a lényeg, hogy szavanként tárold el.
Az sem túl nehéz, akkor meg csináld azt, hogy mondjuk sima string helyett string*-ot használsz.

Írtam egy példát, bevallom, nem igazán néztem át, hogy helyes-e, és mivel láttam, hogy sürgős, elég gyorsan írtam, így lehetnek benne hibák, mindenesetre kipróbáltam, és működik.
Az eredeti példa analógiájára csináltam, de kissé átalakítva.

Így néz ki:

// string::push_back
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
ifstream file ("teszt.txt",ios::in);
if( !file.good() ){ //Fájlpara
cout<<"Hiba a fajllal...";
}
else //OK
{
string* words;
const int default_size=100; //kezdetben pl. 100 méretű tömböt hozunk létre
words=new string[default_size];

int size=default_size; //eltároljuk az alapértelmezett (kezdő)méretet, ha kell, növelünk
int count=0; //hol tartunk a tömbben? (egyszerűbb nyilvántartani)
while( file.good() ) //countot majd a cikluson belül növeljük
{
char c=file.get();
if(c==' ') count++; //szóközt kaptunk, növelünk, következő helyre tároljuk a szót
if(count<default_size){ //még beleférünk
words[count].push_back(c);
}
else{ //nyújtózkodunk
//pl. duplázzuk a kezdőméretet
string* tmp=new string[size*2]; //átmeneti változó, kétszeres kezdőmérettel
for(int uj=0;uj<count;uj++){ //csak count-ig van értelme menni, csak addig töltöttük fel
tmp[uj]=words[uj];
}
size*=2; //duplázzuk
tmp[count].push_back(c);
delete[] words; //töröljük az eredeti adatait
words=tmp; //végül belemásoljuk a nyújtott mérettel
}
}

for(int i=0;i<count;i++){
cout <<"i: "<<i<<".: "<< words[i] << endl;
}
}
return 0;
}

Sk8erPeter

(#780) WonderCSabo válasza j0k3r! (#778) üzenetére


WonderCSabo
félisten

Jah, természetesen nem, attem egyáltalán nem műxik.

Látom már van megoldás arra is.

(#781) j0k3r! válasza Sk8erPeter (#779) üzenetére


j0k3r!
senior tag

koszonom szepen!
futas kozbe neztem lepesrol lepesre es nalam 1 gond van:
if(c==' ') count++;
ez a feltetel sosem teljesul be, ergo count 0 marad es 1 hosszu stringbe osszefuzi oket szokozzel elvalasztva :/ sot a vegen a kiiratasnal hiaba van 1 hosszu stringben az egesz meg azt se irja ki :/

szerk: viszont ha ponttal valasztom el oket, akkor elvalasztja a szavakat!

[ Szerkesztve ]

some men just wanna watch the world burn...

(#782) j0k3r!


j0k3r!
senior tag

mostmar szokozzel is mukodik, en voltam a hibas, mivel enterekkel voltak elvalasztva a szavak, nem pedig szokozzel :W
Sk8erPeter ismet :R
mar csak egyetlen szepseghibaja van, hogy az elso szo kivetelevel minden szo elso karaktere szokoz : )
nincs valami parancs, ami ha szokozt lat eldobja a karaktert? (ignore vagy valami ilyesmi)

[ Szerkesztve ]

some men just wanna watch the world burn...

(#783) Sk8erPeter válasza j0k3r! (#782) üzenetére


Sk8erPeter
nagyúr

Ezt könnyű megoldani, csináld azt, hogy az if(c==' ') count++; rész után tegyél egy nagy else blokkot, a következőképpen:
if(c==' ') count++; //szóközt kaptunk, növelünk, következő helyre tároljuk a szót
else{
if(count<default_size){ //még beleférünk
words[count].push_back(c);
}
else{ //nyújtózkodunk
//........
//........
}
}

És ezzel elvileg jó. :)

Sk8erPeter

(#784) Jester01 válasza j0k3r! (#782) üzenetére


Jester01
veterán

Az alap operator>> az éppenséggel benyel mindenféle szóközt (whitespace). Most akkor tuti, hogy vectort nem szabad használni? Mert azzal kb ennyi az egész:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
ifstream file("teszt.txt", ios::in);
if(!file.good())
{
cout<<"Hiba a fajllal...";
return 1;
}
vector<string> words;
while(file.good())
{
string word;
file >> word;
words.push_back(word);
}
for(int i = 0; i < words.size(); i++)
{
cout <<"i: "<< i <<".: " << words[i] << endl;
}
return 0;
}

Jester

(#785) j0k3r! válasza Jester01 (#784) üzenetére


j0k3r!
senior tag

Most akkor tuti, hogy vectort nem szabad használni?
barmit lehet hasznalni : )

neked is koszonom szepen!

some men just wanna watch the world burn...

(#786) Sk8erPeter válasza Jester01 (#784) üzenetére


Sk8erPeter
nagyúr

ÓÓ, basszus, eszembe se jutott, hogy megeszi a szóközt a >> operátor, és a vector felhasználása helyett írtam egy nyújtózkodó tömböt :D Na sebaj, végül is szerencsére nem tartott sokáig.

Sk8erPeter

(#787) j0k3r!


j0k3r!
senior tag

na lassan csak kesz lesz.
inkabb leirom a teljes feladatot.
szoval txt-ben szavak -> szavakat beolvas -> kivalasztok veletlenszeruen egy szot -> ahany betu, annyi *-ot kiirok -> aztan 10et tippelhet az user

pl az adott szo barack: ******
es a tipp 'a' betu volt akkor: *a*a** igy kell modositanom, mindaddig mig ki nem talaljak, vagy le nem telik a 10 'esely'

namost mar megvan a random resze, megvan a random szo, kiirja a megfelelo szamu csillagot, csak ott akadtam el, hogy hogy tudom a bekert betut egyesevel vegigellenorizni az adott indexu vector karakterein?

[ Szerkesztve ]

some men just wanna watch the world burn...

(#788) WonderCSabo válasza j0k3r! (#787) üzenetére


WonderCSabo
félisten

Magyarul akasztófázni kell. :)

Szerk.

for (int i=0;i<vector[randomodik].length();i++)
{
if ( vector[randomodik].substr(i,1) == betu)
{
// csinálja ezt

}
}

[ Szerkesztve ]

(#789) j0k3r! válasza WonderCSabo (#788) üzenetére


j0k3r!
senior tag

nem gyozom megkoszonni! igen, akasztofa : )
holnap remelem befejezem, szerdara kell a sracnak, nem holnapra.

some men just wanna watch the world burn...

(#790) Jester01 válasza j0k3r! (#789) üzenetére


Jester01
veterán

De hogy mostanság miért a "vak vezet világtalant" a divat azt nem értem :U

Jester

(#791) j0k3r!


j0k3r!
senior tag

hello megint!

valaki ranezne erre, hogy miert szall el az elso do while utan? (ha valaki kiprobalna, akkor az adatatok a data.txt-ben vannak soronkent 1 szo)
elore is koszonom.

some men just wanna watch the world burn...

(#792) Jester01 válasza j0k3r! (#791) üzenetére


Jester01
veterán

Konkrétan el nem száll nálam, csak rögtön kilép az első tipp után. Az meg azért van, mert a kitalálós ciklusban a feltétel pont fordítva van. Azt javítva még működik is, bár igazán kreatív módon hasznosítottad az itt elhangzott javaslatokat :U

Jester

(#793) j0k3r! válasza Jester01 (#792) üzenetére


j0k3r!
senior tag

koszonom szepen!
a kreativ jelzo alatt azt erted, hogy sz*r?

some men just wanna watch the world burn...

(#794) WonderCSabo válasza j0k3r! (#793) üzenetére


WonderCSabo
félisten

Gondolom úgy érti, hogy eléggé egy az egyben húztad rá a javaslatokra.
Egyébkét miért nem használsz vektort? Vagy direkt nem lehet?

Nem akkor fagyott ki Neked elsőnek, ha nem raktál be neki data.txt-t?

(#795) j0k3r! válasza WonderCSabo (#794) üzenetére


j0k3r!
senior tag

nem nem fagyott ki, data.txt mindig volt, csak kicsit felreerthetoen irtam az "elso" do while ciklust.
itt a 'vegleges'
ha vektort hasznaltam volna, az miben egyszerusitette volna meg a munkamat?
es megegyszer koszonom mindenkinek, aki segitett.

some men just wanna watch the world burn...

(#796) WonderCSabo válasza j0k3r! (#795) üzenetére


WonderCSabo
félisten

Nem kellett volna a tömb nyújtogatásával szórakozni, hanem a fileból beolvasásnál simán pushbackelni minden új szót a vectorba. De ezt mintha mondta volna is Sk8erPeter.

(#797) Jester01 válasza j0k3r! (#793) üzenetére


Jester01
veterán

Háááát, ha egyszer úgyis 1000 elemű fix méretű tömbbe olvasol, akkor aztán tök mindegy utána mit varázsolsz. Totál felesleges átmásolni egy másik (immár megfelelő méretű) tömbbe.

setlocale(LC_ALL,"Hun"); ebben nem vagyok olyan biztos, hogy működik. Nálam tuti nem. Persze ha nem is ellenőrzöd a visszatérési értéket akkor sose tudod meg.

numberofstars ez jó félrevezető változónév az imperialista kémek megtévesztésére ... mivelhogy még véletlenül sem a csillagokat számolja.

if(numberoftips<=10 && numberofstars==unknownlength) itt szerény véleményem szerint mindenképp numberoftips<=10

system("pause"); ezért, ha én tanár lennék, azonnal egyest adnék...

+1: kellene egy #include <cstdlib> a (s)rand miatt.

Jester

(#798) j0k3r! válasza Jester01 (#797) üzenetére


j0k3r!
senior tag

setlocale(LC_ALL,"Hun"); - ebben en sem vagyok biztos, ezert a vegen kiszedtem a kodbol

numberofstars - teljesen igazad van ez inkabb numberofnotstars vagy numberofpoints

if(numberoftips<=10 && numberofstars==unknownlength) - ezt nem teljesen ertem azert nem numberoftips<10 -et irtam, mivel ha az user pont 10. tippre talalja ki, akkor is mukodjon

system("pause"); - ezt pont a tanar mutatta, hogy ne szalljon el futtatas utan a win32 console application, ergo latod, hogy nyertel-e vagy sem

+1: kellene egy #include <cstdlib> a (s)rand miatt. - mostmar ezt is tudom

es koszonom az epito jellegu kritikat!

[ Szerkesztve ]

some men just wanna watch the world burn...

(#799) doc válasza Jester01 (#797) üzenetére


doc
nagyúr

system("pause"); ezért, ha én tanár lennék, azonnal egyest adnék...
ne tudd meg, mit tepem en a szamat emiatt mindenhol, de hiaba... sok helyen eleve ezt ajanljak az ujoncoknak :W

(#800) WonderCSabo válasza Jester01 (#797) üzenetére


WonderCSabo
félisten

setlocale(LC_ALL,"Hun") megy Vistán 7-en meg linuxon, de elég gázos és furcsa a dolog.

j0k3r!: a tanár elég hülye volt, hogy ilyet mutatott... Használd helyette ezt, egyszerű és minden oprendszeren műxik:

cout<<"Press [Enter] to continue . . .";
cin.get();

Copyright © 2000-2024 PROHARDVER Informatikai Kft.