matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

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
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. Informatik • Physik • Technik • Biologie • Chemie
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.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]