Zum Inhalt springen

durst99

Mitglieder
  • Gesamte Inhalte

    16
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von durst99

  1. Hallo Ich habe versucht ein Programm für einen Binärbaum zu schreiben, jedoch stürzt mir das Programm beim Eingeben/Ausgeben mancher Folgen Elementen immer ab mit einem Fehler in der ntdll.dll Z.b wenn ich 3 neue Nodes eingebe : 9 , 1 , 10 Ich vermute der Fehler liegt wohl in der insertNode Funktion. Habe hier mal den Code : Ich bedanke mich jetzt schonmal. #include<stdio.h> #include<stdlib.h> struct Node { int element; struct Node *left,*right; }*root; typedef struct Node *node; typedef int ElementType; node insertNode(ElementType, node); void display(node, int); void main() { char ch; ElementType a; while(1) // Hauptmenü mit Auswahlmöglichkeiten { printf("\n<e>... Element Einfuegen\n<a>... Sortierte Ausgabe\n<x>... Programm beenden\n\nWarte auf Auswahl : \n----------------------------\n"); scanf("%s",&ch); switch(ch) { case 'e': printf("\nGeben Sie ein Element ein : "); scanf("%d", &a); root = insertNode(a, root); break; case 'a': if(root==NULL) printf("\n Baum ist leer!"); else display(root, 1); break; case 'x': exit(0); default: printf("ERROR ! Unzulaessige Eingabe"); } } } //---------------------------------------------------------------------------------- INSERT node insertNode(ElementType x,node t) { if(t==NULL) { t = (node)malloc(sizeof(node)); t->element = x; t->left = t->right = NULL; } else { if(x > t->element) t->left = insertNode(x, t->left); else if(x < t->element) t->right = insertNode(x, t->right); } return t; } //---------------------------------------------------------------------------------- AUSGABE void display(node t,int level) { int i; if(t) { display(t->right, level+1); printf("\n"); for(i=0;i<level;i++) printf(" "); printf("%d", t->element); display(t->left, level+1); } }
  2. Alles klar, funktioniert wunderbar so. Danke.
  3. Hab mir jetzt mal die Möglichkeiten durchgelesen wie man das umsetzen kann und hab dann folgendes gemacht : char *eingabe(char *s,size_t w) { return fgets( s,w,stdin ); } void main() { char input[50]; eingabe(input,sizeof input); }
  4. Nein schon rein C , ohne den string.h header.
  5. Hm Also mit Zeigern kenn ich mich noch nicht wirklich aus. Kann mir jemand einen kleinen Ansatz geben ?
  6. Hallo Angenommen ich habe eine Eingeabefunktion : char eingabe() Das Char Array ist wie folgt deklariert : char input [50] Dort lese ich eine Zeichenkette ein : scanf("%s",input); Z.b : 2,3,4,+,+ ( Soll eine Postfix Auswertung machen ). Und dann returne ich es : return input; Jetzt möchte ich das eingelesene Char Array in der int main () wieder aufrufen. Dazu habe ich : input = eingabe() verwendet. Leider funktioniert die Sache so nicht. Bekomme dann vom Compiler die Fehlermeldung : error: incompatible types when assigning to type ‘char[50]’ from type ‘char’ Wie funktioniert die Sache ? Wenn ich alles in der main Funktion einlese funktioniert das Programm wunderbar, leider funktioniert das übergeben vom Char Array nicht.
  7. Funktioniert leider immer noch nicht. Verstehe nicht wirklich was in der main falsch ist.
  8. Gut das sehe ich ein ja. Aber was ist dann in der for schleife oben falsch, dass immer status 0 returned wird ? for (i=0; i<=groesse_; i++) { if((schachbrett_[zeile][i]==1)&&(i!=spalte)) //Zeile { status=1; } else if(((spalte-i)>=0)&&((zeile-i)>=0)&&(schachbrett_[zeile-i][spalte-i]==1))//Diagonale links hinauf { status=1; } else if(((spalte-i)>=0)&&((zeile+i)<=groesse_)&&(schachbrett_[zeile+i][spalte-i]==1))//Diagonale links hinunter { status=1; } else if(((spalte+i)<=groesse_)&&((zeile-i)>=0)&&(schachbrett_[zeile-i][spalte+i]==1))//Diagonale rechts hinauf { status=1; } else if(((spalte+i)<=groesse_)&&((zeile+i)<=groesse_)&&(schachbrett_[zeile+i][spalte+i]==1))//Diagonale rechts hinunter { status=1; } else { zahl=zahl+1; status=0; printf("kein konflikt %i\n", zahl); } } return status;
  9. Aber warum ? Meine Conflict Bedingungen müssten doch eigendlich passen.
  10. soll "return status " heißen. Hatte den 1er noch von der Fehlersuch drinnen.
  11. Sry für die ungenau Beschreibung. Hatte in der Früh nicht viel Zeit den Code zu posten. Es geht darum, dass mir das Programm hier : else { status=0; printf("kein konflikt %i\n", zahl); } In einer Endlosschleife hängen bleibt. Es geht bei der Funktion "conflictFeld" um die Überprüfung, ob sich in den Diagonalen, bzw. in der selben Zeile schon eine Dame befindet. Ist dort eine soll "status" den Wert 1 liefern , ist dort keine soll es 0 liefern. So wäre zumindest meine Überlegung gewesen.
  12. Hallo Habe ein Problem mit meinem Programm, welches das " 8 Damen Problem " lösen soll. Der Algorithmus ist relativ einfach mit Backtracking gemacht, leider funktioniert das Programm nicht wirklich. Wäre echt super wenn mal jemand drüber schauen könnte. Hier ist der Code : #include <stdio.h> #define MAX 50 int schachbrett_[MAX][MAX]; //globale Variablen int zeile_, spalte_,groesse_; //INITIALISIERUNG void initProgram () { int i,j; //Laufvariablen Arrayinitialisierung for(i=0;i>=MAX;i++) //Initialisierung Array { for(j=0;j>=MAX;j++) { schachbrett_[i][j]=0; } } //restliche Initialisierung zeile_=0; spalte_=0; groesse_=0; } //EINGABEFUNKTION GROESSE SCHACHBRETT int eingabeGroesse () { int eingabe = 1; int groesse; printf("\n\nErklaerung: Das Programm erstellt ein Schachbrett mit der von Ihnen eingegebenen Groesse (max. 50) und probiert in jede Spalte eine Dame zu setzen, mit der Bedingung das sich die Damen nicht schlagen koennen\n\n\n\n"); while(eingabe) { printf("Geben sie die Groesse des Schachbrettes an (zwischen 1 und 50):"); scanf("%i", &groesse); if((groesse>MAX)|(groesse<1)) { printf("Falsche Eingabe, erneut eingeben\n\n"); eingabe=1; } else { eingabe=0; } } return groesse; } //FUNKTION ZUM SETZEN EINES WERTES IM ARRAY void setzeDame(int zeile, int spalte) { schachbrett_[zeile][spalte]=1; ausgabeStdio(groesse_); printf("\n\n\n"); getchar(); } //FUNKTION ZUM BESTIMMEN DER POSITION EINER DAME IN EINER SPALTE int posiDame(int spalte) { int i; //Laufvariable int posi; for(i=0; i<=groesse_; i++) { if(schachbrett_[i][spalte]==1) { posi=i; } else { printf("keine Position gefunden"); } } return posi; } //FUNKTION ZUM LÖSCHEN EINER DAME void removeDame (int spalte, int zeile) { schachbrett_[zeile][spalte]=0; } //FUNKTION ZUM ERMITTELN EINES KONFLIKTES BEIM SETZEN EINER DAME int conflictFeld (int spalte, int zeile) { int i; //Laufvariable int status; //Statusvar. wenn 1 konflikt wenn 0 Dame kann gesetzt werden int zahl = 0; for (i=0; i<=groesse_; i++) { if((schachbrett_[zeile][i]==1)&&(i!=spalte)) //Zeile { status=1; } else if(((spalte-i)>=0)&&((zeile-i)>=0)&&(schachbrett_[zeile-i][spalte-i]==1))//Diagonale links hinauf { status=1; } else if(((spalte-i)>=0)&&((zeile+i)<=groesse_)&&(schachbrett_[zeile+i][spalte-i]==1))//Diagonale links hinunter { status=1; } else if(((spalte+i)<=groesse_)&&((zeile-i)>=0)&&(schachbrett_[zeile-i][spalte+i]==1))//Diagonale rechts hinauf { status=1; } else if(((spalte+i)<=groesse_)&&((zeile+i)<=groesse_)&&(schachbrett_[zeile+i][spalte+i]==1))//Diagonale rechts hinunter { status=1; } else { zahl=zahl+1; status=0; printf("kein konflikt %i\n", zahl); } } return 1; } //FUNKTION ZUR AUSGABE IM STDIO int ausgabeStdio(int seitenlaenge) { int i,j; //Laufvariablen for (i=0;i<=(seitenlaenge-1);i++) //Durchlauf Spalte { printf("\n"); //Neue Zeile for (j=0;j<=(seitenlaenge-1);j++) //Durchlauf Zeile { printf("|%4i|",schachbrett_[i][j]); } } } //HAUPTPROGRAMM int main() { initProgram(); //Initialisierung groesse_=eingabeGroesse(); //Eingabe Groesse zeile_=0; //Startposition spalte_=0; //Algorithmus while ((spalte_>=0)&&(spalte_<=groesse_)) { while ((zeile_<groesse_) && conflictFeld(zeile_,spalte_)) { zeile_=zeile_+1; if(zeile_<groesse_) { setzeDame(zeile_,spalte_); spalte_=spalte_+1; zeile_=0; } else { spalte_=spalte_-1; zeile_=posiDame(spalte_); removeDame(zeile_,spalte_); zeile_=zeile_+1; } } } if(spalte_>=groesse_) { printf("Es gibt eine Loesung\n\n\n"); ausgabeStdio(groesse_); } else { printf("Es gibt keine Loesung"); } }
  13. Es war atoi gemeint ja ... hab ich mich verschrieben. Hm .. ja wenn man im Nachhinein drüber nachdenkt ist es eh logisch:) Danke nochmal Muss jetz mit der zahl wieder genau das umgekehrte machen. also den integer wieder in ein array schreiben.
  14. Schreibe ich die Zeile so : zahl = (zahl + zahl_als_text-48); also verkleinere ich jeden schleifendurchgang um den char wert 0 , welcher dezimal 48 entspricht so stimmt das ergebnis. Warum ist mir allerdings noch nicht so ganz klar ..
  15. Naja : z.b zahl_als_text[0] = 1 , eben der char wert der an der stelle 0 im string steht oder ? Also eben im ascii 0x31 in hex Mein Algorithmus müsste doch stimmen eigentlich Nur bekomm da als ergebnis eben die dez. werte ( 1 enspricht da 49 in dez) vom acsii heraus. Er müsste die chars vom string aber als hex werte im ascii interpretieren, dass mein algorithmus funktioniert. Genau da liegt irgendwie mein Problem. Schaut dann so aus wenn ich die Schleifendurchläufe ausgebe :
  16. Hallo Ich muss ein C Programm schreiben, welches einen String ( Zeichenkette 123456 ) In eine Integer Zahl umwandelt und ausgibt. Ohne die itoa Funktion ! Mein Code schaut so aus, aber irgendwas scheint nicht zu funktionieren, da ein willkührliches Ergebnis herauskommt anstatt der zahl 123456. Ich starte bei 0 und Zähle in jedem Durchgang den jeweiligen Inhalt vom String dazu , dann mal 10. Also quasi : zahl = (0+0x31) * 10 = 10 zahl = (10 + 0x32)*10 = 120 zahl = (120 + 0x33)*10 = 1230 . . . zahl = (123450 + 0x36)*10 = 123456 Was stimmt am Code nicht ? Also der Algorithmus bin ich mir ziemlich sicher ist richtig, aber beim Eingeben tu ich mir immer recht schwer. Ich denke es liegt daran wie ich die Funktion im main ausgebe ... evtl. kann mir da wer weiterhelfen. #include <stdio.h> unsigned char zahl_als_text[7] = {'1','2','3','4','5','6','\0'}; unsigned int zahl; int TextInZahlUmwandeln() { unsigned int i; i=0; zahl=0; for (i=0;i<6;i++) { zahl = (zahl + zahl_als_text[i]); zahl = zahl*10; } return zahl; } int main() { TextInZahlUmwandeln(zahl); printf("TEXT %s ergibt umgewandelt in eine Zahl %i\n",zahl_als_text, zahl); return 0; }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...