Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche dringend Hilfe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.06.2005, 15:54 Uhr
Xanthi24



Hab zwei Aufgaben die ich unbedingt lösen muss bin jedoch c-neuling und kann noch nicht richtig mit c umgehen !!!hab mir jetzt unter linux k-develop eingerichtet und bräuchte zu den folgenden Aufgaben euren Rat!!!
das eine ist ein histogramm bei dem ich selber schon sehr weit gekommen bin !!
das andere soll ein ringpuffer sein was ich allerdings überhaupt nicht kapiere!!!
danke!!





Histogramm
Erstellen Sie ein ANSI-C-Programm, mit dem ein Histogramm von Prüfungsnoten ermittelt und in folgender Form auf dem Bildschirm ausgegeben werden kann:

Histogramm der Noten
|
|
|
|
|
|
|
|
|
|
|
|
|
| *
| * * *
| * * * * *
| * * * * * *
| * * * * * * * * *
| * * * * * * * * * * * *
| * * * * * * * * * * * * *
--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 10 11 12
Die Noten werden bei der Eingabe in Kategorien (0 bis 12) eingeteilt und zwar nach folgenden Schema:
Noten: 1.0 1.3 1.7 2.0 2.3 2.7 3.0 3.3 3.7 4.0 4.3 4.7 5.0
Kategorie: 0 1 2 3 4 5 6 7 8 9 10 11 12
Damit die gesamte Bildschirmausgabe sichtbar ist, ist bei Noten, deren Auftritte die Anzahl 20 überschreitet die Ausgabe auf 19 Sternchen zu begrenzen und an der Position des 20. (obersten) Sternchens die tatsächliche Anzahl der Auftritte auszugeben.
Die Noten stehen in einer Textdatei namens noten.dat, jeweils eine Note pro Zeile. Das Programm öffnet die Datei und liest alle Noten (bis EOF). Danach wird die Datei geschlossen und das Histogramm ausgegeben.
Hinweise zur Lösung :
Die Eingabe besteht aus drei Zeichen. Prüfen Sie die Eingabe auf korrekte Noten gemäß obiger Skala und geben Sie eine Fehlermeldung bei Falscheingaben aus (der Eingabewert wird dann ignoriert).
Legen Sie zur Aufnahme der Auftritte der einzelnen Noten ein int-Array an, dessen Komponenten zweckmäßigerweise über die Noten-Kategorie indiziert werden.
Die Bildschirmausgabe darf nicht über eine absolute Cursor-Positionierung erfolgen.
Zum Test erstellen Sie die Datei noten.dat im Projektverzeichnis (dort, wo sich auch main.c befindet.



Ringpuffer mit Zeigern
Ein Ringpuffer ist ein nach dem FIFO-Prinzip (first-in-first-out) organisierter Speicher zur Pufferung von Daten, die z. B. von einem Meßdatenerfassungsprogramm "angeliefert" werden, und zeitversetzt von einem Auswertungsprogramm weiterverarbeitet werden. Auch in der Betriebssystemsoftware für Netzwerkinterfaces und für die Datenfernübertragung finden Ringpuffer Verwendung.

Der Puffer muß groß genug sein, damit er auch bei maximalem Zeitversatz nicht "überläuft". Durch Realisierung als lineare Liste ist dieser Fall immer gegeben, da man zu der Liste immer neue Elemente hinzufügen kann (jedenfalls, solange noch Arbeitsspeicher vorhanden ist).
Es muß dafür gesorgt werden, daß aus einem leeren Puffer nicht mehr gelesen wird -> Meldung "Puffer leer".
Die Abbildung des Rings in einem linear adressierten Speicher geschieht dadurch, dass ein am Pufferende angekommener Zeiger wieder an den Anfang gesetzt wird. Das Letze Element der Lister verweist also wieder auf das erste.
Der Ringpuffer soll für die Verwaltung einer ständig wechselnden Anzahl von Nachrichten verwendet werden, wie es z. B. bei E-Mails der Fall ist. Die Nachrichten treffen als Texte unterschiedlicher Länge ein. Um sie effektiv zu verwalten und zu speichern, liegt die Verwendung von verketteten Listen nahe. Um aus diesen Listen einen Ringpuffer zu machen, muß folgendermaßen vorgegangen werden:
Eine neue Nachricht hängt sich an die vorherige "dran" - die Kette wird länger.
Die Kette soll immer zu einem Ring geschlossen sein, damit z. B. nach dem Lesen der neuesten Nachricht als nächstes eine Wiederholung alter Nachrichten bei der ältesten beginnen kann.
Zu einer effektiven Speicherverwaltung gehört auch das Beschaffen von Speicherplatz erst dann wenn er benötigt wird (malloc()) und Freigeben beim Löschen von Einträgen (free()).
Es wird bei der ältesten Nachricht begonnen. Im Verlauf des Programms wird die jeweils aktuelle Nachricht angezeigt. Zur Interaktion mit dem Benutzer bietet das Hauptprogramm folgendes Menü an:
"D": Nachricht löschen (Delete)
" ": (Leertaste) Nächste Nachricht
"Q": Programm verlassen (Quit)
"X": alle Nachrichten löschen
Nur zum Zweck der Simulation des Nachrichtenempfangs wird noch ein weiterer Menüpunkt benötigt:
"E": Nachricht eingeben. Nun kann eine Textzeile eingegeben werden. Das neue Listenelement wird an der aktuellen Listenposition eingefügt.
Der Pufferzustand soll ständig erkennbar sein, d. h. in einer sog. Statuszeile wird die Zahl alter/neuer (= gelesener/ungelesener) Nachrichten angezeigt
a. Beginnen Sie bei der Datenstruktur, die aus einer Textzeile von max. 80 Zeichen und einem Pointer auf das nächste Element besteht. Skizzieren Sie den Puffer in verschiedenen Betriebszuständen und tragen Sie die jeweiligen Hilfs-Zeiger sowie die typischen Verkettungen ein:
b. ganz am Anfang und nach der ersten Nachricht
c. nach einigen Schreibvorgängen
d. nach einigen Leseoperationen
e. vor/nach Löschvorgängen
f. Überlegen Sie,
g. welche Variablen benötigt werden,
h. welche elementaren Funktionen gebraucht werden,
i. welche der Variablen ggf. global (außerhalb aller Funktionen) vereinbart werden müssen, damit sie auf einfache Weise von den verschiedenen Funktionen benutzt werden können (möglichst wenige!),
j. auf welche Weise Funktionsresultate an die aufrufende Funktion übergeben werden sollen,
k. welche Funktion welche Überprüfungen durchführen soll
l. Zeichnen Sie die Struktogramme der benötigten Funktionen zum Initialisieren, Schreiben, Lesen und Löschen der Puffereinträge.
m. Erst jetzt wird der C-Quellcode geschrieben und alles getestet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.06.2005, 17:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hier mal ein ansatz...

aus der datei auslesen und nur die zahl ausgeben wenn überschritten wird bekommst du bestimmt hin (wenn nicht ist dir auch nicht mehr zu helfen...)


C++:
void paintHist(size_t *values,size_t n, size_t maxheight){
    
    size_t i,j;

    putchar('|');
    for(i=0;i<n;++i){
        printf("%3d",values[i]);
    }
    putchar('\n');
    

    while(--maxheight){
        putchar('|');
        for(i=0;i<n;++i){
            printf("  ");
            putchar(values[i]>=maxheight?'*':' ');
        }
        putchar('\n');
    
    }

    putchar('+');
    for(i=0;i<n;++i)
        printf("--+");
    putchar('\n');
    
    putchar(' ');
    for(i=0;i<n;++i)
        printf("%3d",i);
    putchar('\n');
    

}


int main(){
    size_t x[]={10,20,30,4,6,9,8,8,9,1,12,34,45};
    paintHist(x,sizeof(x)/sizeof(*x),20);
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 08.06.2005 um 17:10 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.06.2005, 01:44 Uhr
Xanthi24



ist das egal ob ich c oder c++ benutze!???
ich programmiere in k develop unter linux
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.06.2005, 02:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

ist das egal ob ich c oder c++ benutze!???


Diese Frage musst du dir schon selber beantworten was du davon verwenden willst?

Ich hab von Linux soviel Ahnung wie mein Oma vom Internet aber wenn mich nicht alles täuscht ist k develop lediglich eine Entwicklungsumgebung und hat zunächst mit dem Compiler den du verwendest nichts zu tun
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: