Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit einem Array...

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 ] [ 3 ]
000
03.04.2004, 15:41 Uhr
~Sietsch
Gast


Moin!

Seit 2 Std. sitz' ich nun schon an dem Schei** hier. Also, folgendes Problem.
Ich will den Inhalt 2er Arrays vergleichen. In den Arrays befinden sich je 4 Felder mit je einer Ziffer. Verglichen werden soll einmal in einer Methode, die prüft ob im einen Array Ziffern gleich und an der gleichen Stelle sind, wie im anderen Array:
1 3
2 2 (Trifft hier zu)
3 1
4 1

In der anderen Methode soll geprüft werden, ob sich im einen Array Ziffern befinden, die NICHT an der richtigen Stelle sind, aber vorhanden:

1 3 (trifft hier zu)
2 2
3 1 (trifft hier zu)
4 1

Die Schwierigkeit liegt darin, dass eine Ziffer, die an der richtigen Stelle sitzt (Methode eins) auch gleichzeitig NUR vorhanden ist, also Methode zwei auch true liefert.
Ich habe da schon einiges gemacht, aber es besteht nach wie vor ein Problem. Einfach wäre es, könnte man wie in PERL den Inhalt des Arrays mit push() und pop() eifach verschieben und den dann leeren Teil des Array einfach "abschneiden". Geht da in C++?
Ich habe den Code mal etwas geändert, damit man ihn einfach copy&pasten kann:


C++:
#include <iostream>

using namespace std;

int main()
{
int arrUser[4]  = {0};    //Array mit 4 "Zellen"
int arrComp[4] = {0};         //Array mit 4 "Zellen"

int userNumber  = 1211; cout << userNumber  << "(Zaehler i)"  << endl;
int compNumber = 1111; cout << compNumber << "(Zaehler j)" << endl;

//Int userNumber wird in das Array eingelesn
arrUser[0] = (userNumber/1000)         ;     //1000er stelle von userNumber
arrUser[1] = (userNumber/ 100) %   10;     // 100er stelle von userNumber
arrUser[2] = (userNumber/  10) %   10 ;    //  10er stelle von userNumber
arrUser[3] = (userNumber%  10)         ;     //   1er stelle von userNumber
    
//Int compNumber wird in das Array eingelesn
arrComp[0] = (compNumber/1000)       ;    //1000er stelle von compNumber
arrComp[1] = (compNumber/ 100) %   10; // 100er stelle von compNumber
arrComp[2] = (compNumber/  10) %   10;  //  10er stelle von compNumber
arrComp[3] = (compNumber%  10)       ;    /   1er stelle von compNumber
    
int right = 0;
for(int i=0; i<4; i++)              //Zähler i für das Array arrUser        
{                    
   for (int j=0; j<4; j++)      //Zähler j für das Array arrComp
    {
              if ((arrUser[i] ==  arrComp[j]) && (i!=j))  //Vergleiche die Inhalte  
                                                                    // der Arrays
                  {right += 1;                //Wenn die Inhalte gleich,
                                                                    //zähle "right" um eines
                                                                    //nach oben
                    cout << "\ni = " << i << "| j = " << j << "| right = " << right << endl;
                   arrUser[i] = 0;           //und lösche die übereinstimmenden
                                                      //Werte, damit sie nicht mehr
                   arrComp[j] = 0;              //berückstichtig werden
            
                   }//if
    }//for
    
}//for

cout << "Ziffern an vorhanden, aber nicht an der richtigen Stelle: " << right << endl;
return 0;

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.04.2004, 16:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mmh also das erste ist einfach.. in etwa in der art

C++:
int count_right_places(int *a,int *b,int n){
for(int i=n;--i+1;++a,++b)if(*a-*b)--n;
return n;
}



bei deinem zweiten ist mir das noch nicht so klar
1 3 (trifft hier zu)
2 2
3 1 (trifft hier zu)
4 1 <-- was ist hiermit? die 1 stimmt ja auch also würde es hier auch zutreffen

oder soll das nur zutreffen wenn noch eine 1 in dem anderen array wäre die aber nicht an der richtigen stelle ist?


Bearbeitung:

so geht er auch...

C++:
int count_right_place(int *a,int *b,int n){
    return n?(*a==*b)+count_right_place(++a,++b,--n):0;
}


Ich glaub mastermind wäre auch ein ganz gutes golfrätsel...
Lust das zu moderieren beefy?


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.04.2004 um 16:17 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.04.2004, 16:17 Uhr
~Sietsch
Gast


Beim zweiten sieht es folgender Maßen aus:
Das "linke" Array ist das, was der Computer "erzeugt" hat. Das "rechte" gibt der Benutzer ein. Jetzt wird verglichen. Und da im linken Array nur einmal die 1 auftaucht, darf auch nur eine 1 im rechten Array berücksichtigt werden.

1 3 (trifft hier zu)
2 2
3 1 (trifft hier zu)
4 1 (trifft nicht zu, da links nur eine 1 vorhanden ist)


(etwas "mehr" Kommentar zur deinem Code wäre auch nicht schlecht) :-))
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.04.2004, 16:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


und kann es passieren das in dem array was der rechner erzeugt eine zahl mehrfach vorkommt? wenn ja ists komplizierter wenn nein ist es realitiv einfach...


Zitat:

(etwas "mehr" Kommentar zur deinem Code wäre auch nicht schlecht) :-))


Einzeiler muss man ja wohl nicht kommentieren oder?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.04.2004 um 16:29 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.04.2004, 16:28 Uhr
~Sietsch
Gast


Ja, kann vorkommen! :-(
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.04.2004, 16:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


verdammt, dann mus ich nachher nochmal drüber nachdenken bekomm ich nciht eben in 3 minuten hin...
falls es bis dahin kein anderer gelöst hat schau ichs mir heute abend nochmal an...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.04.2004, 16:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne das gross zu testen eventuell funzt das so


C++:
int count_right_numbers_false_place(int *a,int *b,int n){
int j,i,*p,x=0,*t=new int[n];
memset(t,0,n*sizeof(int));

p=b;
for(i=0;i<n;++i,++a,++p)
    if(*a!=*p)
        for(j=0;j<n;++j)
            if(*a==b[j] && a[j]!=b[j] && !t[j]){++x;t[j]=1;break;}
  
delete []t;
return x;
}

--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.04.2004 um 16:59 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.04.2004, 16:54 Uhr
~Sietsch
Gast


Hab's gelöst. Zwar nicht sehr schön, aber es läuft. Wenn es dich interessiert, dann kann ich ja mal den Code posten...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.04.2004, 17:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


jo kannst ja mal posten
interessiert ggf bestimmt andere auch. bist vermutlich nicht der erste einzige der jemals mastermind proggen muss...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.04.2004, 17:13 Uhr
~Sietsch
Gast


Wo hast du denn programmieren gelernt? Ist ja ne schreckliche Syntax! Kann ja kein Schwein lesen.... Und ohne Kommentare... *kopfshüttel*
Ich hab's doch nicht ganz gelöst... hab da noch nen kleinen Bug drin...
MIST!


Aber danke für deine hilfe!!!!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


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: