Queue mit Fließkommazahlen



  • Mach doch selber :p





  • Danke für die bisherigen Einträge. Das return hab ich eingefügt. Jedoch wird mir bei allen "->" Operatoren in der dequeue-Funktion vom Compiler invalid type of argument ausgegeben.
    Zudem zeigt mir der Compiler bei der front-Fuktion an, dass das mit ptr->erst nicht geht. Was heißt denn genau mein erstes Element in der Queue?

    MfG
    Neuerneuneu



  • ich hab wenig lust mir das anzuschauen wenn du willst das ich da mal drüber schau beschäftige dich mal mit deinem Programmierstil einen anfangs link findest

    http://de.wikipedia.org/wiki/Programmierstil
    http://de.wikipedia.org/wiki/Einr%C3%BCckungsstil

    wenn du damit fertig bist und nen sauberen quellcode hast dann poste den doch nochmal. dann geht sicher was vorwärts...

    kleine anmerkungen über du dir gedanken machen solltest
    1. Fliesskommazahl wird nirgends beschrieben
    float Fliesskommazahl;

    2. rückgabe von malloc wird nicht gecastet und nicht überprüft ob es NULL ist
    erst->next=(struct Queueelement 😉 malloc(sizeof(struct Queueelement));



  • achso und ptr->erst gibt es nicht...

    und sowas geht auch nicht
    printf("Die erste Zahl in der Queue ist die %f.",ptr->erst);

    eher
    printf("Die erste Zahl in der Queue ist die %f.",ptr->Fliesskommazahl);



  • aber das machst am besten alles nochmal neu...

    lg lolo



  • ich war mal so nett und hab das für dich übernommen auch wenns nicht das gelbe vom ei ist und ;fricky sicher nicht gefällt 🤡

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct _fifoNode{
    	float value;
    	struct _fifoNode *next;
    }fifoNode;
    
    typedef struct _fifo{
    	fifoNode *first;
    	fifoNode *last;
    }fifo;
    
    int push(fifo *stack,float data){
    	fifoNode *n = malloc(sizeof(fifoNode));
    	if(n!=NULL){
    		n->next = NULL;
    		n->value = data;
    		if(stack->last==NULL){
    			stack->last = stack->first = n;
    		}else{
    			stack->last->next = n;
    			stack->last = n;
    		}
    		return 1;
    	}
    	printf("buffer overrun");
    	return 0;
    }
    
    float pop(fifo *stack){
    	fifoNode *n = stack->first;
    	float ret = 0;
    	if(n!=NULL){
    		stack->first = n->next;
    		if(stack->first == NULL)
    			stack->last = NULL;
    		ret = n->value;
    		free(n);
    	}else{
    		printf("buffer underrun");
    	}
    	return ret;
    }
    
    int main(void) {
    	fifo stack;
    	stack.first = NULL;
    	stack.last = NULL;
    	push(&stack,1.0);
    	push(&stack,2.0);
    	push(&stack,3.0);
    	push(&stack,4.0);
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	push(&stack,1.0);
    	push(&stack,2.0);
    	push(&stack,3.0);
    	push(&stack,4.0);
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	printf("%f\n",pop(&stack));
    	return 0;
    }
    


  • noobLolo schrieb:

    ...und ;fricky sicher nicht gefällt

    hihi, was mir nicht gefällt ist: du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo' *fg* und eigentlich hast du eine queue aus verketteten listen gebaut.
    aber wenigstens castest du 'malloc' nicht und testest sogar auf 0. *daumen_hoch*
    🙂



  • Vielen Dank für deinen Einsatz nooblolo.
    Leider ist nur die Struktur, die ich hatte, mit:

    struct Queue{};
    struct Queueelement{};
    struct Queue q;

    void enqueue(struct Queue *q, float z);
    float dequeue(struct Queue *q);
    float front(struct Queue q);

    schon vorgegeben.
    Ich verzweifle einfach an der Aufgabe.

    MfG
    Neuerneuneu



  • Neuerneuneu schrieb:

    Leider ist nur die Struktur, die ich hatte, mit:
    ...
    schon vorgegeben.

    dann nimm doch noobLolos code und tausch' einfach die bezeichner aus.
    🙂



  • Das wäre einen Versuch Wert.
    Nur weiß ich nich genau, wo nooblolo:
    struct Queue q;
    benutzt.

    Außerdem zeigt mir der Compiler hier:

    int push(fifo *stack,float data){ 
        fifoNode *n = malloc(sizeof(fifoNode));
    

    einen Fehler an: invalid conversion from `void*' to `fifoNode*'.

    MfG
    Neuerneuneu



  • Neuerneuneu schrieb:

    Nur weiß ich nich genau, wo nooblolo:
    struct Queue q;
    benutzt.

    das macht er am anfang der main:

    int main(void) 
    {
       fifo stack;  // <--- Queue q 
       ...
    

    Neuerneuneu schrieb:

    ...einen Fehler an: invalid conversion from `void*' to `fifoNode*'.

    du benutzt wahrscheinlich einen c++-compiler, das typsystem von C++ hat hier eine leicht hirnrissige einschränkung. benenn deinen code in .C um, dann sollte deine IDE den C-compiler anwerfen.
    🙂



  • ;fricky schrieb:

    du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo'

    😮 das hatte ich irgendwie falsch in erinnerung dachte ein stack kann entweder fifo oder lifo sein

    Neuerneuneu schrieb:

    Außerdem zeigt mir der Compiler hier: ... invalid conversion from `void*' to `fifoNode*'.

    du quälst meinen code aber nicht durch nen c++ compiler oder?



  • Sry war mein Fehler.
    Jetzt funktionierts!!!!
    Vielen Dank Jungs, habt mir echt sehr geholfen!
    Guten Rutsch!^^

    MfG
    Neuerneuneu



  • noobLolo schrieb:

    ;fricky schrieb:

    du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo'

    😮 das hatte ich irgendwie falsch in erinnerung dachte ein stack kann entweder fifo oder lifo sein

    mir sind nur stacks bekannt, die das zuletzt 'gepushte' element als erstes wieder ausspucken. 'fifo-stacks' kenne ich nicht, aber vielleicht solltest mal besser die informatiker hier fragen.
    🙂



  • ;fricky schrieb:

    'fifo-stacks' kenne ich nicht

    ja wikipedia hat mich auch schon eines besseren belehrt 😉

    scheint so als wär

    queue = fifo
    stack = lifo

    naja nächstes mal weiß ichs hoffentlich 🙂


Anmelden zum Antworten