» »

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 

Senitel ::

In kje je kakšen poskus kako to implementirat v C++?

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)

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 ::

win64 je izjavil:


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 ::

smoke je izjavil:

win64 je izjavil:


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??

FXMagic ::

Kaj pa ce bi nam pokazal kaj si sam naredil ker se vedno nismo videli tvoje kode.

barcaFan ::

sedaj prilagam kodo v c++ napak je kar veliko kar enostavno nevem narest tako da bi bilo prav

/*
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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c# seminarska

Oddelek: Programiranje
112414 (2087) tuned
»

[C++] Naloga seznam

Oddelek: Programiranje
223086 (2361) Matic1911
»

[C#] Deserializacija

Oddelek: Programiranje
181749 (1352) Cvenemir
»

[c#] Napačen izpis -- prazni stringi

Oddelek: Programiranje
51403 (1345) Spura
»

[Java][Naloga] Seznam študentov, majčken problem

Oddelek: Programiranje
362224 (1911) VASkO

Več podobnih tem