Прехвърляне към съдържание


papd

Регистриран на: 10 Jun 2015
Извън линия Активен: 11 Jun 2015 00:40

Започнати от мен теми

C++, struct, pointers, помощ

10 June 2015 - 23:03

Здравеите, извинявам се за отвратително написания текст и десетките грешки в него, но в компютърните зали няма друга клавятура,а не е позволено да се инсталира,а това е наи-доброто от транспонирането на кирилица онлине, имам да правя следната програма, но съм закъсала напълно, бих била благодарна на всякакъв съвет и обяснение,условието:
 
 
 
Набор от домино:Всяко домино има 2 различни номера всеки номер се появява осте два пъти.
1. Прочетете списък на домино от file като параметър на командния ред.Поставете доминото в единично свързан списък.
Файловият формат е както следва, за да изберете (виж също примерите.): Първият ред съдържа броя на
Камъни. Всеки допълнителен ред съдържа точките, разделени с точно един интервал.
2. Подредете домино, по такъв начин, че да докосва същите номера! Това води до един или повече
списъци, които трябва да бъдат изпълнени от Ринг списъци. Единично свързаният списък трябва да позволява достъпа до
списъците на пръстена. Имайте предвид, че камъните евентуално при поставянето трябва да бъдат завъртани
3. Покайете всички създадени кръгове,
4. Какво време на сложност имат отделните подзадачи?
Указания
Има много много начини, за да подредите домино в един или повече кръгове. 
трябва да се ограничите само до показване на масив от всички камъни.
Функции на библиотеки са разрешени само за реализиране на функционалността за въвейдане и показване на конзолата!
 
Liste
[1:23][11:42][23:42][1:11]
Kreise[1:23][23:42][42:11][11:1]
Пример 2:
Съдърйание:
7
1 3
3 5
2 6
6 23
23 42
2 42
1 5
На конзолата:
Liste
[1:3][3:5][2:6][6:23][23:42][2:42][1:5]
Kreise
[1:3][3:5][5:1]
[2:6][6:23][23:42][42:2]
Пример 3:
Съдърйание
2
1 2
1 2
На конзолата:
Liste
[1:2][1:2]
Kreise
[1:2][2:1]
 
Това ми е кодът:
 
#include <iostream>
#include <stdio.h>


struct dominostein { //Plochka za domino02 chasti s 2 chisla
int zahl1;
int zahl2;

};

struct meinesteinegesamt {//Cqla plochka za domino-Linearen list
dominostein info;   //Info= dvete chisla
meinesteinegesamt *next; //Ukazatel za sledvasht element v linearen list
};


struct meinesteinegesamt* next= NULL; //next = nullptr, zashtoto v nachaloto listyt e prazen
struct meinesteinegesamt* kopf=NULL; //head,ukazatel vyrhu pyrviq element ot lista
struct meinesteinegesamt* tail=NULL; //ukazatel vyrhu posledniq element ot lista
struct meinesteinegesamt* pData=NULL; //ukazatel vyrhu konkretnite danni

//File:
//4
//1 23
//11 42
//23 42
//1 11

meinesteinegesamt *readSteine (){ //Funkciq za prochitane na danni ot fail red po red
   FILE *datei;
   
   
   if((datei=fopen("datei.dat", "r") )==NULL) { //"r" für Lesen
      std::cout<<"Die Datei kann nicht geöffnet werden"<<std::endl; //Proverka za nalichieto na faila
      return kopf; //bzw return 0 //Vryshta head= nulev ukazatel-prazen list
   }else {
      int beginning; 
      int temp;
      fscanf(datei, "%d", &beginning); //Chete pyrvoto chislo ot faila,koeto pokazva kolko redove s dvoiki chisla
      //ima vyv faila
      
      for(int i=0; i<beginning; i++) {
         
         meinesteinegesamt *domino= new meinesteinegesamt(); //Syzdavane na nova plochka domino
         fscanf(datei, "%i", &temp);
         domino->info.zahl1=temp;  //Chete pyrvoto chislo ot matricata s chisla,orepratka kym pyrviq struct zahl1
         fscanf(datei, "%i", &temp);
         domino->info.zahl2=temp;////Chete pyrvoto chislo ot matricata s chisla,orepratka kym pyrviq struct zahl2
         printf("[%d:%d]", domino->info.zahl1, domino->info.zahl2);
         domino->next=0; //ukazatelq vyrhu posledniq element e nulev ukazatel
         if(i==0) {
            kopf=domino; //ukazatel vyrhu pyrviq element
         }else {
         tail->next = domino; //Memory access -greshka
         tail=domino;
         }
         
      
   }
   }return kopf;
   
}


meinesteinegesamt* loeschen () { //Triene na lista
   meinesteinegesamt* tmp;
   while(kopf != 0) { //bzw. NULL //Dokato head ne e nulev ukazatel (dokato ima elementi v lista)
      tmp=(kopf)->next; //Obhojdane na lista
      delete kopf;
      kopf=tmp;
   }
return kopf;   
}

meinesteinegesamt *readSteineRing (){ //Chetene na chislata kato ring list,taka che da bydat procheteni
   //po sledniq nachin: naprimer v dvoikite: [1:3][3:5][2:6][6:23][23:42][2:42][1:5]
//Plochki:
 //[1:3][3:5][5:1]
 //[2:6][6:23][23:42][42:2]
   
      meinesteinegesamt *domino= new meinesteinegesamt;
      //meinesteinegesamt *pData;
      if(kopf==0) {
         std::cout<<"Einfügen im Kopf"<<std::endl;
         pData->kopf=domino;
         pData->tail=pData->kopf;
      }else {
         std::cout<<"Einfügen im Tail"<<std::endl;
         domino->next=kopf;
         tail->next=domino;
         tail=domino;
      }
      return kopf;
   }


int main() {
   readSteine();
   readSteineRing();
   loeschen();

   
   return 0;
}
Благодаря предварително за всяка помощ и още веднъй се извинявам за вида на текста!