Anonymní profil Ondrášek – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Ondrášek – Programujte.comAnonymní profil Ondrášek – Programujte.com

 

Příspěvky odeslané z IP adresy 89.102.68.–

Ondrášek
C / C++ › Dvousměrně vázaný seznam
7. 11. 2012   #166091

Vyřešeno, jsem idiot.

Ondrášek
C / C++ › Dvousměrně vázaný seznam
7. 11. 2012   #166083

Ahoj,

Napsal jsem tento seznam, který by měl být podle mých představ obousměrný ale šlape jen ve směru doprava :/ Tak se chci zeptat profíků proč nefunguje ve směru doleva. Děkuji mockrát.

Zdroják:

#include<stdio.h>

class Item{

  public:

	  void TiskniHodnoty() {

		  printf("x:%i\n",x);
		  printf("y:%i\n",y);
		  }

	  //SETRY-GETRY

	  int GetX() { return x;  } //TEMAHLE METODAMA JAKOBY ZISKAM PRISTUP K PRIVATNIM PROMENNYM
	  int GetY() { return y;  }

	  void SetX(int NastaveneX) { x = NastaveneX;} //NASTAVIME PRIVATNI PROMENNE
	  void SetY(int NastaveneY) { y= NastaveneY;}

	  void SetDoprava(Item *NastaveneDoprava) { doprava= NastaveneDoprava;}
	  void SetDoleva(Item *NastaveneDoleva) { doprava= NastaveneDoleva;}

	  Item *GetItemDoprava() { return doprava;}
	  Item *GetItemDoleva() { return doleva;}

	  Item() {doprava = this; doleva = this; x=0; y=0; } //SLOVICKO THIS RIKA ZE UKAZUJU NA OBJEKT VE KTEREM PRAVE SEM

	  Item(int ax, int ay) {x =  ax; y = ay; doprava = this; doleva = this; }  //ARGUMENTY U METODY ZACINAJI S PISMENEM a jelikoz a jako argument
	
  private:
	Item *doprava;
	Item *doleva;

	int x;
	int y;
	};

class Seznam{
	
public:

	Seznam() {p_first = NULL; p_last = NULL;}

	void PridejItem(Item polozka) {


		    //NASTAVENI 1. POLOZKY V SEZNAMU

		if(p_first==NULL) { // POKUD JE 1. polozka seznamu nulova tak ji tam pridame

		    Item *p_item = new Item; // VYTVORI NOVEJ ITEM V PAMETI
			p_item->SetX(polozka.GetX()); //NASTAVIME PROMENNE
			p_item->SetY(polozka.GetY());

			p_first = p_item; //NASTAVIM UKAZATEL NA PRVNI POLOZKU SEZNAMU UKAZATALEM VE KTEREM JE NAHRANA POLOZKA
			p_last = p_item;   //NASTAVIM UKAZATEL NA POSLEDNI POLOZKU SEZNAMU JELIKOZ JE V SEZNAMU ZATIM POUZE 1 POLOZKA
			} else 	{
			Item *p_item = new Item; // VYTVORI NOVEJ ITEM V PAMETI
			p_item->SetX(polozka.GetX()); //NASTAVIME PROMENNE
			p_item->SetY(polozka.GetY());


			Item *pomocny_ukazatel = p_last;
		    p_last = p_item; //NASTAVIME UKAZATEL NA POSLEDNI POLOZKU, UKAZATEL NA PRVNI NENASTAVUJEME JELIKOZ TEN MA ZUSTAT STEJNY JELIKOZ PRVNI POLOZKU UZ NEBUDEME MENIT TA JE PROSTE PRVNI A HOTOVO

			//PROVAZANI POLOZEK
			pomocny_ukazatel->SetDoprava(p_item); 
			p_item->SetDoleva(pomocny_ukazatel);
			p_item->SetDoprava(pomocny_ukazatel);
			pomocny_ukazatel->SetDoleva(p_item);
			
			}
       }

	void GetFirst()  {  p_first->TiskniHodnoty(); }
	void GetLast()   {   p_last->TiskniHodnoty(); }

	void VypisSeznam() {
		Item *dement = p_last;

		for(; dement != p_first; dement = (dement->GetItemDoleva()))
		{
			dement->TiskniHodnoty();
		}
		dement->TiskniHodnoty();
	}

	
private:
	Item *p_first; //UKAZATEL NA PRVNI PRVEK
	Item *p_last;  //UKAZATEL NA POSLEDNI PRVEK

	};

int main() {
	
	Item polozka1(0,0);
	Item polozka2(1,1);
	Item polozka3(2,2);
	Item polozka4(3,3);
	Item polozka5(4,4);
	Item polozka6(5,5);

	Seznam Oseznam;
	Oseznam.PridejItem(polozka1);
	Oseznam.PridejItem(polozka2);
	Oseznam.PridejItem(polozka3);
	Oseznam.PridejItem(polozka4);
	Oseznam.PridejItem(polozka5);
	Oseznam.PridejItem(polozka6);
	

	Oseznam.VypisSeznam();

	printf("SADSASDAD\n");
	Oseznam.GetFirst();
	Oseznam.GetLast();
	return 0;
	}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý