Hi, ich wollte ein Programm schreiben, das ganz viele eingegebene Zahlen eines Memo Feldes überprüft und ggf. doppelte ausgibt.
Das Problem: Es gibt bei mehreren doppelten Zahlen auch mehrmals die doppelten aus. Aber es soll zum Beispiel bei der Eingabe "1111" nur "1" ausgeben, weil 1 ist nunmal doppelt, wie oft ist vollkommen egal.
Quelltext:
void __fastcall TfrmMain::edtEingabeKeyDown
(TObject *Sender, WORD &Key,TShiftState Shift)
{
if(Key==VK_RETURN){
Zahlen[i]=StrToInt(edtEingabe->Text);
memoEingabe->Lines->Add(IntToStr(Zahlen[i]));
i++;
edtEingabe->SelectAll();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEingabeClick(TObject *Sender)
{
for (int d=0; d!=i; d++)
{
for(int c=d+1;c!=i;c++){
if (Zahlen[d] == Zahlen[c])
{
memoAusgabe->Lines->Add(Zahlen[c]);
}
}
}
}
Mir ist schon klar warum das so ist. ABer wie kann ich denn Zahlen[c] selber an Positionen überprüfen ? Zahlen[c(2,0)] oder Ähnliches funktioniert nicht.
Möchte einfach wissen wie ich von Arrays Stellen ausgeben kann.
GreeTz Selecta
P.S: Komplette Lösungen akzeptiere ich auch ;)
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
Hatte übersehen, dass nur (mehrfache) duplikate ausgegeben werden sollen. Nächster versuch:
for (int d=1; d<i; d++){//prüfe Zahlen[d] beginnend bei d=1
int dupli=0;
for(int c=0;c<d;c++){
if (Zahlen[d] == Zahlen[c]){//duplikat
if(++dupli>1)
break;//beende "for c", da zweites oder noch späteres duplikat
}
}
if(dupli==1)//erstes duplikat, ausgeben
memoAusgabe->Lines->Add(Zahlen[d]);
}
mr.escape