Ich würde gerne ein Programm in C schreiben, welches doppelte Einträge aus einer Liste von Nummern herausfiltert. Zuerst möchte ich eine Reihe von Ganzzahlen vom Benutzer eingeben lassen (etwa 800), bis eine 0 eingegeben wird. Diese Reihe (ohne die Null) ist dann die Liste der Nummern.
Aufgefordert wir der Benutzer mit dem Wort "Nummer: ". Nun soll der Computer die Liste in exakt der Reihenfolge (wie eingegeben wurde) ausgeben. Dazu soll jede Nummer in einer Zeile stehen.
Wie könnte ich das am besten anstellen?
Best answer:
Answer by Alwin E
Ich kann kein C, aber in Pascal/Delphi würde ich das in der Art lösen (folgt Pseudocode):
var
Liste = set of integer;
procedure entry
(readln (number));
Liste := Liste + number
procedure Schreibdenscheiss
x := 0;
while (x <= 800)
if x in (Liste) writeln (Liste[x]);
x++
endwhile
Das Konzept dabei ist, dass Mengen (sets) "unique" sind und doppelte Einträge von Haus aus nicht zulassen.
What do you think? Answer below!
Bitteschön ist getestet MAXELEMENT gross genug dimensionieren dann sollte es keine Probleme genem. Andernfalls auf
AntwortenLöschen#include
#include
#include
#define MAXELEMENT 1000
using namespace std;
bool isInArray(int a, int *pa, int acnt)
{
for (int i=0; i if (pa[i]==a)
return true;
return false;
}
int main(int argc, char *argv[])
{
int a=999;
int ar[MAXELEMENT];
int acnt=0;
while (a!=0)
{
printf("Nummer: ");
scanf ("%d", &a);
if (!isInArray(a, ar, acnt))
ar[acnt++]=a;
}
printf("Ausgaben");
for (int i=0; i printf("%dn", ar[i]);
printf("Enden");
system("pause");
return EXIT_SUCCESS;
}
#include "stdio.h"
AntwortenLöschenlong atol();
main(argc, argv) int argc; char *argv[];
{
long numbers[1000];
int xa;
xa = 0;
do
{
If(xa > 998) { pintf("overflown"); numbers[xa] = 0l; break;}
if(!getnumber(&numbers[0] , xa)) ++xa;
} while( numbers[xa - 1]);
xa = 0;
while( numbers[xa]) printf("%ldn", numbers[xa]);
}
int getnumber(number, xa) long *number[]; int xa;
{
char buffer[1000], *ca;
int xb;
ca = &buffer[0];
loop:
read(0, ca, 1);
if( (*ca == 13) || (*ca == 10)) goto weiter;
if (( *ca < 48) || (*ca > 57)) { putc( 8, stdout); goto loop; }
putc( *ca, stdout); ++ca;
goto loop;
weiter: *ca = 0;
*number[xa] = atol(buffer);
for(xb = 0; xb <= xa; ++ xb)
if( *number[xb] == *number[xa]) return 1;
return 0;
}
Debuggen mußt Du das selber --- ich habe hier weder einen Compiler noch ein Manual und seit mehr als 1 Jahr nicht mehr programmiert:
@Alwin: C solltest Du unbedingt lernen - ist die beste Programmiersprache der Welt, allerdings nur für Chaoten geeignet.