| 
				
					|  | Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| alex2001 
 
 
 Anmeldungsdatum: 27.09.2012
 Beiträge: 9
 
 
 | 
			
				|  Verfasst am: 29.09.2012, 18:04    Titel: Daten im Array normalisieren |   |  
				| 
 |  
				| hallo, ich habe im moment eine Blockade. vielleicht kann mir jemand von euch da raus helfen:
 
 ich habe ein gegebenes array, sagen wir x=100, y=2
 
 y(1) enthält redundante daten
 y(2) werte die in abhängigkeit von y(1) zu summieren sind
 
 ziel:
 
 y(1) enthält keine redundante daten mehr, und y(2) den jeweils summierten wert
 
 weiss jemand ein brauchbares konstrukt in quickBasic?
 |  |  
		| Nach oben |  |  
		|  |  
		| SpionAtom 
 
 
 Anmeldungsdatum: 10.01.2005
 Beiträge: 395
 
 
 | 
			
				|  Verfasst am: 29.09.2012, 18:30    Titel: Leider furchtbar unverständlich |   |  
				| 
 |  
				| Hallo du. Leider drückst du dich mit deinem Problem sehr konfus aus. Was ist x, was ist y?
 Handelt es sich um ein zweidimensionales Array?
 Quelltext liefern kann helfen, Skizzen können helfen, konkret das Ziel beschreiben kann helfen...
 _________________
 Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
 |  |  
		| Nach oben |  |  
		|  |  
		| alex2001 
 
 
 Anmeldungsdatum: 27.09.2012
 Beiträge: 9
 
 
 |  |  
		| Nach oben |  |  
		|  |  
		| dreael Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 2530
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 29.09.2012, 19:08    Titel: Re: Leider furchtbar unverständlich |   |  
				| 
 |  
				|  	  | SpionAtom hat Folgendes geschrieben: |  	  | Quelltext liefern kann helfen, Skizzen können helfen, konkret das Ziel beschreiben kann helfen... | 
 Am besten ein Beispiel der Art
 
  	  | Code: |  	  | ' Alles frei erfunden! ' Eingabedaten: 2 Arrays x() und y(), hier der Einfachheit halber nur
 ' wenige Elemente und aus DATAs initialisiert, in der richtigen Anwendung
 ' aus einem Textfile von einem Datenlogger, in der Regel mehrere tausend
 ' Elemente gross
 DIM x(1 TO 5), y(1 TO 3)
 FOR i%=1 TO 5
 READ x(i%)
 NEXT i%
 DATA 1, 77, -32, 55, 66
 FOR i%=1 TO 3
 READ y(i%)
 NEXT i%
 DATA -22, 55, 88
 
 ' Ausgabedaten z(): Soll mit Algorithmus XYZ aus x() und y() berechnet
 ' werden und würde in diesem Fall 6 Elemente gross werden
 DIM z(1 TO 6)
 ' ??? Summieren / Eure Hilfe
 
 ' z() sollte am Schluss in diesem Fall
 ' z(1) = 110, z(2) = 220, z(3) = 0, z(4) = -55, z(5) = 120, z(6) = 11
 ' enthalten
 | 
 zusammenstellen. Einfach Dich klar ans EVA-Prinzip halten!
 _________________
 Teste die PC-Sicherheit mit www.sec-check.net
 |  |  
		| Nach oben |  |  
		|  |  
		| alex2001 
 
 
 Anmeldungsdatum: 27.09.2012
 Beiträge: 9
 
 
 | 
			
				|  Verfasst am: 29.09.2012, 19:35    Titel: |   |  
				| 
 |  
				| also versuchen wir es mal á la Markt&Technik-Bücher 
 mal angenommen, ich hätte 100 haustiere, (was natürlich schon polizeilich unzulässig wäre)
 da wären vielleicht hunde, katzen, goldfische, hamster, meerschweinchen, wellensitiche, und kaulquappen
 
 zu ermitteln wäre der tägliche futterbedarf je art (die eigenart des futters bleibt außer betracht)
 
 der bedarf jedes einzelnen der tiere ist bekannt
 
 wir können also eine tabelle anlegen (aha, nun kommt die datenbank wenigstens ansatzweise ins spiel):
 
 spalte 1 art des tieres
 spalte 2 indiviueller futterbedarf
 
 die art der tiere ist in spalte 1 wahlfrei (unsortiert und mehrfach) eingetragen
 
 aufgabe:
 schreibe einen algorythmus, welcher den futter bedarf je vorhandener tierart ausgibt
 _________________
 Sottisen sind meist Ergebnis eigener Unzulänlichkeit
 |  |  
		| Nach oben |  |  
		|  |  
		| dreael Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 2530
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 29.09.2012, 20:21    Titel: |   |  
				| 
 |  
				| Danke für die genaueren Ausführungen. Dein Problem würde sich mit einer SQL-Datenbank logischerweise am einfachsten lösen lassen. Da es auf meinen diversen Linux-Servern ausreichend MySQL-Datenbanken gibt, habe ich das Ganze sonst einmal dort genauer eruiert. 
 Testdaten in einer MySQL-Datenbank mit folgenden Statements (Script) erzeugt:
 
  	  | Code: |  	  | -- Dies ist bereits eine normalisierte Form, weil die Haustierart -- als separate Tabelle existiert
 CREATE TABLE tierart(
 id INTEGER NOT NULL AUTO_INCREMENT,
 tiername VARCHAR(30) NOT NULL,
 PRIMARY KEY(id)
 );
 
 CREATE TABLE futterbedarf(
 id INTEGER NOT NULL AUTO_INCREMENT,
 tierart_id INTEGER NOT NULL,
 -- Ohne Normalisierung wäre tierart nur ein VARCHAR!
 name VARCHAR(30) NOT NULL,
 futtermenge INTEGER NOT NULL,
 PRIMARY KEY(id),
 FOREIGN KEY(tierart_id) REFERENCES tierart(id)
 );
 
 INSERT INTO tierart(tiername) VALUES("Hund");
 SET @artid = LAST_INSERT_ID();
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Bello", 1000);
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Bobby", 850);
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Lupo", 900);
 INSERT INTO tierart(tiername) VALUES("Katze");
 SET @artid = LAST_INSERT_ID();
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Susi", 150);
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Florian", 120);
 INSERT INTO tierart(tiername) VALUES("Hamster");
 SET @artid = LAST_INSERT_ID();
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Hanserl", 90);
 INSERT INTO futterbedarf(tierart_id, name, futtermenge) VALUES(@artid,
 "Bippus", 80);
 | 
 Am besten in eine Datei haustier.sql speichern und mit
 
  	  | Code: |  	  | mysql --user dbbenutzer -p tieredatenbank <haustier.sql | 
 ausführen, so dass
 
  	  | Code: |  	  | mysql> show tables; +-------------------+
 | Tables_in_proebel |
 +-------------------+
 | futterbedarf      |
 | tierart           |
 +-------------------+
 2 rows in set (0.00 sec)
 
 mysql> select * from futterbedarf;
 +----+------------+---------+-------------+
 | id | tierart_id | name    | futtermenge |
 +----+------------+---------+-------------+
 |  1 |          1 | Bello   |        1000 |
 |  2 |          1 | Bobby   |         850 |
 |  3 |          1 | Lupo    |         900 |
 |  4 |          2 | Susi    |         150 |
 |  5 |          2 | Florian |         120 |
 |  6 |          3 | Hanserl |          90 |
 |  7 |          3 | Bippus  |          80 |
 +----+------------+---------+-------------+
 7 rows in set (0.00 sec)
 
 mysql> select * from tierart;
 +----+----------+
 | id | tiername |
 +----+----------+
 |  1 | Hund     |
 |  2 | Katze    |
 |  3 | Hamster  |
 +----+----------+
 3 rows in set (0.00 sec)
 
 mysql> _
 | 
 als Ergebnis entsteht. In diesem Beispiel sei die Futtermenge in Gramm, welches jedes Tier täglich frisst.
 
 So, und jetzt die eigentliche Auswertung: Zuerst einmal nur eine Tabelle erzeugen, die die Tiere auflistet, mit einem sog. Join:
 
 
  	  | Code: |  	  | mysql> SELECT b.name, a.tiername, b.futtermenge FROM tierart a, futterbedarf b WHERE a.id = b.tierart_id; +---------+----------+-------------+
 | name    | tiername | futtermenge |
 +---------+----------+-------------+
 | Bello   | Hund     |        1000 |
 | Bobby   | Hund     |         850 |
 | Lupo    | Hund     |         900 |
 | Susi    | Katze    |         150 |
 | Florian | Katze    |         120 |
 | Hanserl | Hamster  |          90 |
 | Bippus  | Hamster  |          80 |
 +---------+----------+-------------+
 7 rows in set (0.00 sec)
 
 mysql> _
 | 
 
 Und jetzt Deine gewünschte Auswertung selber: Tägliche Futtermengenbestimmung für jede Tierart selber:
 
 Variante mit verschachteltem SELECT:
 
 
  	  | Code: |  	  | mysql> SELECT tiername, (SELECT SUM(futtermenge) FROM futterbedarf WHERE tierart_id = tierart.id) AS menge_gesamt FROM tierart; +----------+--------------+
 | tiername | menge_gesamt |
 +----------+--------------+
 | Hund     |         2750 |
 | Katze    |          270 |
 | Hamster  |          170 |
 +----------+--------------+
 3 rows in set (0.00 sec)
 
 mysql> _
 | 
 
 Aber dies lässt sich auch mit GROUP BY lösen:
 
 
  	  | Code: |  	  | mysql> SELECT a.tiername, SUM(b.futtermenge) AS menge_gesamt FROM tierart a, futterbedarf b WHERE a.id = b.tierart_id GROUP BY b.tierart_id; +----------+--------------+
 | tiername | menge_gesamt |
 +----------+--------------+
 | Hund     |         2750 |
 | Katze    |          270 |
 | Hamster  |          170 |
 +----------+--------------+
 3 rows in set (0.00 sec)
 
 mysql> _
 | 
 
 Bitte bestätigen, ob dies Deiner Problemstellung entspricht, dann kann ich etwas Passendes für in QB zusammenstellen.
 _________________
 Teste die PC-Sicherheit mit www.sec-check.net
 |  |  
		| Nach oben |  |  
		|  |  
		| SpionAtom 
 
 
 Anmeldungsdatum: 10.01.2005
 Beiträge: 395
 
 
 | 
			
				|  Verfasst am: 29.09.2012, 20:27    Titel: |   |  
				| 
 |  
				| Uuuuh, Qbasic programmieren. Nach so langer Zeit, geht immer noch einigermaßen. Habe die Aufgabe nun so verstanden wie drael.
 Die Aufgabenbeschreibung war diesmal wirklich gut. Und das ist auch die halbe Miete: Verständlich, möglicherweise auch ausführlich, beschreiben, was man eigentlich will.
 Tabellen realisiert man in QB am besten mit Types.
 
 
  	  | Code: |  	  | TYPE Tierfutter rufname AS STRING * 12
 tier AS STRING * 12
 futter AS INTEGER
 END TYPE
 
 DATA 15
 DATA "Luffi", "Affe", 5
 DATA "Zorro", "Tiger", 12
 DATA "Nami", "Papagei", 3
 DATA "Ussop", "Hase", 7
 DATA "Sanji", "K„nguruh", 12
 DATA "Vivi", "Elch", 10
 DATA "Chopper", "Elch", 6
 DATA "Nico", "Katze", 2
 DATA "Robin", "Katze", 4
 DATA "Franky", "Nashorn", 9
 DATA "Brook", "Elch", 1
 DATA "Gold", "Nashorn", 14
 DATA "Roger", "L”we", 11
 DATA "Ace", "Affe", 4
 DATA "Smoker", "L”we", 5
 
 READ MAXTIERE
 DIM futtertabelle(1 TO MAXTIERE) AS Tierfutter
 FOR i% = 1 TO MAXTIERE
 READ futtertabelle(i%).rufname
 READ futtertabelle(i%).tier
 READ futtertabelle(i%).futter
 NEXT
 
 
 'Tabelle anzeigen
 CLS
 PRINT "Nr.  Name          Art           Anzahl Futtereinheiten"
 PRINT "-------------------------------------------------------"
 FOR i% = 1 TO MAXTIERE
 PRINT USING "##.  &  &  ##"; i%; futtertabelle(i%).rufname; futtertabelle(i%).tier; futtertabelle(i%).futter
 NEXT
 
 
 'Eingabeaufforderung
 eingabe$ = ""
 WHILE VAL(eingabe$) < 1 OR VAL(eingabe$) > MAXTIERE
 VIEW PRINT MAXTIERE + 4 TO 25: CLS
 LOCATE MAXTIERE + 4: INPUT "Bitte Nummer eines Tieres eingeben: ", eingabe$
 WEND
 eingabe% = VAL(eingabe$)
 
 'Alle Futtereinheiten zusammenz„hlen, die dem Eingabetier entsprechen
 tier$ = futtertabelle(eingabe%).tier
 summe% = 0
 anzahltiere% = 0
 FOR i% = 1 TO MAXTIERE
 IF futtertabelle(i%).tier = tier$ THEN
 summe% = summe% + futtertabelle(i%).futter
 anzahltiere% = anzahltiere% + 1
 END IF
 NEXT
 
 'Ergebnis ausgeben
 eingabeName$ = futtertabelle(eingabe%).rufname
 PRINT RTRIM$(eingabeName$); " ist ein(e) "; RTRIM$(tier$); "."
 PRINT "Es gibt davon"; anzahltiere%; "in der Tabelle und sie ben”tigen insgesamt"; summe%; "Futtereinheiten."
 END
 
 | 
 _________________
 Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
 |  |  
		| Nach oben |  |  
		|  |  
		| alex2001 
 
 
 Anmeldungsdatum: 27.09.2012
 Beiträge: 9
 
 
 | 
			
				|  Verfasst am: 04.10.2012, 18:47    Titel: |   |  
				| 
 |  
				| Hallo, ich möchte mich bei allen bedanken, die über das Problem nachgedacht haben!
 Die Blockade hat sich mittlerweile geöst.
 
 Die Lösung war (wie häufig) verhältnismässig einfach:
 
 FOR i = 1 TO postenzaehler
 
 j = 1
 
 DO UNTIL Bon.konto(i) = bonGegenkonto(j) OR bonGegenkonto(j) = 0
 j = j + 1
 LOOP
 
 bonGegenkontoBetrag(j) = bonGegenkontoBetrag(j) + Bon.Gesamtpreis(i)
 bonGegenkonto(j) = Bon.konto(i)
 
 NEXT i
 
 Zur Erklärung:
 Ich schreibe an einem Program zur Buchhaltung für den privaten Gebrauch aber auf Grundlage der doppelten Buchführung(kaufmänische Buchführung)
 Um die Sache bequem zu machen, kann der Einkauf über Artikelnummern oder Barcode(per Scanner) erfasst werden.
 Nun wollte ich aber nicht für jeden einzelnen Posten eine Buchung im Journal und den einzelnen Konten haben, sondern sollten für den gesamten Einkauf nur Buchungen je Warengruppe(gesamt) erfolgen, also für Molkerei eine zusammengefasste Buchung, für Backwaren und so weiter...
 Ich brauchte nur das "Konstrukt" wie man die (bereits vorhandenen Daten) "verdichtet" oder auch "normalisiert": Eine Buchung je Warengruppe.
 
 Danke nochmal.
 _________________
 Sottisen sind meist Ergebnis eigener Unzulänlichkeit
 |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten.
 Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
 Du kannst deine Beiträge in diesem Forum nicht löschen.
 Du kannst an Umfragen in diesem Forum nicht mitmachen.
 
 |  |