Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 38.- Virtual rätsel - jetzt aber garantiert neu!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
22.08.2003, 16:36 Uhr
virtual
Sexiest Bit alive
(Operator)


Schreibe eine routine, welches das Minimum beliebig vieler integer Zahlen ermittelt. Der erste parameter gibt die Anzahl der Zahlen an, die übrigen Zahlen sind die Zahlen selbst:

C++:
minimum(2, 1, 4); // Minimum von 1 und 4
minimum(5, -1, -17, +110, 17/4, 8); // Minimum von -1, -17, +110, 17/4 und 8


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.08.2003, 16:37 Uhr
virtual
Sexiest Bit alive
(Operator)


Selbstverständlich darf gegolft werden, ist aber nicht zwingender Bestanteil der Übung. Wer golf will ist anghalten, saubere Lösungen ohne Memoryleaks zu schreiben!
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.08.2003, 16:51 Uhr
Pablo
Supertux
(Operator)


Die Anzahl der Parameter darf beliebig sein (ich meine, darf ich sie selbst bestimmen) oder muss die Funktion eine beliebige Anzahl von Parametern übernehmen wie printf?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.08.2003, 16:53 Uhr
virtual
Sexiest Bit alive
(Operator)


wie printf. (Die Funktion soll eine Ellipse sein)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.08.2003, 17:21 Uhr
Pablo
Supertux
(Operator)


Meine Lösung:

Sie dürfte auch mit 0 gehen, hab aber nicht getestet:


C++:
#include <stdio.h>
#include <stdarg.h>
#define min(x,y)  ((x) < (y) ? (x) : (y))
int m(int a, ...)
{
    va_list az;
    int i,minimum,l,n;
    va_start(az,a);
    minimum=l=va_arg(az,int);
    for(i=2; i<=a;++i) {
        n=va_arg(az,int);
        minimum=min(minimum,n);
        l=n;
    }
    va_end(az);
    return minimum;
}
int main()
{
    printf("%d\n", m(6,3,2,-6,5,4,0));
    printf("%d\n", m(10, 42,83,6,11,3,564,34,67,43,5));
}



Ausgabe:
-6
3
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 22.08.2003 um 17:49 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.08.2003, 10:37 Uhr
0xdeadbeef
Gott
(Operator)


Bah...ok. Ich hasse dieses va_list-Zeug, weil es die Typsicherheit über Bord schmeißt. Kann ich auch sowas machen?

C++:
m(a,l)int *a,l;{int i=*a,j=-1;while(++j<l)i=i>a[j]?a[j]:i;return i;}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.08.2003, 10:55 Uhr
virtual
Sexiest Bit alive
(Operator)


@Beefy
Nein kann man nicht, weil es unportabel ist: es macht eine Menge von Annahmen über den Aufbau des Stacks, die normalerweisen in den va_* Marcos gekapselt sind.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 23.08.2003 um 10:56 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.08.2003, 13:36 Uhr
Pablo
Supertux
(Operator)


Also ist mein Prrogramm nicht schlecht? Das ist das erste Mal, dass ich diese va_lists benutze.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.08.2003, 13:40 Uhr
0xdeadbeef
Gott
(Operator)


Was? Ich wolle ein Array und die Länge desselben übergeben, und auf diese ...-Geschichte verzichten. Ich weiß ja nicht, für wie verrückt du mich hältst, aber wenn ich die Wahl zwischen int m(...) und einem noch komirscherem Rumgewusel auf dem Stack habe, dann nehm ich doch die va_list. Trotzdem, im Zweifel würde ich sowas in der Realität mit einem Array machen...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.08.2003, 13:58 Uhr
Pablo
Supertux
(Operator)



Zitat:
0xdeadbeef postete
im Zweifel würde ich sowas in der Realität mit einem Array machen...



Stimmt, ich wollte auch ursprünglich mit einem Array machen, ich finde es sogar sicherer. Was passiert, wenn ich dummerweise etwas übergeben, das nicht int ist, sondern char* ?

Ich wollte auch das machen, was im Rätsel steht und deshalb hab ich mich für die va_list entschieden, sonst hätte ich mit einem Array gemacht.
Gibt es eine andere Möglichkeit eine Funktion zu machen, bei der die Anzahl der Paramter variabel ist wie bei printf, oder ist va_list die einzige Möglichkeit?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: