Brauche Übersetzungshilfe vom Programm C zum Programm Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
pythonkönig24
User
Beiträge: 4
Registriert: Dienstag 2. März 2010, 08:57

Dieses Programm wurde geschrieben im Programm C,kann das jemand in das Programm Python übersetzen bitte.Notiz: Es ist keine Hausaufgabe,ich komme mit dem Programm C einfach nicht klar :((

Code: Alles auswählen

#include<stdio.h>
int yesno(char[]);
void intro(void);
void cspiel(void);
void leerepuffer(void);

int main(void){
  int weiterspielen=1;
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf( "            Z A H L E N R A T E N\n"); 
  printf( "            =====================\n"); 
  printf("\n");
  while (weiterspielen) {
      cspiel(); 
      weiterspielen = yesno("\nNoch ein Spiel?"); 
  }
  printf("\n");
  printf("Ich hoffe, du hattest Spass mit mir!\n");
  return (0);
}
void leerepuffer(void){
  while(getchar() != '\n');
}
int yesno(char prompt[] ){
  char taste;
  printf("%s (y/n)",prompt);
  scanf("%c",&taste);
  leerepuffer();

    if (taste=='y')
      return 1;
    else
      return 0;  
}
void intro(void){
	char irgendwas;
  	printf("\n");
	printf("\n");
	printf("\n");
	printf("            Denke dir eine Zahl zwischen 1 und 100 aus.\n"); 
	printf("            Ich werde versuchen, diese Zahl zu erraten.\n"); 
	printf("\n");
	printf("	    Gib ein:\n");
	printf("	     + , wenn mein Tipp zu klein ist.\n"); 
	printf("             - , wenn mein Tipp zu gross ist.\n");
	printf("             = , wenn mein Tipp stimmt. \n");
	printf("\n");
	printf("	    Hast du deine Zahl? Dann druecke die Eingabetaste!\n");
	scanf("%c",&irgendwas); 
	/*leerepuffer();*/
}
void cspiel(void){
  int unten=1;
  int oben=100;
  int erraten = 0; 
  int versuche = 0; 
  int tipp;
  char antwort;
  intro(); 
  while (! erraten){
    versuche = versuche + 1; 
    tipp = (unten + oben) / 2; 
    printf("Ist deine Zahl %d? ",tipp); 
    scanf("%c",&antwort); 
    leerepuffer();
    if (antwort == '+'){ 
	unten = tipp+1; 
    }
    else if (antwort == '-'){
	 oben = tipp-1; 
    }
    else if (antwort == '='){
	 erraten = 1; 
    }
    else{
	 printf("Das ist eine ungueltige Antwort!\n"); 
	 printf("Antworte mit +/=/-\n"); 
	 versuche = versuche - 1; 
    }    
    if (unten == oben){ 
  	 tipp = unten; 
         erraten = 1; 
    }
  }
  printf("Ich habe mit %d Fragen herausgefunden:",versuche); 
  printf("\nDeine Zahl ist %d!",tipp); 
}
Zuletzt geändert von Anonymous am Dienstag 11. Mai 2010, 09:01, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Warum sollte das irgendwer machen? Wenn du eine konkrete Frage hast, frag.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Vielleicht zeigst du uns ja mal deine Ansätze :) Das sind wirklich einfachste Grundlagen (in beiden Sprachen).

Und verwende in Zukunft Code-Tags oder den Pastebin, damit der Quelltext sauber formattiert wird.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

pythonkönig24 hat geschrieben:Dieses Programm wurde geschrieben im Programm C,kann das jemand in das Programm Python übersetzen bitte.
Es ist meist nicht sinnvoll, die Zeilen 1:1 zu übertragen, da Python andere Konzepte und Möglichkeiten hat als C.

Versuch einfach ein Python-Programm mit der gewünschten Funktionalität selber zu entwickeln. Solltest du mit dieser Aufgabe Schwierigkeiten haben, dann schau dir das Python-Tutorial an das du auf der Seite mit der Python-Dokumentation findest.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Der C Quelltext enthält noch jede Menge Fehler und lässt sich nicht kompilieren.
Ich würde immer vermeiden so was einzustellen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

hendrikS hat geschrieben:Der C Quelltext enthält noch jede Menge Fehler und lässt sich nicht kompilieren..
Nein, das liegt nur am Code-Highlighter. & -> &
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Vielleicht könnte man dem Schüler noch sagen, dass es dazu hier schon gefühlt 100 Threads zu diesem Problem gab? (Auf das Suchwort muss er schon noch selber kommen) :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

pythonkönig24 hat geschrieben:Notiz: Es ist keine Hausaufgabe,ich komme mit dem Programm C einfach nicht klar
Bitte-macht-mir-meine-Hausaufgaben Themen sind ja schon nervig genug, aber das ist dreist.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mich würde ja mal interessieren, wie viele Lehrer sich hier anmelden, um ihre Schüler zu "beobachten"? Wenn die so "clever" sind, nach python & forum googlen und dann hier landen, um bei Posting 1 direkt so eine Frage abzusetzen, ich meine dann sollte es doch auch Lehrer geben, die so "schlau" sind.

Speziell in diesem Fall, denn der (grottig) C-Code muss ja dann wohl irgend wie vorgegeben sein...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Das der C code falsch dargestellt wird ist echt grützig. Ist auch in Python ein Problem.

Code: Alles auswählen

print a&b
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Ich glaube ja eher, daß der C-Code im Netz gefunden wurde - beim Versuch, die Lösung zu googeln. Aber man muß ihm zugute halten, daß er sich das Forum zuvor zumindest ein bisschen angeschaut hat, sonst wüßte er nichts von der Hausaufgaben-Allergie ... :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Pekh hat geschrieben:Ich glaube ja eher, daß der C-Code im Netz gefunden wurde - beim Versuch, die Lösung zu googeln. Aber man muß ihm zugute halten, daß er sich das Forum zuvor zumindest ein bisschen angeschaut hat, sonst wüßte er nichts von der Hausaufgaben-Allergie ... :D
*g* aber nicht gut genug - sonst hätte er ja zig Lösungen gefunden (und das in zig Sprachen iirc :-D ) Aber ich denke auch per google sollte man das in Python finden...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Ich hab mal den 'original'-Code nach C99/Englisch portiert. (Hauptsächlich um mir zu beweisen, dass ich noch C kann :P )
http://paste.pocoo.org/show/212647/
Compiliert mit gcc -O3 -std=c99 (ich benutze gcc 4.3.3/mingw)

htdnh, Jörg
ps.: da sind natürlich keine Kommentare im Code...
edit: da war natürlich ein typo im GCC-aufruf
Zuletzt geändert von b.esser-wisser am Dienstag 11. Mai 2010, 13:25, insgesamt 1-mal geändert.
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
lunar

-O3 für so ein Programm, naja ... ;)
BlackJack

@lunar: ``-O3`` macht bei jedem Programm Sinn, welches man auch mit ``-Wall`` übersetzt, was man IMHO in der Regel tun sollte. Denn erst bei der Optimierung werden Datenpfade im Programm analysiert, die zu ein paar Warnungen führen können, die ohne diese Analyse nicht erkannt werden.
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

@lunar
Ohne Optimierung ist doof ;)
.. und zwischen -Os -O2 und -O3 besteht auf dem PC zumindest größenmäßig kein Unterschied.

hth, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich fordere ``-Wall`` ``-Werror`` und ``-pedantic`` ;) Wenn nicht gar noch ``-Wextra`` :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@BlackJack: Die einzige -Wall-Warnung, die von Optimierungen abhängt, ist -Warray-bounds, und die wird auch bereits mit -O2 aktiviert. -O3 ist extrem aggressiv, und hat bei den meisten Programmen eher gegenteilige Effekte.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Na, da muss noch ein wenig was getan werden:

Code: Alles auswählen

nelson@MECL-LAP3:~/src/C/snippets$ gcc -o guessanumber -Wall -O3 -Werror -pedantic guessanumber.c 
cc1: warnings being treated as errors
guessanumber.c: In function ‘main’:
guessanumber.c:21: error: ISO C90 forbids mixed declarations and code
guessanumber.c: In function ‘prompt_user’:
guessanumber.c:33: error: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
guessanumber.c:44:2: error: C++ style comments are not allowed in ISO C90
guessanumber.c:44:2: error: (this will be reported only once per input file)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

@Hyperion
Ich hab doch 'C99' geschrieben, oder? (-std=c99, oder gnu99 angeben)
edit: hab den gcc-aufruf korrigiert
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Antworten