Forum » Programiranje » c++ ned help
c++ ned help
barcaFan ::
zdravo ljudje imam en problem prej sem kar nekaj časa delal v c# sedaj pa delam en program v c++ in mi par stvari nagaja zato vam bom spodaj nalimal tiste dele kode v c# katere neven spravit v c++ in vas vljudno prosil da bi mi pomagali
class kandidat { public string ime; public string priimek; public int starost; public int izobrazba; string[] imena = { "xavi", "lionel", "andres", "sergio", "ivan", "neymar", "luiz", "gerard", "javier", "jordi" }; string[] priimki = { "hernandez", "messi", "iniesta", "busquts", "rakitic", "jr", "suarez", "pique", "mascerano", "alba" }; public void NastaviImePriimek(int ime, int priimek) { if (ime > 0) { this.ime = imena[ime]; } if (priimek > 0) { this.priimek = priimki[priimek]; } } tu nevem dat v c++ nastaviimepriimek public string[] VrniImePriimek() { string[] podatkikandidata = new string[2]; podatkikandidata[0] = this.ime; podatkikandidata[1] = this.priimek; return podatkikandidata; } tudi neven kasneje vrnit imena in priimkov for (int i = 0; i < 30; i++) { kandidat tmp = new kandidat(); int randime = gen.Next(0, imena.Length - 1); int randpriimki = gen.Next(0, priimki.Length - 1); int randiuobrazba = gen.Next(3, 8); int randstarost = gen.Next(20, 90); tmp.NastaviImePriimek(randime, randpriimki); tmp.nastaviizobrazbo(randiuobrazba); tmp.NastaviStarost(randstarost); Console.WriteLine(tmp.ime + "-" + tmp.priimek + "-" + tmp.izobrazba+"." +tmp.starost+"."); tu v tej for zanki pa neven randimena in randpriimkov naredit
win64 ::
tudi neven kasneje vrnit imena in priimkov
Sicer ti lahko povemo, kako se to naredi ampak brez poglobljenega znanja bo tvoj program poln hroščev in memory leakov.
Rešitev je, da nastaviš tip string *, ali char**.
barcaFan ::
saj jas sem že probal to naredit v c++ program je malo daljši vendar teh stvari nisem vedel naret zato sem tu gor vprašal
saj če bi mi vi pokazali kak se naredi bi se jas že v to poglobil naredil še kakih par podobnih programov pa to samo je problem da nevem kak bi to naredil gleda na to da so te stvari v c# dosti lažje za naredit kot v c++(moje osebno mnenje)
saj če bi mi vi pokazali kak se naredi bi se jas že v to poglobil naredil še kakih par podobnih programov pa to samo je problem da nevem kak bi to naredil gleda na to da so te stvari v c# dosti lažje za naredit kot v c++(moje osebno mnenje)
sas084 ::
En primer kode:
#include <string> #include <vector> #include <iostream> #include <utility> #include <time.h> class Kandidat { public: static void Inicializiraj(void) { // napolni IMENA in PRIIMKE IMENA.push_back("xavi"); PRIIMKI.push_back("hernandez"); IMENA.push_back("lionel"); PRIIMKI.push_back("messi"); IMENA.push_back("andres"); PRIIMKI.push_back("iniesta"); IMENA.push_back("sergio"); PRIIMKI.push_back("busquts"); IMENA.push_back("ivan"); PRIIMKI.push_back("rakitic"); IMENA.push_back("neymar"); PRIIMKI.push_back("jr"); IMENA.push_back("luiz"); PRIIMKI.push_back("suarez"); IMENA.push_back("gerard"); PRIIMKI.push_back("pique"); IMENA.push_back("javier"); PRIIMKI.push_back("mascerano"); IMENA.push_back("jordi"); PRIIMKI.push_back("alba"); } Kandidat(void) : mIme(""), mPriimek(""), mStarost(0), mIzobrazba(0) { // inicializacija za random number generatorja srand (time(NULL)); } ~Kandidat(void) { } void NastaviImePriimek(int ime, int priimek) { if (ime > 0 && IMENA.size() > ime) mIme = IMENA[ime]; if (priimek > 0 && PRIIMKI.size() > priimek) mPriimek = PRIIMKI[priimek]; } void NastaviImePriimekRandom(void) { mIme = IMENA[rand() % IMENA.size()]; mPriimek = PRIIMKI[rand() % PRIIMKI.size()]; } void Izpis(void) const { std::cout << std::endl << mIme << "-" << mPriimek << "-" << mStarost << "." << mIzobrazba << "."; } std::pair<std::string, std::string> VrniImePriimek(void) const { // lahko uporabiš par <ime, priimek> return std::pair<std::string, std::string>(mIme, mPriimek); } private: std::string mIme; std::string mPriimek; int mStarost; int mIzobrazba; static std::vector<std::string> IMENA; static std::vector<std::string> PRIIMKI; }; std::vector<std::string> Kandidat::IMENA; std::vector<std::string> Kandidat::PRIIMKI; int main() { Kandidat::Inicializiraj(); Kandidat k1; k1.NastaviImePriimek(3,2); k1.Izpis(); std::pair<std::string, std::string> ime_priimek = k1.VrniImePriimek(); std::cout << std::endl << ime_priimek.first << "-" << ime_priimek.second; k1.NastaviImePriimekRandom(); k1.Izpis(); k1.NastaviImePriimekRandom(); k1.Izpis(); k1.NastaviImePriimekRandom(); k1.Izpis(); k1.NastaviImePriimek(5,5); k1.Izpis(); // test neveljavnih indeksov za imena in priimke (ime in priimek se ne spremenita) - kaj se zgodi s tvojo kodo v C#? :) k1.NastaviImePriimek(15574,16689); k1.Izpis(); }
smoke ::
Rešitev je, da nastaviš tip string *, ali char**.
Tule si malo mimo vsekal. std::string se vedno vrača po vrednosti, char** se pa načeloma ne uporablja za te namene iz točno tistih razlogov, ki si jih zgoraj omenil.
@sas084, tisti void v oklepajih je redundanten saj prazni oklepaji že kot taki v C++ pomenijo, da funkcija ne sprejema nobenih parametrov. Pa še to, tale tvoj class je primer slabega designa. Kaj če uporabnik pozabi poklicat metodo Inicializiraj?
Objekt mora biti pripravljen na uporabo ko se izvede konstruktor.
sas084 ::
Rešitev je, da nastaviš tip string *, ali char**.
Tule si malo mimo vsekal. std::string se vedno vrača po vrednosti, char** se pa načeloma ne uporablja za te namene iz točno tistih razlogov, ki si jih zgoraj omenil.
@sas084, tisti void v oklepajih je redundanten saj prazni oklepaji že kot taki v C++ pomenijo, da funkcija ne sprejema nobenih parametrov. Pa še to, tale tvoj class je primer slabega designa. Kaj če uporabnik pozabi poklicat metodo Inicializiraj?
Objekt mora biti pripravljen na uporabo ko se izvede konstruktor.
Se strinjam, statiko sem inicializiral, ker sem napačno prebral prvi post in sem mislil, da so imena in priimki statični.
barcaFan ::
hvala vsem za odgovore,mnenja še posebej tebi sas084 vendar me zanima če še kdo ve za kako lažjo(preprostejšo) obliko rešitve??
barcaFan ::
sedaj prilagam kodo v c++ napak je kar veliko kar enostavno nevem narest tako da bi bilo prav
kaj ve kdo kak bi se to naredilo??
/* Ime in priimek: Datum: BESEDILO NALOGE: */ //knjiznice #include <iostream> // vhodno-izhodni ukazi #include <stdlib.h> //standardni ukazi #include <string> // za la?je delo z nizi, veljavno le v C++ in ne v C# #include <ctime> #include <time.h> using namespace std; // uporaba imenskega prostora ni treba pisati std::ukaz class kandidat { public: string ime; string priimek; int leta; int st_izobrazbe; string imena[]={ "xavi", "lionel", "andres", "sergio", "ivan", "neymar", "luiz", "gerard", "javier", "jordi" }; string priimki[]={ "hernandez", "messi", "iniesta", "busquts", "rakitic", "jr", "suarez", "pique", "mascerano", "alba" }; kandidat() { ime="neznani"; priimek="neznanec"; leta=20; st_izobrazbe=6; } kandidat(string i,string p,int l,int s) { ime=i; priimek=p; leta=l; st_izobrazbe=s; } void nastaviIMePriimek(string *i ,string *p) { if(i!=NULL) { ime=*i; } if(p!=NULL) { priimek=*p; } } void NASTAVIIMEPRIIME(int i,int p) { if(i>0) { ime=imena[ime]; } if(p>0) { priimek=priimki[priimek]; } } string vrniimepriimek() { string podatkikandidata[2]; podatkikandidata[0]=ime; podatkikandidata[1]=priimek; return podatkikandidata; } void nastavisatros(int s) { if((s>=20)&&(s<80)) { leta=s; } } int vrniLeta() { return leta; } void nastaviIzobrazbo(int i) { if((i>=3)&&(i<=8)) { st_izobrazbe=i; } } int vrniIzobrazbo() { return st_izobrazbe; } void izpis() { cout<<"kandidatu je ime "<<vrniIMe()<<" kandidat je pise "<<vrnipriimek()<<" kandiatu je "<<vrniLeta()<<" let star "<<" in ima" <<vrniIzobrazbo()<<" stopnjo izobrazbe "<<endl; } }; int main() { kandidat k; k.izpis(); string imena[]={ "xavi", "lionel", "andres", "sergio", "ivan", "neymar", "luiz", "gerard", "javier", "jordi" }; string priimki[]={ "hernandez", "messi", "iniesta", "busquts", "rakitic", "jr", "suarez", "pique", "mascerano", "alba" }; kandidat *p[30]; srand(time(NULL)); for(int i=0;i<30;i++) { kandidat tmp; int izobrazba=rand()%9; int starost=rand()%81; tmp.nastaviIzobrazbo(izobrazba); tmp.nastavisatros(starost); p[i]=tmp; } system("pause");// da si ogledam rezultate na zaslonu return 0; }
kaj ve kdo kak bi se to naredilo??
Zgodovina sprememb…
- spremenilo: barcaFan ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c# seminarskaOddelek: Programiranje | 2664 (2337) | tuned |
» | [C++] Naloga seznamOddelek: Programiranje | 3287 (2562) | Matic1911 |
» | [C#] DeserializacijaOddelek: Programiranje | 1861 (1464) | Cvenemir |
» | [c#] Napačen izpis -- prazni stringiOddelek: Programiranje | 1526 (1468) | Spura |
» | [Java][Naloga] Seznam študentov, majčken problemOddelek: Programiranje | 2315 (2002) | VASkO |