C Array auf Inhalt prüfen?

Gast #4965802
Lesenswert?

Atamer schrieb:
> Also ohne eine Schleife zu durchlaufen.

So:
1
if (elemnt[0] != 0)  err++;
2
if (elemnt[1] != 0)  err++;
3
if (elemnt[2] != 0)  err++;
4
if (elemnt[3] != 0)  err++;
5
if (elemnt[4] != 0)  err++;
6
if (elemnt[5] != 0)  err++;
7
if (elemnt[6] != 0)  err++;
8

9
// usw.

Braucht kaum Speicherplatz und geht ganz ohne Schleife.
#4965829
Lesenswert?

Dussel schrieb:
> Der Andere schrieb:
>> Gar nicht
> Doch klar.
>
>
1
if(Array[0]==0&&Array[1]==0&&Array[2]==0&&  &&Array[n]==0)
2
> {
3
> 
4
> }
5
>

Genialer Programmierer schrieb:
> Atamer schrieb:
>> Also ohne eine Schleife zu durchlaufen.
>
> So:
>
>
1
> 
2
> if (elemnt[0] != 0)  err++;
3
> if (elemnt[1] != 0)  err++;
4
> if (elemnt[2] != 0)  err++;
5
> if (elemnt[3] != 0)  err++;
6
> if (elemnt[4] != 0)  err++;
7
> if (elemnt[5] != 0)  err++;
8
> if (elemnt[6] != 0)  err++;
9
> 
10
> // usw.
11
> 
12
>
>
> Braucht kaum Speicherplatz und geht ganz ohne Schleife.

Der 1. April war doch schon. ;-)

Was wenn das Array z.B. 256 Elemente hat? 256 Zeilen Code hinschreiben 
oder wie? Das macht doch kein normaler Mensch.
Gast #4965840
Lesenswert?

Wie kann ich ein Auto bauen das keine Räder hat.

Und jetzt nicht kommen mit: Ich bau eins das fliegt, wenn es fliegt ist 
es ein Flugzeug, kein Auto, wenn es schwimmt ist es ein Boot, ...

Trollfrage halt und ihr fallt darauf rein.
Gast #4965894
Lesenswert?

Mark B. schrieb:
> Was wenn das Array z.B. 256 Elemente hat? 256 Zeilen Code hinschreiben
> oder wie? Das macht doch kein normaler Mensch.
Die Frage war 'wie'. Die Antwort war 'Geht nicht'. Das ist in C falsch 
und ich habe gezeigt, dass es geht. Ob es sinnvoll ist, war nicht die 
Frage. Vielleicht entwickelt der Fragesteller ja gerade seinen eigenen 
C-Compiler und hat Schleifen noch nicht implementiert. ;-)
#4965951
Lesenswert?

Vielleicht sowas in die richtung?
1
struct int_array {
2
  size_t set_count;
3
  int* data;
4
};
5

6
int array_data[10]={0};
7
struct int_array array={0,array_data};
8

9
void int_array_setValue( struct int_array* a, size_t i, int x ){
10
  int y = a->data[i];
11
  if( x && !y ) a->set_count++;
12
  if( y && !x ) a->set_count--;
13
  a->data[i] = x;
14
}
15

16
bool int_array_isNoneSet( struct int_array* a ){
17
  return !a->set_count;
18
}
(Firma: Schweigstill IT) Persönliche Seite #4965983
Lesenswert?

Man könnte das ganze auch rekursiv lösen, z.B. indem man das Problem für 
ein Array der Größe N auf das der Größe N-1 zurückführt oder z.B. einen 
Binärbaum aufbaut. Im ersten Fall skaliert der Speicherverbrauch auf dem 
Stack linear mit der Größe des Arrays und im zweiten logarithmisch.

Im konkreten Fall mag solch ein Vorgehen unglaublich ineffizient sein, 
aber bei manchen andere Fragestellungen durchaus sinnlos und effizient.

Nachtrag:
Mist, zu spät... ;-)
Gast #4966381
Lesenswert?

Dirk B. schrieb:
> Ohne (eigene) Schleife:
>
> Neues Array anlegen und mit 0 initialisieren oder mit memset auf 0
> setzen.
> oder ausreichend Speicher mit calloc besorgen.
>
> Dann mit memcmp vergleichen.

Zweites Array ist nicht nötig. Alle Elemente sind 0, wenn das erste 
Element 0 ist und jedes Element gleich dem Nachfolger ist:
1
(a[0]==0) && (memcmp(a,a+1,sizeof(*a)*(a_len-1))==0) // a_len: Anzahl der Elemente in a. Der Typ von *a muss bitvergleichbar sein.

;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren