JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=b52e16fb302e0174ef6c8c2ea62713a5Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

2 Zahlen - Eine Zahl
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 10:45    Titel: 2 Zahlen - Eine Zahl Antworten mit Zitat

Wie ist es mir möglich aus 2 einzelnen Zahlen eine Zahl zu machen, wobei die eine für Zehner, die andere für Einer verwendet werden soll.

z.B.
Code:

void main(void)
{
  int zahl = 0;
  short wert1 = 3;
  short wert2 = 5;
 
  zahl = wert1 wert2;
  // zahl soll dann in diesem Fall 35 werden
}


Wie ist das möglich, wie könnte ich das lösen? Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 11:33    Titel: Antworten mit Zitat

Ich musste in der Schule ein Bruchrechenprogramm schreiben und hab das so gemacht:

Code:

struct fraction
{
   int numerator;
   int denominator;
};

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 11:36    Titel: Antworten mit Zitat

Ist zwar nicht die eleganteste Lösung, aber du könntest die Zahl einfach in einen String verwandeln und dann wieder zurück in ne Zahl:
Code:
int zahl=0;
short wert1=3;
short wert2=5;

char tmp[10];
sprintf(tmp,"%i%i",wert1,wert2);

zahl=atoi(tmp);

_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 13:10    Titel: Antworten mit Zitat

Hi du kannst auch einfach das ganze in nen Algo packen, so wie diesen

Code:
int MakeOne(int* p,int iNumOfElements){
  if(!p)
   return 0;
  int multiplikator=1;
  int iret=0;
  for(int i=0;i<iNumOfElements;i++){
    iret+=p[i]*multiplikator;
    multiplikator*=10;
  }
  return iret;
}

void main(void){
  int a[3];
  a[0]=1;
  a[1]=2;
  a[2]=3;
  int erg = MakeOne(a,3);
  printf("Ergebnis: %i",erg); /*321*/
}


So, sollte es klappen ist allerdings noch ungetestet.

So, habs gerade getestet und bei mir funzt es einwandfrei...die Funktion MakeOne ist noch Verbesserungsdürfit, so könntest du dafür sorgen, dass es keinen Rückgabewert gibt, falls p nicht auf eine gültige Adresse zeigt.

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 13:39    Titel: Antworten mit Zitat

Vielleicht solltest du auch mal erklären was die Funktion genau macht? Ich hab sie mir noch nicht genau angeguggt aber wenn man einen Algorithmus postet sollte man ihn doch auch wenigstens erklären und sagen warum er funktioniert wie er soll. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 14:45    Titel: Antworten mit Zitat

Ich werd eure Tipps mal durchprobiern, wobei ich den letzten auch etwas seltsam finde Wink - genaue Erläuterung würde mich interessiern. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 15:32    Titel: Antworten mit Zitat

Also ich finde die Idee von Tarek sehr gut (könnte von mir sein Very Happy), der Algo ist ja wohl selbsterklärend Wink
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:02    Titel: Antworten mit Zitat

Hi,
eigentlich dachte ich auch, dass sich dieser triviale Algo von selbst erklärt, aber gut auf Euren Wunsch hin werde ich ihn kurz erklären. Der Funkion MakeOne wird der Zeiger auf den Anfang eines Array von Integern übergeben und die Anzahl der Elemente des Arrays. Nun geht die Funktion jede Zahl des Arrays durch und multipliziert sieht mit dem dementsprechenden Wert (multiplikator). Bei jedem Schleifen durchlauf wird dieser Wert verzehnfacht (also zu erst wird mit 1, dann mit 10, dann mit 100, etc. multipliziert). Das Ergnis dieser Multiplikation wird dann nun einfach zum Rückgabeergebnis (iret) hinzuaddiert. So wird als bei den Zahlen wie unten in der main festgelegt eigentilch nur folgendes gemacht.

Code:
return (p[0]*1+p[1]*10+p[2]*100);


Für dies müsste sich sogar ein Bildungsgesetzaufstellen lassen, sodass man daraus ein problem mathematischer Natur (Folgen)machen könnte.
Diese Funktion funktioniert für beliebig große Arrays, solange der Rückgabewert nicht den maximale Grenze von int übersteigt.
Man könnte den Algo verbessern indem man bspw. Ellipsis mit einbaut, auf diese Weise könnte man beliebig ints zusammenpacken, ohne dass diese in einem Array sein müssen. Jedoch empfehle ich diese Verbesserung des Algos nur extrem geübten Programmierern, da das mit der Ellipsis nicht ganz so einfach ist.

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:10    Titel: Antworten mit Zitat

Aso klar! Ich hatte die Frage total falsch verstanden und das mit den Einer und Zehner überlesen. Tret mich mal einer bitte :)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:42    Titel: Antworten mit Zitat

Aber gern doch!
*richtigKräftigZuTret!*
gehts dir jetzt besser? *g*

No Prob kann man ja mal überlesen Wink

Ich habe meinen Algo nochmal überdacht und mir ist bisher noch keine bessere Lösung eingefallen, also scheint diese entweder gar nicht so schlecht zu sein oder ich bin nur zu doof eine bessere zu finden.
Ich persönlich tippe auf zweiteres *lol*

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:12    Titel: Antworten mit Zitat

Da ich das Problem nu auch endlich verstanden habe... hier mal meine neue Lösung ;)

Code:

int GlueDigits(int first, ...)
{
   int current = 0;
   int glued = 0;
   int mul = 1;
   
   va_list digits;

   va_start(digits, first);

   current = first;

   do
   {
      glued += current * mul;
      mul *= 10;
      current = va_arg(digits, int);
   }while(current != -1);

   va_end(digits);

   return glued;
}


Diese Funktion kann eine variable Anzahl von Parametern übernehmen. Im Kern ist das aber immernoch Tareks Lösung.. nur halt etwas flexibler gestaltet. Das einzigste worauf man achten muss ist, dass man die Zeichen andersherum eingibt und eine abschließende "-1" mit übergibt.

Code:

int main()
{
   cout << GlueDigits(1, 2, 3, 4, 5, -1);
}

gibt also 54321 aus.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:19    Titel: Antworten mit Zitat

Ich hatte da noch eine Idee... auf diese Weise werden die Ziffern auch in der richtigen Reihenfolge zusammengeklebt. ;)

Code:

int GlueDigits(int first, ...)
{
   int current = 0;
   char buf[256];
   int mul = 1;
   
   va_list digits;

   va_start(digits, first);

   current = first;
   sprintf(buf, "%i", current);

   while(current != -1)
   {
      current = va_arg(digits, int);
      sprintf(buf, "%s%i", buf, current);
   }

   va_end(digits);

   return atoi(buf);
}


Damit würde das vorherige Beispiel also 12345 ergeben.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 17:46    Titel: Antworten mit Zitat

@Hazel:
Hast du deine letzte Version schon getestet? Ich wär nämlich vorsichtig damit, einen Buffer in sich selbst zu kopieren. Durch sowas hatte ich schon mal ernste Probleme, und das fieseste war, dass diese erst in der Releaseversion des Programms auftraten, in der Debugversion lief's einwandfrei. Shocked
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 12.05.2003, 10:44    Titel: Antworten mit Zitat

Jo ich hab's getestet und es hat funktioniert und probier es nachher auch mal in der Release Version. Ich muss dazu aber sagen, dass ich nicht die Standardbibliotheken benutze, sondern den STLPort.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.05.2003, 11:11    Titel: Antworten mit Zitat

Es ging Jörg denke ich um diese Anweisung:

sprintf(buf, "%s%i", buf, current);

Sonst sehe ich aber auch nix was mit STL-Funktionen zu tun hat?!?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum