www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

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
Forum "C/C++" - Ein- und Ausgabe, Operatoren
Ein- und Ausgabe, Operatoren < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Ein- und Ausgabe, Operatoren: Aufgaben
Status: (Frage) beantwortet Status 
Datum: 12:31 Sa 19.06.2010
Autor: Amy-chan

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Aufgabe
1. Geben Sie
a) Ganze Zahlen (Typ int),
b) Reelle Zahlen (Typen float und double),
c) Zeichen (Typ char) und
d) Zeichenketten (Typ char [])
ein und anschließend gleich wieder aus. Nutzen Sie dafür die Möglichkeiten von C.

2. Gegeben sei die Zahl e=2.718281828.
Geben Sie e der Reihe nach mit 9,6,2,1 und 0 Nachkommastellen aus.
a) linksbündig,
b) rechtsbündig.

3. Gegeben ist eine dreistellige Zahl zahl (bitte eingeben).
Ermitteln Sie jeweils mit einer Anweisung die
a) Einerstelle,
b) Zehnerstelle,
c) Hunderterstelle
von zahl.

4. Gegeben ist die Zahl 0x3C55.
a) Testen Sie, ob das Bit 5 gesetzt ist?
b) Setzen Sie Bit 6, ohne die anderen Bits zu beeinflussen.
c) Löschen Sie Bit 7, ohne die anderen Bits zu beeinflussen.

5. In der Variablen var steht eine Ganzzahl (bitte eingeben).
a) Schalten Sie Bit 8 um, ohne die anderen Bits zu beeinflussen.
b) Schalten Sie alle Bits der Zahl um.

6. Gegeben sei ein Ganzzahl.
Multiplizieren bzw. dividieren Sie diese Zahl mit Zweierpotenzen unter Nutzung der
Shift-Operatoren.

Hallo,
habe hier ein Aufgabenblatt für meine Informatik-vorlesung..
komme damit leider nicht gut zurecht.. hoffe ihr könnt mir helfen? =)

zu a). eigentlich keine schwere aufgabe.. habe da nur zwei probleme:
1. double und float zeigen bei mir beide nur 5 nachkommastellen an

2. Aufgabenteil c klappt nicht =(
scanf("%c",&variable)
printf("%c",variable)
müsste doch eigentlich richtig sein oder?
hab natürlich variable deklariert..

zu b) hier funktioniert das mit dem linksbündig leider nicht, hab leider keine ahnung was falsch ist =(:

main (){
double e = 2.718281828;
printf("%-.9lf\n",e);
printf("%-.6lf\n",e);
printf("%-.2lf\n",e);
printf("%-.1lf\n",e);
printf("%-.0lf\n",e);
getch();
??>


zu den anderen aufgaben wäre es schön wenn ihr mir Tipps geben könntet wie ich überhaupt da ran gehe =( stehe vollkommen auf dem schlauch!!!

Liebe grüße Amy

        
Bezug
Ein- und Ausgabe, Operatoren: Antwort
Status: (Antwort) fertig Status 
Datum: 13:17 Sa 19.06.2010
Autor: fencheltee


> Eingabefehler: "{" und "}" müssen immer paarweise
> auftreten, es wurde aber ein Teil ohne Entsprechung
> gefunden (siehe rote Markierung)
>  
> 1. Geben Sie
>  a) Ganze Zahlen (Typ int),
>  b) Reelle Zahlen (Typen float und double),
>  c) Zeichen (Typ char) und
>  d) Zeichenketten (Typ char [])
>  ein und anschließend gleich wieder aus. Nutzen Sie dafür
> die Möglichkeiten von C.
>  
> 2. Gegeben sei die Zahl e=2.718281828.
>  Geben Sie e der Reihe nach mit 9,6,2,1 und 0
> Nachkommastellen aus.
>  a) linksbündig,
>  b) rechtsbündig.
>  
> 3. Gegeben ist eine dreistellige Zahl zahl (bitte
> eingeben).
>  Ermitteln Sie jeweils mit einer Anweisung die
>  a) Einerstelle,
>  b) Zehnerstelle,
>  c) Hunderterstelle
>  von zahl.

die kannst du etwa so auslesen:
1:
2: printf("einer: %d",e%10);
3: printf("\nzehner: %d",e%100/10);
4: printf("\nhunderter: %d",e/100);
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)



>  
> 4. Gegeben ist die Zahl 0x3C55.
>  a) Testen Sie, ob das Bit 5 gesetzt ist?

wenn int a=0x3C55;
dann kann man mit b=a>>5;
die bits in a um 5 stellen nach rechts schieben. nun steht die 5. stelle an 1. stelle. am ende muss noch eine maske drauf (bitweises "und"), um alles vor der 1. stelle abzuschneiden:
c=b&0x1;

>  b) Setzen Sie Bit 6, ohne die anderen Bits zu
> beeinflussen.

auch hier muss man mit masken arbeiten.
da wir 4 hexblöcke haben, entspricht eine maske, die die 6. stelle aussortiert, in binär:
1111 1111 1101 1111
das wird nun in hex umgewandelt, dann machst du wie oben entsprechend
b=a&0x...
um die 6. stelle zu setzen wird nun mit einem "oder" gearbeitet:
b=b|(f << 6)
wenn in "f" der wert der zu setzenden stelle steht

>  c) Löschen Sie Bit 7, ohne die anderen Bits zu
> beeinflussen.

bit löschen geht mit ner "und"maske - analog zu oben

>  
> 5. In der Variablen var steht eine Ganzzahl (bitte
> eingeben).
>  a) Schalten Sie Bit 8 um, ohne die anderen Bits zu
> beeinflussen.

umschalten? also negieren wahrscheinlich..

8. bit nach rechts schieben und mit der 0x1 maske filtern.. negiert wird mit a=~a;

wie es dann an 8. stelle wieder eingefügt wird mit dem "oder" steht ja oben bereits

>  b) Schalten Sie alle Bits der Zahl um.

alle zahlen direkt negieren klingt zu einfach irgendwie. wie es geht, steht bei a)

>  
> 6. Gegeben sei ein Ganzzahl.
>  Multiplizieren bzw. dividieren Sie diese Zahl mit
> Zweierpotenzen unter Nutzung der
>  Shift-Operatoren.

ein linksshift (also z.b. a << 1) bewirkt eine multiplikation mit 2^1, ein shift a<<2 eine multiplikation mit 2^2.
analog dazu geht es mit dem rechtsshift (=division)

>  Hallo,
> habe hier ein Aufgabenblatt für meine
> Informatik-vorlesung..
>  komme damit leider nicht gut zurecht.. hoffe ihr könnt
> mir helfen? =)
>  
> zu a). eigentlich keine schwere aufgabe.. habe da nur zwei
> probleme:
>  1. double und float zeigen bei mir beide nur 5
> nachkommastellen an
>  
> 2. Aufgabenteil c klappt nicht =(
>  scanf("%c",&variable)
>  printf("%c",variable)
> müsste doch eigentlich richtig sein oder?
>  hab natürlich variable deklariert..
>  
> zu b) hier funktioniert das mit dem linksbündig leider
> nicht, hab leider keine ahnung was falsch ist =(:
>  
> main (){
>  double e = 2.718281828;
>  printf("%-.9lf\n",e);
>  printf("%-.6lf\n",e);
>  printf("%-.2lf\n",e);
>  printf("%-.1lf\n",e);
>  printf("%-.0lf\n",e);
>  getch();
>  ??>
>  

mit dem optischen kram kenn ich mich leider nicht so aus ;-)

>
> zu den anderen aufgaben wäre es schön wenn ihr mir Tipps
> geben könntet wie ich überhaupt da ran gehe =( stehe
> vollkommen auf dem schlauch!!!
>  
> Liebe grüße Amy


gruß tee

Bezug
        
Bezug
Ein- und Ausgabe, Operatoren: Antwort
Status: (Antwort) fertig Status 
Datum: 14:59 So 20.06.2010
Autor: Event_Horizon

Hallo!

grundsätzlich stimme ich meinem Vorredner zu, ich würde allerdings dazu tendieren, den Bittest so zu machen:


if(a & (1<<4)){
  printf("4. Bit gesetzt");
}

Das ist etwas leichter zu lesen, und der Compiler ersetzt (1<<4) direkt durch den Wert 8, denn das ist ja ne Konstante.


Zu den anderen Fragen:




> zu a). eigentlich keine schwere aufgabe.. habe da nur zwei
> probleme:
>  1. double und float zeigen bei mir beide nur 5
> nachkommastellen an

Das ist Standard. Mehr bekommst du erst dann, wenn du explizit danach verlangst!


>  
> 2. Aufgabenteil c klappt nicht =(
>  scanf("%c",&variable)
>  printf("%c",variable)
> müsste doch eigentlich richtig sein oder?
>  hab natürlich variable deklariert..

Das Char ist etwas besonderes. Es ist einerseits eine Variable von 1Byte länge, andererseits wird es für zeichen benutzt. Das '@' entspricht z.B. dem Wert 64, und das große Alphabet ABC... hat die Werte 65, 66, 67, ...
Was welchem Wert entspricht, kannst du aus ner ASCII-Tabelle erfahren, die du im Netz findest.

Ich vermute grade einfach, daß das printf keine Zahl von dir verlangt, sondern ein einzelnes Zeichen. Wirf ihm doch mal @ vor!


>  
> zu b) hier funktioniert das mit dem linksbündig leider
> nicht, hab leider keine ahnung was falsch ist =(:

Linksbündig wird das auf jeden Fall (mit einem Leerzeichen, das ggf ein negatives Vorzeichen aufnimmt)
Du meinst eher rechtsbündig.

Ein %.3f liefert eine Zahlenausgabe mit drei Stellen hinter dem Komma. Das kennst du ja schon.

Ein %8f liefert dir eine Zahlenausgab, die auf jeden Fall 8 Zeichen lang ist, bei nem Float/Double also jede Menge nachkommastellen.

Ein %8.3f liefert dir eine Ausgabe, die 8 Zeichen lang ist, und drei Nachkommastellen hat. Der Rest wird links (!!!) mit Leerzeichen aufgefüllt. Beachte, daß die 8 alles mitzählt, inklusive dem Dezimalpunkt und dem Vorzeichen.

Ein %08.3f sorgt übrigens dafür, daß mit Nullen statt Leerzeichen aufgefüllt wird.



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


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]