예제 #1
0
파일: genxml.cpp 프로젝트: foogywoo/drone
int main( int argc, char **argv )
{
	
	std::string s;
	std::map<int,std::pair<int,int> > pos;
	vector<string> coord;
	set<int> exist;
        set<pair<int,int> > connec;

	std::ifstream i("../data/pos.txt");
	if(i.fail())
		printf("could not open pos.txt\n");
        std::ofstream o("../data/data.xml");
	o<<"<data x0=\"60.396\" y=\"5.32\" width=\"0.003\" height=\"0.002\">\n";

	getline(i, s);

	QString ts,con;
	coord = split(s," ");
	int yoff = tolong(coord[1]);
	int xoff = tolong(coord[0]);
	printf("using offset %i,%i\n",xoff,yoff);
	while (getline(i, s)) {
      // s contains the input line, without final newline char.
	coord = split(s," ");
	//if(coord.size()!=3)
	{
	  //printf("erreur : %i for line %i ",coord.size(),coord[0].c_str());
		//exit(1);
	}

	ts="<spot id=\""+QString((coord[0]))+"\">\n";
	ts+="  <position x=\""+QString(tostring(tolong(coord[1])+xoff))+"\" y=\""+QString(tostring(-tolong(coord[2])+yoff))+"\" z=\"0\"/>\n";

	QDir d;
	d.setPath("../data/clips");
        d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
        d.setSorting( QDir::Size | QDir::Reversed );

	char pouet[10];
	sprintf(pouet,"%02i",tolong(coord[0]));
	d.setNameFilter("shot"+string(pouet)+"*");
        const QFileInfoList *list = d.entryInfoList();
        QFileInfoListIterator it( *list );
        QFileInfo *fi;
	int clips=0;
	while ( (fi = it.current()) != 0 ) {
            ts+= "  <moviefile>"+QString(fi->fileName().latin1())+"</moviefile>\n";
            ++it;
	    ++clips;
        }
	ts+="</spot>\n\n";
	
	if(clips>0)
	  {
	    exist.insert(tolong(coord[0]));
	    o<<ts.latin1();
	  }
	for(int i=3;i<coord.size();i++)
	  connec.insert(make_pair(tolong(coord[0]),tolong(coord[i])));
   }


	for(set<pair<int,int> >::iterator it=connec.begin();it!=connec.end();++it)
	  if(exist.find(it->first)!=exist.end() && exist.find(it->second)!=exist.end())
	    o<<"  <connection from=\""+QString(tostring(it->first))+"\" to=\""+QString(tostring(it->second))+"\" />\n";

	o<<"</data>\n";
	o.close();
	
        return 0;
}
예제 #2
0
파일: Hashfkt.cpp 프로젝트: acpanna/coding
void divisionsrest (int anzahl)
{ 
 kolission = 0;

 char divisor[20];

 sprintf(divisor,"%d",p);

 ueberlauf.remove();  // Loeschen der Kolissionsliste
 
 // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum

 arr = new int[p];
 if (arr == 0)
	speicher();

 // Vorbelegen des Arrays mit -1

 for (int j = 0; j < p; j++)
  arr[j] = -1;  
 
 /* Durchfuehrung der Zuordnung mit Hilfe der Divisions-Rest-Methode */

 for (j = 0; j < anzahl; j++)
 {
   
   // Berechnung des jeweiligen Adressregisters durch Modulo-Division des
   // Schluesselwertes durch die Groesse des Adressraumes
   
   C_xlong dwarf = eingabe[j].finput % divisor;
   
   long index = tolong(dwarf);
  
   // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten
   // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die
   // Groesse des Adressraumes

   index = index % p;

   // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1),
   // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen
   // Schluesselwertes in dem erstellten Adressraum gespeichert

   if (arr[index] == -1)
	   arr[index] = j;

   // Falls das ertmittelte Register bereits belegt ist, so wird der
   // Schluesselwert an die Kolissionsliste angefuegt

   else
   {
     kolission++;
	 
	 C_xstrlong tmp(eingabe[j].keystr);
	
	 ueberlauf.append(tmp);
   }
 }

  ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!");

  // Aufruf der Ausgabefunktion

 ausgabe(arr);

 p = ADDRESSRANGE;

 return;
}
예제 #3
0
파일: Hashfkt.cpp 프로젝트: acpanna/coding
void grenzfaltung (int anzahl, int zugriff)
{
 kolission = 0;
 
 ueberlauf.remove();   // Loeschen der Kolissionsliste
 
 // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum

 arr = new int[p];
  
 if (arr == 0)
	speicher();

 // Vorbelegen des Arrays mit -1

 for(int j=0 ; j<p ; j++)
   arr[j] = -1;

 /* Durchfuehrung der Zuordnung mit Hilfe der Schiebefaltungs-Methode */
 
 // aehnlich der vorangegangenen Methode wird hier ebenfalls jeder
 // Schluesselwert in Abschnitte mit beliebiger Laenge zerlegt. Allerdings
 // wird vor dem Aufsummieren jeder zweite Abschnitt invertiert.

 for (int i = 0; i < anzahl; i++)
 {
  C_xlong invers;
  long index = 0;
  int laufen = 0;

  for(int l=1 ; l<=((eingabe[i].finput.getLength() + (zugriff-1))/zugriff) ; l++)
              // Ermittlung der Anzahl der Abschnitte mit der vom
              // Benutzer gewaehlten Laenge

  {
   // Aufsummierung der "ungeraden" Abschnitte

   if(l%2 > 0)
     index += tolong(eingabe[i].finput(laufen, zugriff));

   // Invertierung aller "geraden" Abschnitte und anschliessendes Aufsummieren

   else
     {
	  invers = (eingabe[i]).finput.invert(laufen, zugriff);
      index = index + tolong(invers(0, zugriff));
     }

   // Inkrementierung des Laufindex um auf den naechsten Abschnitt
   // zugreifen zu koennen

   laufen += zugriff;
  }
  
  // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten
  // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die
  // Groesse des Adressraumes

  index = index % p;
  
  // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1),
  // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen
  // Schluesselwertes in dem erstellten Adressraum gespeichert
  
  if (arr[index] == -1)
    arr[index] = i;

  // Falls das ertmittelte Register bereits belegt ist, so wird der
  // Schluesselwert an die Kolissionsliste angefuegt

  else
    {
     kolission++;
	 
	 C_xstrlong tmp(eingabe[i].keystr);
	
	 ueberlauf.append(tmp);
    }
 }

 ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!");

 // Aufruf der Ausgabefunktion

 ausgabe(arr);

 p = ADDRESSRANGE;

 return;
}
예제 #4
0
파일: Hashfkt.cpp 프로젝트: acpanna/coding
void transform (int anzahl, int basis)
{
	int exp;
	long ind;
	char range[20];

    sprintf(range,"%d",p);

	kolission = 0;
 
    ueberlauf.remove();   // Loeschen der Kolissionsliste
  	     
 // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum

 arr = new int[p];
  
 if (arr == 0)
	speicher();
 
 // Vorbelegen des Arrays mit -1

 for(int j=0 ; j<p ; j++)
   arr[j] = -1;

 /* Durchfuehrung der Zuordnung mit Hilfe der Basis-Transformations-Methode */
 
 // Hierbei wird jeder Schluesselwert in eine neue, vom Benutzer waehlbare
 // Basis transformiert (nach dem ueblichen Transformationsverfahren).

 for (int i = 0; i < anzahl; i++)
 {
  exp = 0;
  C_xlong index = 0;

  for(int l=(eingabe[i]).finput.getLength() - 1 ; l>=0 ; l--)
  {
   char str[20];
   sprintf(str,"%lu",(unsigned long) pow(basis, exp));
   index = index + ((eingabe[i]).finput(l, 1) * C_xlong(str)); 
  
   // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten
   // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die
   // Groesse des Adressraumes
   
   index = index % C_xlong(range);
   
   exp++;
  }

  ind = tolong(index);
  
  // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1),
  // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen
  // Schluesselwertes in dem erstellten Adressraum gespeichert

  if (arr[ind] == -1)
    arr[ind] = i;

  // Falls das ertmittelte Register bereits belegt ist, so wird der
  // Schluesselwert an die Kolissionsliste angefuegt

  else
  {
     kolission++;
	 
	 C_xstrlong tmp(eingabe[i].keystr);
	
	 ueberlauf.append(tmp);
  }
 }

 // Aufruf der Ausgabefunktion

 ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!");
 
 ausgabe(arr);

 p = ADDRESSRANGE;

 return;
}
예제 #5
0
파일: Hashfkt.cpp 프로젝트: acpanna/coding
void quadrat (int anzahl, int zugriff)
{
 int start;

 kolission = 0;
 
 C_xlong quad;

 ueberlauf.remove();   // Loeschen der Kolissionsliste

 // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum

 p = (int) pow(10, zugriff);
 arr = new int[p];
 
 if (arr == 0)
	speicher();
 
 // Vorbelegen des Arrays mit -1

 for(int j=0 ; j<p ; j++)
	 arr[j] = -1;

 /* Durchfuehrung der Zuordnung mit Hilfe der Mitte-des-Quadrats-Methode */
 
 for (int i = 0; i < anzahl; i++)
 {

  // Berechnung des Adressregisters durch quadrieren des jeweiligen
  // Schluesselwertes und anschliessendem herausgreifen der vom Benutzer
  // gewaehlten Anzahl von Ziffern aus der Quadratzahl.
  // Die so gewonnene Zahl gibt das Adressregister an.

  quad = eingabe[i].finput * eingabe[i].finput;
  start = quad.getLength()/2 - zugriff/2;
  
  C_xlong dwarf = quad(start,zugriff);
  
  unsigned int index = tolong(dwarf);

  // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten
  // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die
  // Groesse des Adressraumes

  index = index % p;

  // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1),
  // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen
  // Schluesselwertes in dem erstellten Adressraum gespeichert

  if (arr[index] == -1)
    arr[index] = i;

  // Falls das ertmittelte Register bereits belegt ist, so wird der
  // Schluesselwert an die Kolissionsliste angefuegt

  else
    {
     kolission++;
	 
	 C_xstrlong tmp(eingabe[i].keystr);
	
	 ueberlauf.append(tmp);
    }
 }

 ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!");

 // Aufruf der Ausgabefunktion
 ausgabe(arr);

 p = ADDRESSRANGE;	

 return;
}