www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
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++" - C - Variable und deren Grenzen
C - Variable und deren Grenzen < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

C - Variable und deren Grenzen: Angabe von Unter- u. Obergr.
Status: (Frage) beantwortet Status 
Datum: 20:15 Sa 19.04.2008
Autor: StefanBS

Aufgabe
Hier die Aufgabenstellung:

Schreiben Sie ein Programm, das eine Variable für die Datentypen char, unsigned char, int, unsigned int, short, long, float und double anlegt und jeweils ihre Ober- und Untergrenzen angibt. Verwenden Sie dafür die Konstanten in den  header-Dateien <limits.h> und <float.h>. Des weiteren soll die Anzahl der jeweiligen verbrauchten Bytes unter Verwendung des sizeof()-Operators angegeben werden. Außerdem soll die Adresse jeder Variablen, ihr Name und der Variableninhalt ausgegeben werden.
Erzeugen Sie aus diesen Informationen eine formatierte Tabelle, die etwa folgendes Aussehen haben soll:
Datentyp | Name | Adresse |  Inhalt | Bytes | Untergrenze | Obergrenze
----------------------------------------------------------------------------------------------
    char    |    c1    |  689678  |    'a'    |    1     |       -128       |        127      
----------------------------------------------------------------------------------------------
u.s.w.
Dies war ein Beispiel dafür wie eine Zeile für char aussehen würde. Komplettieren Sie die Tabelle für alle oben angegebenen Datentypen. Zu grosse Zahlen geben Sie dabei im e-Format mit zwei Nachkommastellen an. Den Ausdruck "unsigned" können Sie mit "u." abkürzen, damit die Zeilen nicht zu breit werden.

Hallo,
ich habe vor kurzem mit der Programmiersprache C begonnen und folgende Hausaufgabe zu Freitag zu erledigen. Leider wurde die Aufgabenstellung im Unterricht nicht erklärt, vielmehr der Hinweis gegeben, dass wir uns das Wissen ja im Internet aneignen könnten. Das habe ich zumindest versucht und nachfolgenden Quelltext erzeugt. Entschuldigt bitte, den langen Text, aber sonnst wüsste ich auch nicht, wen ich diesbezüglich fragen könnte, da meine Mitschüler auch völlig verzweifelt sind.

Meine Frage dazu wäre folgende:
Wie erhalte ich für unsigned int bzw. unsigned char eine Untergrenze?
Allgemein möchte ich auch Fragen, ob ich die Aufgabe halbwegs richtig bearbeitet habe oder das Aufgabenziel möglicherweise verfehlt habe bzw. welche Fehler noch im Quelltext sind?

Vorab schon mal vielen Dank, auch schon dafür, das Ihr meine Frage bis hierhin gelesen habt.

----------------------------------------
#include <stdio.h>
#include <limits.h>
#include <float.h>

int main(void) {

// Zeichen
char c1 = 'a';
unsigned char uc1 = [mm] '\x84'; [/mm]

// Ganzzahlen
short i1 = 5;
int i2 = 11;
unsigned int i3 = 100;
long i4 = -6;

// Gleitkommazahlen
float f1 = 3.4;
double d1 = 200.56;

[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" Datentyp | Name | Adresse | Inhalt | Bytes     | Untergrenze | [mm] Obergrenze\n"); [/mm]
[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12i [mm] |%12i\n", [/mm] "char", "c1", &c1, c1, sizeof(char), CHAR_MIN, CHAR_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12i [mm] |%12i\n", [/mm] "u char", "uc1", &uc1, uc1, sizeof(unsigned char), CHAR_MAX, UCHAR_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12i [mm] |%12i\n", [/mm] "short", "i1", &i1, i1, sizeof(short), SHRT_MIN, SHRT_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12i [mm] |%12i\n", [/mm] "int", "i2", &i2, i2, sizeof(int), INT_MIN, INT_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12i [mm] |%12i\n", [/mm] "u int", "i3", &i3, i3, sizeof(unsigned int), INT_MIN, UINT_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6c | %9i |%12li [mm] |%12li\n", [/mm] "long", "i4", &i4, i4, sizeof(long), LONG_MIN, LONG_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6G | %9.2e |%12.2e [mm] |%12.2e\n", [/mm] "float", "f1", &f1, f1, sizeof(float), FLT_MIN, FLT_MAX);


[mm] printf("---------------------------------------------------------------------------\n"); [/mm]
printf(" %-8s | %4s | %ld | %6G | %9.2e |%12.2e [mm] |%12.e\n", [/mm] "double", "d1", &d1, d1, sizeof(double), DBL_MIN, DBL_MAX);
[mm] printf("---------------------------------------------------------------------------\n"); [/mm]

return 0;
}
------------------------

        
Bezug
C - Variable und deren Grenzen: Antwort
Status: (Antwort) fertig Status 
Datum: 21:54 Sa 19.04.2008
Autor: andihit


> Meine Frage dazu wäre folgende:
>  Wie erhalte ich für unsigned int bzw. unsigned char eine
> Untergrenze?

unsigned heißt, dass das Vorzeichen nicht gespeichert wird.
Daher ist die Untergrenze 0, und die Obergrenze wird entsprechend höher.

(steht als Kommentar auch in der limits.h: "/* Maximum value an 'unsigned char' can hold.  (Minimum is 0.)  */", bzw. "/* Maximum value an 'unsigned int' can hold.  (Minimum is 0.)  */")

>  Allgemein möchte ich auch Fragen, ob ich die Aufgabe
> halbwegs richtig bearbeitet habe oder das Aufgabenziel
> möglicherweise verfehlt habe bzw. welche Fehler noch im
> Quelltext sind?

Ich sehe keinen Fehler. Man könnte den wiederkehrenden Code zwar in eine Funktion auslagern, aber das ist ja nicht Teil der Aufgabenstellung.

Bezug
                
Bezug
C - Variable und deren Grenzen: Bedeutung der Warnhinweise
Status: (Frage) beantwortet Status 
Datum: 20:15 So 20.04.2008
Autor: StefanBS

Aufgabe
Kompilierung läuft...
h2_ss08.cpp
[mm] c:\programme\microsoft [/mm] visual [mm] studio\myprojects\h2_ss08\h2_ss08.cpp(29) [/mm] : warning C4305: 'initializing' : Verkuerzung von 'const double' in 'float'
Linker-Vorgang läuft...

h2_ss08.exe - 0 Fehler, 1 Warnung(en)

Danke für die schnelle Antwort. Würde jetzt aber noch gerne wissen, was die oben angegebene Meldung zu bedeuten hat, bzw. was ich machen kann, damit diese nicht mehr erscheint.

Danke.

Bezug
                        
Bezug
C - Variable und deren Grenzen: Antwort
Status: (Antwort) fertig Status 
Datum: 21:14 Mo 21.04.2008
Autor: rainerS

Hallo!

> Kompilierung läuft...
>  h2_ss08.cpp
>  c:\programme\microsoft visual studio\myprojects\h2_ss08\h2_ss08.cpp(29) : warning C4305: 'initializing' : Verkuerzung von 'const double' in 'float'
>  Linker-Vorgang läuft...
>  
> h2_ss08.exe - 0 Fehler, 1 Warnung(en)
>  Danke für die schnelle Antwort. Würde jetzt aber noch
> gerne wissen, was die oben angegebene Meldung zu bedeuten
> hat, bzw. was ich machen kann, damit diese nicht mehr
> erscheint.

Du schreibst nicht, welche Zeile es ist, die der Compiler beklagt, aber ich vermute einfach mal, es handelt sich um diese:

 float f1 = 3.4; 

3.4 ist eine Konstante vom Typ double; wenn du sie einer Variablen vom Typ float zuweist, geht Genauigkeit verloren. Du solltest statt dessen

 float f1 = 3.4f; 

schreiben, denn 3.4f bedeutet 3.4 als Konstante vom Typ float.

Viele Grüße
  Rainer

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


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