Wie würdest ihr es Programmieren ? v2

03/04/2010 16:33 Obilee#1
So ich hab mal wieder eine nette Idee bekommen für eine neue kleine Aufgabe für euch.

Und zwar geht es dieses mal um das Sortieren, gegeben ist ein Int-Array. Dieses soll mit negativen und Positiven Zahlen gefüllt sein, die Aufgabe ist aus dem Array die kleinste Zahl auszugeben in einer Methode ( das Array wird an die Methode übergeben ). Doch das wäre ja zu einfach für euch, darum gibt es zwei Beschränkungen:

1. Man darf keine Vorgefertige Methode der Programmiersprache dafür nehmen, weil sonst wäre es ja grad mal nur eine Zeile Code.

2. Die Methode muss eine applikative Lösung sein ! Was heißt applikativ ? Ganz einfach die Methode , darf keine Wert zuweisungen enthalten ( i++, i = c usw. ), keine Schleifen besitzen ( for, do, do while ), keine eigene variablen oder Methoden nutzen ( int i = 0 usw. ). Das geht nicht ? Geht wohl, das Zauberwort lautet rekursion.



Mein Code:
03/04/2010 16:36 HardCore.1337#2
Die Zahlen sind gegeben oder werden Zufällig in den Array gefüllt?
03/04/2010 16:40 Obilee#3
Quote:
Originally Posted by General Desert View Post
Die Zahlen sind gegeben oder werden Zufällig in den Array gefüllt?
Das Array wird vorher gefüllt, könnt euch aussuchen ob ihr random zahlen nehmen wollt oder eigene ausgesuchte, wichtig dabei ist halt nur das der array an die methode übergeben wird, wie das array deklariert wird vor der übergabe ist eure sache.

Ich Persönlich habe das Array sogefüllt:
Quote:
int[] zahlen = new int[10];
Random gen = new Random();

for(int i = 0; i<zahlen.length;i++)
{
zahlen[i] = gen.nextInt();
}
Danach wird es zur Methode übergeben, das Füllen des Arrays gehört aber jetzt nicht direkt zur Aufgabe dazu.
03/04/2010 16:56 HardCore.1337#4
Ok, ich mach mich mal ran
03/04/2010 16:56 xNopex#5
Code:
#include <iostream>
#include <vector>

using namespace std;

int Get( vector<int>* vec, unsigned int pos, int* current )
{
    if( pos < vec->size()-1 )
    {
        if( current == NULL )
        {
            return Get( vec, pos+1, &vec->at( pos ) );
        }else
        {
            if( vec->at( pos ) < *current )
            {
                return Get( vec, pos+1, &vec->at( pos ) );
            }else
            {
                return Get( vec, pos+1, current );
            }
        }
    }
    if( vec->at( pos ) < *current )
        return vec->at( pos );

    return *current;
}



int main()
{
    vector<int> array;
    array.push_back( -25 );
    array.push_back( 50 );
    array.push_back( 0 );
    array.push_back( 100 );
    int var = Get( &array, 0, NULL );
    cout << var << "\n";
    cin.get();
    return 0;
}
03/04/2010 17:51 .$am#6
da is ne kleiner fehler bei:
Quote:
Originally Posted by xNopex
int main()
{
vector<int> array;
array.push_back( -25 );
array.push_back( 50 );
array.push_back( 0 );
array.push_back( 100 );
int var = Get( &array, 0, NULL );
cout << var << "\n";
cin.get();
return 0;
}
Er nimmt immer nur die -25 stadt 50 oder 0 ^^
03/04/2010 17:54 Obilee#7
-25 ist auch die kleinste Zahl oO

Meine Lösung stell ich ein wenig Später rein.
03/04/2010 18:13 .$am#8
ups hast recht hab mich vertan xD
03/04/2010 18:54 Obilee#9
Mein Code:
03/04/2010 19:05 xNopex#10
Wenn ich mir jetzt deine Lösung anschaue, fällt mir auf, dass meine etwas zu kompliziert ist :o gj
03/04/2010 19:08 Obilee#11
Quote:
Originally Posted by xNopex View Post
Wenn ich mir jetzt deine Lösung anschaue, fällt mir auf, dass meine etwas zu kompliziert ist :o gj
HeHe ja, mir ist deine auch ein wenig lang vorgekommen, wollt aber nichts sagen weil ich in c / c++ ( sollte bei dir c++ sein oder ) ewig nichts gemacht habe und nicht sicher war ob ich alles an dem code richtig verstanden hab.

Aber dafür ist ja der Thread da, um die verschiede lösungswege sich anzuschaun =)
03/04/2010 19:12 xNopex#12
Ja, das ist C++. Das Problem war, dass beim ersten Testen (da war mein Code etwa so lang wie deiner) die Konsole abgeschmiert ist -> Buffer Overflow. Nja dann hab ich ohne Nachzudenken umgeschrieben (e.g. pos < vec->size()-1 wtf!?) und dann wurde es so lang. Nja nächstes mal sollte ich mehr nachdenken.
03/04/2010 22:46 schlurmann#13
Die Programmiersprache war nicht vorgegeben richtig?

Code:
smallest :: [num] -> num
smallest [x]      = x 
smallest (x:y:xs) = smallest (x:xs), if x < y
                  = smallest (y:xs), otherwise
Es handelt sich um Miranda, eine funktionale Interpreter - Sprache, wen's interessiert.
03/06/2010 14:51 Obilee#14
Na haben es nicht mehr als 2 Geschafft ? ;)

@schlurmann: Jo ist in egal in welcher Sprache, leider kann ich da nicht sehr viel rauslesen da ich mal sowas von 0 plan von miranda habe
03/06/2010 17:57 rEdoX#15
Code:
function GetMin(Numbers: array of Integer; Minimum: Integer = High(Integer); Depth: Integer = 0): Integer;
begin
  if (Depth < Length(Numbers)) then
  begin
    if (Numbers[Depth] < Minimum) then
      Exit(GetMin(Numbers, Numbers[Depth], succ(Depth)))
    else
      Exit(GetMin(Numbers, Minimum, succ(Depth)))
  end
  else
    Exit(Minimum);
end;
[...]
const
  Numbers: array [0..4] of Integer = (1, 2, 3, 4, 1);
[...]
  writeln(GetMin(Numbers));