www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Bitmap ausgeben
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
Forum "C/C++" - Bitmap ausgeben
Bitmap ausgeben < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Bitmap ausgeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:56 Sa 04.06.2011
Autor: steftn

Aufgabe
#include <stdio.h>
#include <stdlib.h>

int main()



{
int i;
  for(i=0; i<16; i++)
  { if(4711 & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }


    return 0;
}

Hallo,

also ich habe oben genanntes Programm vorgegeben.

Aber irgendwie verstehe ich nicht, was das Programm genau macht!

Mir ist z.b. völlig unklar, wie dieser Ablauf funktioniert:

{ if(4711 & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }

Da wird doch zuerst 0x8000 um i nach rechts verschoben und dann mit 4711 UND-Verknüpft. Aber da steht doch ein if davor, also "WENN". Aber was soll das für einen Sinn ergeben??

"WENN 0x8000 um i nach rechts verschoben und dann mit 4711 UND-Verknüpft, dann 1 sonst 0" , hääää????

Nach WENN muss doch normalerweise irgend eine Bedingung kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist das irgendwie nicht ersichtlich.

Ich versteh das nicht, das Programm funktioniert zwar, aber ich hab keine Ahnung wie.
Kann mir das vielleicht jemand erklären?

Ich hoffe ihr habt verstanden was ich nicht verstehe.
Wär super wenn mir das jemand erklären könnte.
gruß


        
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 12:03 Sa 04.06.2011
Autor: nsche

hallo steftn
>     if(4711 & (0x8000>>i))
> Da wird doch zuerst 0x8000 um i nach rechts verschoben und
> dann mit 4711 UND-Verknüpft. Aber da steht doch ein if
> davor, also "WENN". Aber was soll das für einen Sinn
> ergeben??

if prüft (intern) ob der Ausdruck in der Klammer richtig (true) ist oder falsch (false). Der Ausdruck gilt als false, wenn 0 herauskommt, anderenfalls gilt er als true.

> "WENN 0x8000 um i nach rechts verschoben und dann mit 4711
> UND-Verknüpft, dann 1 sonst 0" , hääää????

Passt schon: wenn das Ergebnis der UND-Verknüpfung 1 ergibt, wird eine 1 ausgegeben, anderenfalls eine 0.

> Nach WENN muss doch normalerweise irgend eine Bedingung
> kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist
> das irgendwie nicht ersichtlich.

Anstelle von:

>     if(4711 & (0x8000>>i))

hätte man auch
if(4711 & (0x8000>>i)==1)
schreiben können. Die Vergleichsoperation wird oft weggelassen. So steht:
if (i){...}
oft an Stelle von:
if (i!=0){...}

Eine ähnliche Geschichte:
for(i=10;i;i--{...}
an Stelle von:
for (i=10;i>0;i--{...}

viele Grüße
nsche



Bezug
                
Bezug
Bitmap ausgeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:24 So 05.06.2011
Autor: steftn

Hallo,

danke für deine Antwort, was ich aber nicht ganz verstehe:
als Lösung wird für die Bitmap dann

0001001100111 ausgegeben. Ich verstehe aber nicht wiso!

Weil zuerst wird doch 0x8000 um 0 nach rechts verschoben. Dann wird das mit 4711 UND-Verknüpft. Ergebnis: 0

(also praktisch so:

    100011100010001
&  1000000000000000
-------------------
   0000000000000000

dann ist hier doch das Ergebnis 0)




Als zweites wird dann 0x8000 um 1 nach rechts verschoben und dann mit 4711 UND-Verknüpft: Ergebnis 1

(sieht dann so aus:

    100011100010001
&  0100000000000000
-------------------
   0100000000000000

ist das Ergebnis dann 1, weil ja bei der &-Verknüpfung mindestens einmal 1 rauskommt?)




Als drittes wird dann 0x8000 um 2 nach rechts verschoben und dann mit 4711 UND-Verknüpft: Ergebnis: 0

(sieht dann so aus:

  100011100010001
&  10000000000000
-----------------
  000000000000000
hier kommt wieder 0 raus)



usw bis man 0x8000 halt dann schließlich um 15 nach rechts verschoben hat.

Dann würde bei mir aber sowas rauskommen:

0100011100010001

Was mache ich nur falsch?

Wär für jede Hilfe sehr dankbar!
gruß

Bezug
                        
Bezug
Bitmap ausgeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:55 So 05.06.2011
Autor: steftn

Hallo,

ich hab den Fehler gefunden.
Ich Depp dachte die 4711 wär eine hexadezimalzahl...
Ist ja eine Dualzahl...

sorry

danke aber trotzdem!

Bezug
                        
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 15:29 So 05.06.2011
Autor: felixf

Moin!

> danke für deine Antwort, was ich aber nicht ganz
> verstehe:
>  als Lösung wird für die Bitmap dann
>  
> 0001001100111 ausgegeben. Ich verstehe aber nicht wiso!

Also die Binaerdarstellung von 4711 ist 1001001100111.

> Weil zuerst wird doch 0x8000 um 0 nach rechts verschoben.
> Dann wird das mit 4711 UND-Verknüpft. Ergebnis: 0
>  
> (also praktisch so:
>  
> 100011100010001
>  &  1000000000000000
>  -------------------
>     0000000000000000
>  
> dann ist hier doch das Ergebnis 0)

Genau.

> Als zweites wird dann 0x8000 um 1 nach rechts verschoben
> und dann mit 4711 UND-Verknüpft: Ergebnis 1
>  
> (sieht dann so aus:
>  
> 100011100010001
>  &  0100000000000000
>  -------------------
>     0100000000000000
>  
> ist das Ergebnis dann 1, weil ja bei der &-Verknüpfung
> mindestens einmal 1 rauskommt?)

Nein, das Ergebnis ist schon 0100000000000000. Das ist jedoch ungleich 0, weswegen der then-Zweig der if-Abfrage ausgefuehrt wird.

> Als drittes wird dann 0x8000 um 2 nach rechts verschoben
> und dann mit 4711 UND-Verknüpft: Ergebnis: 0
> [...]

LG Felix


Bezug
                
Bezug
Bitmap ausgeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:26 So 05.06.2011
Autor: felixf

Moin!

> > "WENN 0x8000 um i nach rechts verschoben und dann mit 4711
> > UND-Verknüpft, dann 1 sonst 0" , hääää????
>  Passt schon: wenn das Ergebnis der UND-Verknüpfung 1
> ergibt, wird eine 1 ausgegeben, anderenfalls eine 0.

Nicht ganz: wenn das Ergebnis der UND-Verknuepfung (hier steht ja die arithmetische/binaere und-Verknuepfung, nicht die logische) [mm] $\neq [/mm] 0$ ist, dann wird 1 ausgegeben, andernfalls 0.

> > Nach WENN muss doch normalerweise irgend eine Bedingung
> > kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist
> > das irgendwie nicht ersichtlich.
>  Anstelle von:
>  >     if(4711 & (0x8000>>i))
>  hätte man auch
>  if(4711 & (0x8000>>i)==1)

Das waer dann if(4711 & (0x8000>>i)!=0).

LG Felix


Bezug
        
Bezug
Bitmap ausgeben: Unterprogramm void aufrufen
Status: (Frage) beantwortet Status 
Datum: 13:18 Mo 06.06.2011
Autor: steftn

Aufgabe
Für die Ausgabe einer Bitmap steht das Unterprogramm PrintBitLine zu Verfügung:

void    PrintBitLine(unsigned short us)
{ int i;
  for(i=0; i<16; i++)
  { if(us & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }
}


Erstellen Sie ein Programm und kopieren Sie PrintBitLine vor das main-Unterprogramm. Rufen Sie PrintBitLine zehn mal auf mit den Werten [mm] 1,2,....2^i, [/mm] ....2^10 .

Hallo,

ich habe ein weiteres Problem. Wie kann ich einen Unterprogramm, also "void"-Programm aufrufen?

Mein selbsterstelltes Programm sieht bis jetzt so aus:


#include <stdio.h>
#include <stdlib.h>



void    PrintBitLine(unsigned short us)
{ int i;
  for(i=0; i<16; i++)
  { if(us & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }
}
int main()
{

unsigned short us0 =1,   us1 =2,   us2 =4,    us3 =8;
unsigned short us4 =16,  us5 =32,  us6 =64,   us7 =128;
unsigned short us8 =256, us9 =512, us10=1024;

printf ("%d", PrintBitLine (unsigned short us0));
printf ("%d", PrintBitLine (unsigned short us1));

// usw. bis (unsigned short us10)
    return 0;
}


Aber leider funktioniert das Programm so nicht.
Weiß jemand, wie ich das PrintBitLine als Unterprogramm mit den jeweiligen us0...us10-Werten aufrufen kann?

Wär super wenn ihr mir helfen könntet! Danke

Bezug
                
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 13:32 Mo 06.06.2011
Autor: MathePower

Hallo steftn,

> Für die Ausgabe einer Bitmap steht das Unterprogramm
> PrintBitLine zu Verfügung:
>  
> void    PrintBitLine(unsigned short us)
>  { int i;
>    for(i=0; i<16; i++)
>    { if(us & (0x8000>>i))
>        printf("1");
>      else
>        printf("0");
>    }
>   }
>  
>
> Erstellen Sie ein Programm und kopieren Sie PrintBitLine
> vor das main-Unterprogramm. Rufen Sie PrintBitLine zehn mal
> auf mit den Werten [mm]1,2,....2^i,[/mm] ....2^10 .
>  Hallo,
>  
> ich habe ein weiteres Problem. Wie kann ich einen
> Unterprogramm, also "void"-Programm aufrufen?
>  
> Mein selbsterstelltes Programm sieht bis jetzt so aus:
>  
>
> #include <stdio.h>
>  #include <stdlib.h>
>  
>
>
> void    PrintBitLine(unsigned short us)
>  { int i;
>    for(i=0; i<16; i++)
>    { if(us & (0x8000>>i))
>        printf("1");
>      else
>        printf("0");
>    }
>   }
>  int main()
>  {
>  
> unsigned short us0 =1,   us1 =2,   us2 =4,    us3 =8;
>  unsigned short us4 =16,  us5 =32,  us6 =64,   us7 =128;
>  unsigned short us8 =256, us9 =512, us10=1024;
>  
> printf ("%d", PrintBitLine (unsigned short us0));
>  printf ("%d", PrintBitLine (unsigned short us1));


Das UnterProgramm PrintBitLine hat den Rückgabetyp void,
gibt demnach nichts zurück. Die Ausgabe dieses Unterprogramms
geschieht in dem selbigen, so daß hier folgender Aufruf in der
main-Funktion erfolgen muss:

PrintBitLine(us0);


>  
> // usw. bis (unsigned short us10)
>      return 0;
>  }
>  
>
> Aber leider funktioniert das Programm so nicht.
>  Weiß jemand, wie ich das PrintBitLine als Unterprogramm
> mit den jeweiligen us0...us10-Werten aufrufen kann?
>  
> Wär super wenn ihr mir helfen könntet! Danke


Gruss
MathePower

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]