- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 59

Thema: ASURO-Lottozahlen

  1. #21
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Anzeige

    Powerstation Test
    Zitat Zitat von Sternthaler
    Super,
    tolles Zeichenprogramm. !!!!
    danke!!!!
    Mal sehen, ob man da noch was verbessern sollte. Lohnt sich aber keinesfalls
    doch! Dann habe ich das nächste Mal vielleicht weniger Probleme beim Programmieren. Mit diesem Ding habe ich stundenlang gekämpft, fast hätte ich aufgegeben oder hier um Hilfe gerufen.
    Gruss
    M.

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Na, na, aufgeben is nich'.

    Und siehe da, der Erfolg (ver)spricht Lottogewinn.

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  3. #23
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    OK, dann hier eine 'geschrumpfte' Version.
    Komplett anderer Ansatz die Zeichenfläche zu füllen.

    Und noch ein Gruß von Sternthaler
    Angehängte Dateien Angehängte Dateien
    Lieber Asuro programieren als arbeiten gehen.

  4. #24
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Du Ressourcenfresser!
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #25
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Hallo Sternthaler,

    o je - lauter mir unbekannte Funktionen.

    Wird die hex-Datei wegen stdio.h und math.h so "riesig"?

    Deine Schrumpfversion sieht ja schön übersichtlich aus, aber leider kommt mein ASURO nicht besonders gut damit zurecht. (siehe Anhang)

    Gut, dass du daran gedacht hast:
    aus rechtlichen Gründen ist der Zusatz "Ohne Gewaehr " natürlich unbedingt notwendig!

    Gruss
    M.
    Angehängte Dateien Angehängte Dateien

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @damaltor
    Ja, beim musizieren bin ich total der Geizhalz gewesen und hier nun solche Verschwendung. Was soll man da nur von halten. Ich baue auf dich, wenn ich mal Code mit mehr als 3MB posten möchte.

    Hallo M1.R,
    ja, es werden von den #include's die beiden Funktionen fprintf() und fmod() benötigt.
    Es würde dir aber nichts nützen, wenn du das #include wegläßt, ausser das du beim Übersetzten Warnings bekommst, und dein Programm im schlimsten Fall nicht funktioniert.
    Die #include-Anweisung holt nur die Information, wie Funktionen aus den Lib's zu benutzen sind, und welche Returnwerte sie liefern. (Deshalb unter anderem auch das #include "asuro.h")

    Wenn du nochmal in den von mir geposteten Code oben schaust, findest du auch die 'Bedinungsanleitung' für die beiden Funktion von dir als:
    uint8_t zufallbat(void); <-- MIT ;
    uint8_t zahl(void); <-- MIT ;
    Diese 'Bedinungsanleitung' habe ich noch aufgenommen, um keine Warnings beim Übersetzen zu bekommen. (Die mag ich nicht, da sie teilweise extreme Fehler zur Folge haben können.)

    Ich denke, dir werden folgende Funktionsbeschreibung weiterhelfen:
    fprintf-Beschreibung. Du solltest dir die da angegebene 'Formatierung' auf alle Fälle ansehen.
    fmod-Beschreibung
    Das ! vor der fmod-Funktion heisst nur 'nicht'. Also "if ( 'nicht' fmod (...))"
    Als Hinweis noch folgendes: Deine Variable Lottozahl ist nun ein Array für 49 Text-Strings mit JE einer maximalen Länge von 5 (6-1) Buchstaben.

    Aber warum es zu deiner recht Lottoscheinuntypischen Ausgabe kommt, muss ich erst mal rausfinden. Das muss auf alle Fälle mit dem fmod() zu tun haben.
    Ich vermute, dass die Mathe-Lib nicht, bzw. mit Warnings, eingebunden wird. Jedenfalls funktioniert noch alles, solange fmod() nur Zahlen von 0 bis 6 durch 7 teilen muss. Erst ab 8 / 7 wird nicht mehr festgestellt, dass der Rest NICHT 0 ist.
    Kannst du bitte mal das von dir benutzte Makefile posten. Da müsste die Lösung zu finden sein.

    Bei weiteren Fragen: Nur zu.
    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  7. #27
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    ICh werde sehen was sich machen lässt... ist die Sperre jetzt wieder deaktiviert? =)
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  8. #28
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Hallo Sternthaler,

    ich benutze das AVR-Studio und bekomme beim ersten Kompilieren immer massenhaft warnings, beim zweiten mal sind sie üblicherweise weg.
    Alle lib 2.7 Dateien liegen im selben Ordner wie das Projekt, die benötigten werden in das Projekt eingebunden.
    WIN AVR ist bei mir hier: C:\WinAVR-20070525

    Makefile und div. Screenshots im Anhang

    Gruss
    M.
    Angehängte Dateien Angehängte Dateien
    • Dateityp: zip zip.zip (101,2 KB, 6x aufgerufen)

  9. #29
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Zitat Zitat von Sternthaler
    Bei weiteren Fragen: Nur zu.
    ja gerne - danke

    ich hab mal deinen code mit Kommentaren und Fragezeichen versehen, es wäre nett wenn du dir das anschauen würdest.

    Code:
    // Kuerzer Code von Sternthaler (Ressourcenfresser)
    char Lottozahl [49][6];							 // warum 6 ?
    
       // 49 Lottozahlenspeicherplätze vorbereiten
       for (i = 0; i < 49; i++)
          sprintf (Lottozahl [i], " %2d |", i + 1); //49 plätze bestehend aus 5 zeichen:
                            //Lottozahl=leerzeichen/bzw X - ganze 2stellige zahl - leerzeichen - strich 
    
       // 6 Lottozahlen wuerfeln
       i = 6;
       while (i > 0)
       {
          zuf = zahl ();
          if (Lottozahl [zuf][0] == ' ')   		// == ? 
    												// keine lottozahl dann ein leerzeichen ?
          {
             Lottozahl [zuf][0] = 'X';				// lottozahl bekommt ein X
             i--;
          }
       }
    
       // Lottoschein malen
       for (i = 0; i < 49; i++)
       {
          if ( ! fmod (i, 7)) 						// wenn kein rest bei division i/7 da ist?
    												// also ganz am anfang und nach dem ende einer zeile
             SerWrite ("\r\n       ----------------------------------\r\n      |", 52); // waagerechten strich
                              //und ersten senkrechten inder nächsten zeile malen
          SerWrite (Lottozahl [i], 5);				// sonst Lottozahl(leerzeichen oder X) und Zahl? malen
    												// woher weiss er, welche zahl er schreiben muss?
       }
       SerWrite ("\r\n       ----------------------------------\r\n", 45); //letzter strich
    Gruss
    M.

  10. #30
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo damaltor,
    das weiß ich noch nicht, da ich noch nichts zu posten hatte. Evl. ist jetzt ein post drann, dann geht es. Schade geht nicht.

    Hallo M1.R,
    erst einmal zu deinen Kommentaren und Fragen im Code.

    Du hast ja das Wesentliche auf alle Fälle schon raus bekommen.
    //49 plätze bestehend aus 5 zeichen:
    //Lottozahl=leerzeichen/bzw X - ganze 2stellige zahl - leerzeichen - strich
    sprintf (Lottozahl [i], " %2d |", i + 1);
    Komplett richtig so. Die 49 Strings werden mit 5 Zeichen belegt " NN |"
    Dabei ist NN, ganz richtig, die 2-stellige Zahl vom Zähler i+1. Also 1 bis 49.
    Na, da ist auch schon die Lösung für deine Frage:
    // woher weiss er, welche zahl er schreiben muss?
    if (Lottozahl [zuf][0] == ' ') // == ?
    // keine lottozahl dann ein leerzeichen ?
    Hier wird aus dem 'zuf'-ten String der Variablen Lottozahl das 0-te Zeichen verglichen mit einem einzelnen char-Zeichen.
    == ist klar. Vergleiche irgendwas
    "Hello world" ist auch klar. Ein String
    'H' ist genau ein ASCII-Zeichen.
    Der Unterschied zwischen Strings und Char-Zeichen ist der Aufbau im Speicher, (und die Behandlung dieser Speicherstruktur).
    Die einzelnen Buchstaben des Strings sind jeweils in einem Byte gespeichert. Um den String aber zu beenden, so dass C weiß wann der String zu Ende ist, ist hinten dran immer ein 0x00 (kein einziges Bit im Byte ist gesetzt) angehängt.
    Also:
    "H" ist ein String und im Speicher werden ZWEI Byte benutzt. H und 0
    'H' ist genau ein Byte lang. Nur H
    Aus diesem Grund kann in einem String auch immer nur ein 'Nutz'-Zeichen weniger gespeichert werden.
    char Lottozahl [49][6] -> Reserviere 49 * 6 Byte
    5 Byte für die Buchstaben und Eins für Stringende 0x00

    Somit ist deine "// keine lottozahl dann ein leerzeichen ?"-Frage bestimmt beantwortet.
    Vergleiche das erste 'Nutz'-Zeichen [0] aus dem 'zuf'-ten String einfach mit einem Leerzeichen (' '). Oben hattest du ja schon richtig gesehen das 49 Strings beim ersten Zeichen mit Leerzeichen vorbelegt werden.
    Ist also diese Stelle noch ein Leerzeichen, dann können wir diesen 'zuf'-ten Lottozahlen-Speicherplatz (den String) noch mit einem 'X' an der ersten Stelle beschreiben.
    Wenn aber kein ' ' in diesem ersten 'Nutz'-Zeichen steht, dann ist da schon ein 'X' vorhanden, also nochmal würfeln.

    if ( ! fmod (i, 7))
    // wenn kein rest bei division i/7 da ist?
    // also ganz am anfang und nach dem ende einer zeile
    Ja, bei 0 auf alle Fälle, denn 0 durch irgendwas ist nun mal 0.
    "nach dem ende einer zeile" heißt eher: alle 7 Durchläufe mal was tun. Denn die Zeilenlänge bestimmen wir ja erst mit der 7 in fmod().
    Hier sollte eigendlich auch bei dir immer 0 als Ergebnis kommen, wenn i den Wert 7, 14, 21, 28, ... annimmt.
    Und genau das passiert bei deinem Hex-File ja leider nicht, sondern nur bei 0 / 7.

    Deshalb schaue ich jetzt einmal in dein Makefile. Mal sehen, ob ich was finde.

    Gruß Sternthaler
    P.S.: Oh Gott, ist das wieder lang geworden.
    Lieber Asuro programieren als arbeiten gehen.

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress