![]() |
LiebesTester
hay,
ich möchte so ein liebes-tester-proggi machen. als ausgabe sollte kommen, zu wie viel prozent zwei leute zusammenpassen. aber ich ich möchte das nicht mit random(100) machen, weil dann kann man ja mit den selben zwei namen x verschiedene ergebnisse bekommen... ich hab mal nachgedacht, wie ichs machen könnte und dann bin ich auf eine idee gekommen: das Programm shcneidet die beiden namen einfach in die einzelnen buchstaben, jedem buchstaben ist eine primzahl zugeordnet. die zahlen aus dem ersten namen werden miteinander multipliziert und die zahlen aus dem zweiten namen auch. diese zwei neuen zahlen zählt man nun zusammen und schneidet falls die zahl mer als zwei stellen hat, alle stellen nach der 1ner und 10ner stelle ab. ich muss jetzt einfach wissen wie die buchstaben zu einer multiplikatioon gemacht werden können und wie ich die letzten zwei stellen abschneiden kann. hier ein beispiel: 1.name= eva 2.name= paul hier die 26.primzahlen (das programm sollte ä,ö und ü zu ae, oe und ue machen und erst dann rechnen.): a=2 b=3 c=5 d=7 e=11 f=13 g=17 h=19 i=23 j=29 k=31 l=37 m=41 n=43 o=47 p=53 q=59 r=61 s=67 t=71 u=73 v=79 w=83 x=89 y=97 z=101 eva= 11*79*2=1738 paul=53*2*73*37=286306 1738+286306=288044 2880|44 =44 Also passen Eva und Paul zu 44% zueinander;) mfG benj |
Re: LiebesTester
die buchstaben haben alle einen wert (A = 65 zb B = 66) usw
mit ord('A') kommt zb der wert 65 zurück :) - und dann mulitplizierst du den |
Re: LiebesTester
So, und wie lautet jetzt Deine Frage :gruebel:
...:cat:... |
Re: LiebesTester
Hi, moment mal. Dann hat das Teil ja 0% Wahrheitsgehalt, ist das gewollt? Wäre es nicht gescheiter, durch die Angabe von Hobbies etc. so etwas zu machen, oder habe ich den Sinn des Programmes total misverstanden?
@Sakura: Zitat:
![]() ![]() Edit: @Nicodius: Dann wäre a eber <> 2 und b <> 3 etc., wie er es gerne hätte ;) Edit: Tippfehler und Edits. ^^ |
Re: LiebesTester
Zitat:
|
Re: LiebesTester
Zerschneiden musste ja garnet ... mit StringVariabel[x] kannste ja die einzelnen Stellen abfragen .. sollte ja reichen ... und wenn du dich von den Primzahlen lösen kannst und auf ord umsteigst ist das ganze nicht mal mehr n 10-zeiler.
for x := 0 to Length(vString) do Ord(vString[x]) ... |
Re: LiebesTester
eine Möglickeit:
machst Dir einen String s mit dem Inhalt 'abcdefg...xyz' und eine Array of Integer aPrim mit Deinen Primzahln [2,3,5....] dann kannst Du mit aPrim[pos('a',s)] = primzahl von a daraufzugreifen. Das alles dann in ein Schleife bauen
Delphi-Quellcode:
Nur ein Ansatz.
for i:=1 to length(name) do
zahl1:=zahl1*aPrim[pos(name[i],s)]; Wie sinnvoll das ganze ist, sei mal dahingestellt. Grüße Klaus |
Re: LiebesTester
ich lieb dieses forum, kaum hab ich den beitrag geschrieben hab ich auch schon x antworen bekommen, ich werde mal eine anch der anderen durchprobieren, danke@all :roll:
Zitat:
obwohldas programm an sich sinnlos ist, lern ich dabei trozdem einige neue funktionen kennen :mrgreen: mfG toredo |
Re: LiebesTester
Zitat:
@Klaus01: Nette Idee das mit dem Array und dem String :gruebel: |
Re: LiebesTester
Zitat:
Delphi-Quellcode:
was das wegschneiden der restlichen Ziffern angeht:
const
zahlen: array['a'..'z'] of byte = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101); //... zahl := zahlen['e'] * zahlen['m'] * zahlen['i'] * zahlen['l']; ![]() greetz Mike |
Re: LiebesTester
OT: Hmmm, mal sehn
Christoph-Maria + Eva = G.L.?? mal fix im Kopf zusammen rechnen: Christoph-Maria = 30008325104105 Eva = 1738 30008325104105 + 1738 = 30008325105843 300083251058|43 = 6978680257,16 Also passen Christoph-Maria und Eva zu 6978680257 % zusammen !? :shock: Na dann dürfte es sich mit dem Nachwuchsproblem in Deutschland erledigt haben :lol: |
Re: LiebesTester
Zitat:
sie passen 43 zusammen es werden die letzten 2 stellen als Ergebnis genommen und nicht geteilt durch die letzten 2 stellen |
Re: LiebesTester
Zitat:
du hast nen kleinen fehler gemacht;) diese zeile stimmt noch: 30008325104105 + 1738 = 30008325105843 dann wird die 43 abgetrent, weil das die letzten zwei ziffern sind, d.h. die beiden passen nur zu 43% zusammen:) ich hab auch noch ne frage: ich bin jetzt dran das ganze auf die weise von Klaus1 zu verwirklichen, aber ich weiss ned wie man einen "Array of Integer" macht, kann mir das bitte jemand erklären weil ich kenn nur Integer^^ mfG toredo |
Re: LiebesTester
const
aPrim: Array [1..26] of Integer = (2,3,5, ...,101 ); Steht aber auch in der OH unter Array Grüße Klaus |
Re: LiebesTester
@JWeis und toredo: Stimmt, mein Fehler. :thumb: Das erklärt auch | und nicht / ! :duck:
Doch nichts mit Nachwuchs in D. :sharkylinchen: |
Re: LiebesTester
er rechnet einfach minus 65 ;)
|
Re: LiebesTester
das proggi ist gleich fertig ich ahb nur ncoh zwei ganz kleine probs.
wie schaff ich es, dass alle buchstaben in diese zeile kommen: zahl := zahlen['e'] * zahlen['m'] * zahlen['i'] * zahlen['l']; also damit mein ich, dass das wort so zerlegt wird. und das zweite problem ist, dass grossbuchstaben nicht angenommen werden, d.h. wenn ich statt zahlen['e'] zahlen['E'] hinschreibe kommt ein fehler beim kompilieren. mfG toredo |
Re: LiebesTester
Zitat:
Delphi-Quellcode:
Aus der Unit SysUtils
for i:= 1 to length(name) do
zahl:= zahl*zahlen[name[i]];
Delphi-Quellcode:
Grüße
name:=lowercase(name)
Klaus |
Re: LiebesTester
dann werd ich das prog mal vertigstellen udn es dann in den open-source bereich reinmachen, thx an alle die geholfen haben.
mfG toredo |
Re: LiebesTester
Hier glaubt wohl einer nicht an die "Große Liebe". :mrgreen: Wenn du nur die letzten 2 Zeichen ausgibst kann das nie 100% werden. Also bei 00 am Ende noch per zufall eine 1 vor schreiben, oder prüfen, ob die 3. letzte Stelle einen 1 ist oder sowas. :zwinker:
MfG freak |
Re: LiebesTester
Erstmal ist es eine schöne Umsetzung eines alten Klassikers. Das haben bei uns zumeist die Mädels mit Stift und Papier in der Grundschule gemacht. Allerdings denke ich, dass sie nen andern Algo verwendet haben :wink: Nachdem auch Jamba und Co schon auf die Idee gekommen sind das zu vermarkten ist das nun genau das was der Welt noch gefehlt hat... *läster* Aber es ging ja primär um den Lerneffekt und somit kann ich damit leben.
Zitat:
Toni |
Re: LiebesTester
hay,
:gruebel: kann es sein das wenn ich lowercase benutze immer 0 zurückkommt? weil nach dem lowercase bekommt die variable imemr den wert 0.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin name1:=Edit1.Text; name1:=Edit2.Text; name1:=LowerCase(name1); name2:=LowerCase(name1); for i:= 1 to length(name1) do zahl1:= zahl1*zahlen[name1[i]]; for i:= 1 to length(name2) do zahl2:= zahl2*zahlen[name2[i]]; zahl3 := zahl1 + zahl2; zahl3 := zahl3 mod 100; Edit3.Text := IntToStr(zahl3); end; mfG toredo |
Re: LiebesTester
Halb OT ;) :
Zitat:
Habs mir mal irgendwann erklären lassen... Mit der Umsetzung davon könnte man sogar noch ein bisschen mehr lernen als bei einem einfachen Buchstaben addieren ;) Beispiel: Christoph-Maria + Eva (weils so schön viele Buchstaben sind ;) ) Test auf: Liebe 1. Buchstabe: L: kommt in beiden Namen zusammen 0 mal vor. 2. Buchstabe: I: kommt 2 mal vor 3. Buchstabe: E: 1 4. Buchstabe: B: 0 5. Buchstabe: E: 1 Verrechnet wird das dann nach diesem Schema: ![]() Wenn zwei solche Zahlen addiert zusammen größer 10 sind, wird einfach aus dieser Zahl noch die Quersumme genommen. (5+8 = 13 => 4) @toredo: Setz das doch mal um für die Nostalgiker unter uns ;) mfG, Chris |
Re: LiebesTester
Zitat:
aber noch mals chnel zum code, weil den möcht ich fertigbringen :zwinker:
Delphi-Quellcode:
nach dem makierten code kommt für zahl1 und zahl2 immer 0 raus, das versteh ich nicht richtig...
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin name1:=LowerCase(Edit1.Text); name2.Text:=LowerCase(Edit2.Text); ---------------------------------------- for i:= 1 to length(name1) do zahl1:= zahl1*zahlen[name1[i]]; for i:= 1 to length(name2) do zahl2:= zahl2*zahlen[name2[i]]; ---------------------------------------- zahl3 := zahl1 + zahl2; zahl3 := zahl3 mod 100; Edit3.Text := IntToStr(zahl3); end; mfG toredo |
Re: LiebesTester
Delphi-Quellcode:
einrücken nicht vergessen, macht den Code lesbarer,
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin name1:=LowerCase(Edit1.Text); name2:=LowerCase(Edit2.Text); showMessage(name1,name2); zahl1:=1; // <------------- for i:= 1 to length(name1) do zahl1:= zahl1*zahlen[name1[i]]; zahl2:=1; // <----------- for i:= 1 to length(name2) do zahl2:= zahl2*zahlen[name2[i]]; zahl3 := zahl1 + zahl2; zahl3 := zahl3 mod 100; Edit3.Text := IntToStr(zahl3); end; zahl1 und zahl2 sind nicht initialisiert worden - daher wahrscheinlich 0 und ein Produkt mit 0 gibt 0. Grüße Klaus |
Re: LiebesTester
:cheers: thx jetzts funzts...
aber etwas funzt an dem prog noch nicht, aber den fehler im source find ich noch: alles hat geklappt bis ich meinen namen+den namen eines bestimmten girls eingegeben habe dann kam -99 raus :? mfG toredo -edit- problem ist gelöst |
Re: LiebesTester
kann es sein das es zu einem Überlauf bei zahl1 und zahl2 kommt.
Wenn die beiden Zahlen als Integer deklariert sind dann kann es bei der Multiplikation zu einem Überlauf kommen, der Wert wird größer als 2147483647. Vielleicht kannst Du dann LongInt oder Cardinal verwenden. Grüße Klaus |
Re: LiebesTester
man kann das proggi jetzt saugen:
![]() thx an alle helfer. mfG toredo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz