Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vokale Zählen (https://www.delphipraxis.net/71603-vokale-zaehlen.html)

userF 18. Jun 2006 09:40


Vokale Zählen
 
Hallo, ich weiß nicht weiter und ich finde einfach den Fehler nirgens.Könnte sich vieleicht mal jemand meinschulprojekt ansehen und mir sagen was ich falsch mache? Währe echt voll nett von euch.

Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    eingabe: TEdit;
    vokale: TLabel;
    Label2: TLabel;
    ausgabevokale: TEdit;
    ausgabekonsonanten: TEdit;
    zaehlen: TButton;
    schliessen: TButton;
    procedure zaehlenClick(Sender: TObject);
    procedure schliessenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
var
  Form1: TForm1;
implementation
var satz:string;
    i:integer;
    buchstabe:integer;
    vokal:string;
    konsonant:string;
{$R *.dfm}
procedure TForm1.schliessenClick(Sender: TObject);
begin
close;
end;
procedure TForm1.zaehlenClick(Sender: TObject);
begin
 for i:=1 to length(satz) do
 if (satz[i]='a') or (satz[i]='e') or (satz[i]='i')
or (satz[i]='u') or (satz[i]='o') then
satz[i]:=vokal[1];
 else satz[i]:=konsonant[1];
end;
end.
[edit=sakura] [delphi]-Tags. Mfg, sakura[/edit]

sakura 18. Jun 2006 09:42

Re: Es funzt einfach nicht
 
Nutze bitte den Edit-Button an Deinem Beitrag und gib der Frage einen aussagekräftigen Titel.

Danke,
...:cat:...

userF 18. Jun 2006 09:44

Re: Es funzt einfach nicht
 
sorry ich hab noch keiner erfahrung wie das geht mit Edit hab noch nicht so viel gepostet hier.werd mich bemühen das zu ändern.danke für deinen Tip

Matze 18. Jun 2006 09:45

Re: Es funzt einfach nicht
 
Hi,

ändere bitte den Titel in einen aussagekräftigen.

Zu deinem Problem:
Du hast nirgendwo vokal implementiert, sondern lediglich deaklariert. Irgendwo musst du vokal sicher noch etwas zuweisen. Ich beziehe mich auf diese Stelle:

Delphi-Quellcode:
satz[i] := vokal[1];
Edit: Genauso bei konstant und was ist satz, weist du da etwas zu?

Edit: Klicke einfach in deinem ersten Beitrag oben rechts auf http://www.delphipraxis.net/template.../icon_edit.gif und ändere den Titel. ;)

mkinzler 18. Jun 2006 09:45

Re: Es funzt einfach nicht
 
Vielleicht wäre es besser, wenn du uns sagen würdest, was genau nicht klappt und wenn ein Fehler kommt, wo und welcher. Eine kurze Beschreibung des Soll-Zustandes wär auch kein Fehler.

Matze 18. Jun 2006 10:00

Re: Vokale Zählen
 
Jetzt mit dem Titel wird alles klar. Hier eine mögliche Lösung:

Delphi-Quellcode:
procedure TForm1.BtnZaehlenClick(Sender: TObject);
var
  i: Integer;
  VokNum, KonstNum: Integer;
  Satz: string;
begin
  VokNum := 0;
  KonstNum := 0;

  // Groß-/Kleinschreibung ignorieren
  Satz := AnsiLowerCase(EdtSatz.Text);

  for i := 1 to Length(Satz) do
  begin
    if Satz[i] in ['a', 'e', 'i', 'o', 'u'] then
      inc(VokNum)
    else
      inc(KonstNum);
  end;

  LblVokNum.Caption := IntToStr(VokNum);
  LblKonstNum.Caption := IntToStr(KonstNum);
end;
Eigentlich sind der Code und die Komponentennamen selbsterklärend.

Klaus01 18. Jun 2006 10:05

Re: Vokale Zählen
 
Delphi-Quellcode:
implementation
var satz:string;
    i:integer;
    buchstabe:integer;
    vokal:Integer;
    konsonant:Integer;
{$R *.dfm}
procedure TForm1.schliessenClick(Sender: TObject);
  begin
    close;
  end;
procedure TForm1.zaehlenClick(Sender: TObject);
  begin
    vokal:=0;
    konsonant:=0;
    for i:=1 to length(satz) do
      if (satz[i]='a') or (satz[i]='e') or (satz[i]='i')
         or (satz[i]='u') or (satz[i]='o') then
        inc(vokal;
      else
       inc(konsonant);
end;
Andere Lösungsansätze findest Du auch in Deinem ersten Thread:
http://www.delphipraxis.net/internal...ghlight=vokale

Grüße
Klaus

userF 18. Jun 2006 10:08

Re: Vokale Zählen
 
Danke Matze,wo soll ich das aber bitte einfügen?

userF 18. Jun 2006 10:10

Re: Vokale Zählen
 
Danke Klaus01 ich probiere ja schon länger alles aus und hab verschiedene sachen versucht aber ich bin da wohl noch zu doof um das richtig zu erkennen denk ich mal.

Matze 18. Jun 2006 10:11

Re: Vokale Zählen
 
Zitat:

Zitat von userF
Danke Matze,wo soll ich das aber bitte einfügen?

Ich dachte, das wäre wirklich selbsterklärend. Das ganze ist das OnClick-Ereignis des Zähl-Buttons. Du musst natürlich entsprechend noch ein paar Komponenten auf deinem Formular platzieren und diese umbenennen oder den Code leicht ändern. Denke dich bitte etwas hinein und überlege, was mein Code macht. Da nun ein fertiges Projekt anzuhängen halte ich für übertrieben.

userF 18. Jun 2006 10:18

Re: Vokale Zählen
 
Ich möchte wirklich kein fertiges Projekt von Euch haben,ich will es nur richtig verstehen.ich hab von delphi echt nicht soviel ahnung und in der schule wird das auch nicht so richtig erklärt finde ich.ich setz mich mal ran und lass mir das nochmal und nochmal durch den kopf gehen.ich muss da doch drauf kommen. Danke Matze und Klaus01 für Eure hilfe

userF 18. Jun 2006 10:46

Re: Vokale Zählen
 
Ich hab mal aufgeschrieben wie ich mir das Projekt genau vorstelle und ich hab auch schon vieles versucht aber ich bekomm das nicht hin irgendwie.
ich muss ein feld haben wo ich einen satz eingeben kann
und dann muss ich einen button haben und wenn ich drauf klicke muss das programm in dem eingegebenen satz alle konsonanten und vokale zählen und die muss er dann einen einzelnen felder dann reinschreiben
also ein 1 feld für konsonanten und eins für vokale und ich denke man muss als variable schonmal vokale und konsonanten angeben ganz am anfang muss die variable den wert 0 erhalten und vokal auch
und wenn der dann die einzelnen buchstaben vom satz durchgeht und einen vokal oder konsonant findet muss der immer 1 dazuzählen und am ende alles addieren und das ergebnis ins ausgabefeld schreiben.so sollte das ganze aussehen aber ich bekomm das einfach nicht gebacken sorry

SirThornberry 18. Jun 2006 10:55

Re: Vokale Zählen
 
ich denke dir muss erstmal klar werden wie das ohne Delphi geht. Desweiteren gewöhne dich bitte an den "Edit"-Button.
Du schreibst ja das du immer 1 dazuzählen musst (bei Konstante bzw. Vokal). Am Ende schreibst du jedoch noch das du alles dann addieren musst. Wenn du ummer 1 dazu zählst ist es doch schon addiert.

Wenn du etwas zählen willst solltest du einen Variablentyp nutzen der Zahlen beherbergt. Und dann ist das Prinzip folgendes.
1.) AnzahlKonsonanten = 0
2.) AnzahlVokale = 0
3.) Alle Buchstaben der Reihe nach durchgehen. Wenn Es ein Vokal ist dann wird die Anzahl der Vokale um 1 erhöht ansonsten die Anzahl der Konsonanten. Wenn du dann alle Buchstaben duchgegangen bist hast du somit schon die Anzahl der Vokale und die Anzahl der Konsonanten. Diese musst du dann noch ausgeben.

Wie bereits geschrieben hab ich eher das Gefühl das du dir nicht klar bist wie die Aufgabe ohne Delphi (auf Blatt papier) gelöst werden kann.

Noobinator 18. Jun 2006 11:00

Re: Vokale Zählen
 
also du fügst in deine Form ein edit ein, 2 labels und ein button.

auf den button machst du dann:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var konsonanten,vokale,i:integer;
begin
// beides 0 setzen
konsonanten:=0;
vokale:=0;

for i:=1 to length(edit1.text) do // jedes Zeichen des satzes durchgehen
begin
if edit1.text[i] in ['a','e','i','o','u'] then
vokale:=vokale+1; // wenn ein Vokal, dann eins Hochzählen

//konsonanten zählen
if edit1.Text[i] in ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','u','v','w','x','y','z']
then konsonanten:=konsonanten+1; // wenn kosonant, dann eins hochzählen
end;
label2.caption:=inttostr(konsonanten); // ausgeben
label1.caption:=inttostr(vokale);     // ausgeben
end;
so das war es dann schon.

3_of_8 18. Jun 2006 11:04

Re: Vokale Zählen
 
Es soll ein Satz eingegeben werden.

Die meisten Sätze enthalten Interpunktionszeichen und Leerzeichen.

Ich würde Kommata und Leerzeichen nicht gerade als Konsonanten bezeichnen.

Daher würde ich es eher so machen:

Delphi-Quellcode:
procedure TForm1.zaehlenClick(Sender: TObject);
  begin
    satz:=AnsiUpperString(satz);
    vokal:=0;
    konsonant:=0;
    for i:=1 to length(satz) do
      if satz[i] in ['A', 'E', 'I', 'O', 'U'] then
        inc(vokal;
      else if satz[i] in ['A'..'Z'] then    
        inc(konsonant);
end;
BTW: Sind Umlaute eigentlich Vokale oder Konsonanten?

userF 18. Jun 2006 11:06

Re: Vokale Zählen
 
ich muss zugeben das ich damit schon etwas überfordert bin sorry.für mich ist das alles neuland und ich versuch es einfach nur zu verstehen. Ich möchte zuerst alle Vokale einzeln und alle Konsonanten einzeln ermitteln ( zahlenmässig) und dann das ganze zusammen rechnen irgendwie. Ich hab das auf Papier schon versuicht mit zeichnung und so eben aber in der realität sieht es völlig anderst aus. ich check das irgendwie nicht sorry.Ich bin für jede hilfe dankbar. Wenn ich antwort erstellen anklicke finde ich nirgens einen Edit button sorry sonst würde ich diesen benutzen

SirThornberry 18. Jun 2006 11:09

Re: Vokale Zählen
 
es ist ja wunderschön ds ihr eine komplettlösung postet, aber anscheinend habt ihr nicht daran gedacht das er dabei nicht viel lernt und das diese unvollständig sind. Ihr berücksichtigt jeweils nur groß oder kleingeschriebenes aber nicht beides.

Noobinator 18. Jun 2006 11:09

Re: Vokale Zählen
 
Zitat:

Zitat von userF
ich muss zugeben das ich damit schon etwas überfordert bin sorry.für mich ist das alles neuland und ich versuch es einfach nur zu verstehen. Ich möchte zuerst alle Vokale einzeln und alle Konsonanten einzeln ermitteln ( zahlenmässig) und dann das ganze zusammen rechnen irgendwie. Ich hab das auf Papier schon versuicht mit zeichnung und so eben aber in der realität sieht es völlig anderst aus. ich check das irgendwie nicht sorry.Ich bin für jede hilfe dankbar. Wenn ich antwort erstellen anklicke finde ich nirgens einen Edit button sorry sonst würde ich diesen benutzen

Ich habe das doch schon einzeln gepostet.
was verstehst du an meinem Text nicht, denn ich auch schon kommentiert habe...
aber eine Frage: ein bissl englisch kannst du?
oder du kennst die schleifen, if anweisungen?

das einfach auf deinen Button legen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var konsonanten,vokale,i:integer;
begin
edit1.Text:=ansilowercase(edit1.text);// Groß- und Kleinschreibung ignorieren

// beides 0 setzen
konsonanten:=0;
vokale:=0;

for i:=1 to length(edit1.text) do // jedes Zeichen des satzes durchgehen
begin
if edit1.text[i] in ['a','e','i','o','u'] then
vokale:=vokale+1; // wenn ein Vokal, dann eins Hochzählen

//konsonanten zählen
if edit1.Text[i] in ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']
then konsonanten:=konsonanten+1; // wenn kosonant, dann eins hochzählen
end;
label2.caption:=inttostr(konsonanten); // ausgeben
label1.caption:=inttostr(vokale);     // ausgeben
end;

userF 18. Jun 2006 11:14

Re: Vokale Zählen
 
Mein Englisch geht so sag ich mal und Schleifen und if anweisungen hab ich schon gehört und in der Schule auch sogar schonmal benutzt nur eben viel zu selten wie ich sehe sorry.

Sharky 18. Jun 2006 11:37

Re: Vokale Zählen
 
Zitat:

Zitat von SirThornberry
es ist ja wunderschön ds ihr eine komplettlösung postet, aber anscheinend habt ihr nicht daran gedacht das er dabei nicht viel lernt ...

Hai Sir,

ich gebe Dir recht. Aber trotzdem poste ich hier mal meine Lösung.
Wichtig ist: Die Funktionalität ist von der GUI (OnClick getrennt). Leider machen diesen schweren Fehler immer noch viel zu viele.
Dann habe ich versucht das ganze so offen wie nur möglich zu halten. Es geht dabei einfach darum verschiedene "Char-Arten" zu zählen. Diese "Arten" sind einfach in den Records eines Arrays definiert. Was man damit macht ist aufgabe des Entwicklers ;-)

Delphi-Quellcode:
type
  TCharCountInfo = record
    Chars: set of Char;
    Counter: Cardinal;
  end;

function CountCharTypes(const aString: string; var CharTypes: array of TCharCountInfo): Cardinal;
var
  ndx1: Integer;
  ndx2: Integer;
  CharCount: Cardinal;
  CountString: string;
begin
  CountString := aString;
  CharCount  := 0;
  for ndx1 := 0 to Length(aString) do
  begin
    for ndx2 := Low(CharTypes) to High(CharTypes) do
    begin
      if (aString[ndx1] in CharTypes[ndx2].Chars) then
      begin
        Inc(CharTypes[ndx2].Counter);
        Inc(CharCount);
      end;
    end;
  end;
  result := CharCount;
end;

procedure TDemoForm.btn_testClick(Sender: TObject);
var
  myCharTypes: array[1..6] of TCharCountInfo;
  s: string;
  count: Integer;
begin
  myCharTypes[1].Chars := ['a'..'z'] - ['a', 'e', 'i', 'o', 'u'];
  myCharTypes[1].Counter := 0;

  myCharTypes[2].Chars := ['a', 'e', 'i', 'o', 'u'];
  myCharTypes[2].Counter := 0;

  myCharTypes[3].Chars := ['A'..'Z'] - ['A', 'E', 'I', 'O', 'U'];
  myCharTypes[3].Counter := 0;

  myCharTypes[4].Chars := ['A', 'E', 'I', 'O', 'U'];
  myCharTypes[4].Counter := 0;

  myCharTypes[5].Chars := ['ö', 'ü', 'ä', 'ß'];
  myCharTypes[5].Counter := 0;

  myCharTypes[6].Chars := ['Ö', 'Ü', 'Ä'];
  myCharTypes[6].Counter := 0;

  s := 'qwaeiouäöüßÄÖÜQWR';
  count := CountCharTypes(s, myCharTypes);

  Label1.Caption := Format('Es wurden %d Zeichen gezählt', [count]);
  Label2.Caption := Format('davon waren %d Zeichen in myCharTypes[1]', [myCharTypes[1].Counter]);
  Label3.Caption := Format('davon waren %d Zeichen in myCharTypes[2]', [myCharTypes[2].Counter]);
  Label4.Caption := Format('davon waren %d Zeichen in myCharTypes[3]', [myCharTypes[3].Counter]);
  Label5.Caption := Format('davon waren %d Zeichen in myCharTypes[4]', [myCharTypes[4].Counter]);
  Label6.Caption := Format('davon waren %d Zeichen in myCharTypes[5]', [myCharTypes[5].Counter]);
  Label7.Caption := Format('davon waren %d Zeichen in myCharTypes[6]', [myCharTypes[6].Counter]);
end;

userF 18. Jun 2006 11:42

Re: Vokale Zählen
 
Danke Sharky ist echt nett gemeint von dir aber soviel verständniss darfst du von mir da nicht erwarten das ich das verstehe sorry.ich kenn die grundfunktionen ja nichtmal richtig wie ich bemerkt hatte. s soll was ganz einfaches sein meinte mein Lehrer aber ich versteh es trozdem irgendwie nicht sorry.

userF 18. Jun 2006 11:47

Re: Vokale Zählen
 
Nun hab ich das so gemacht aber es geht irgendwie trozdem nicht

[delphi]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
eingabe: TEdit;
vokale: TLabel;
Label2: TLabel;
ausgabevokale: TEdit;
ausgabekonsonanten: TEdit;
zaehlen: TButton;
schliessen: TButton;
procedure zaehlenClick(Sender: TObject);
procedure schliessenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
var satz:string;
procedure TForm1.BtnZaehlenClick(Sender: TObject);
var
i: Integer;
VokNum, KonstNum: Integer;
Satz: string;
begin
VokNum := 0;
KonstNum := 0;

// Groß-/Kleinschreibung ignorieren
Satz := AnsiLowerCase(EdtSatz.Text);

for i := 1 to Length(Satz) do
begin
if Satz[i] in ['a', 'e', 'i', 'o', 'u'] then
inc(VokNum)
else
inc(KonstNum);
end;

LblVokNum.Caption := IntToStr(VokNum);
LblKonstNum.Caption := IntToStr(KonstNum);
end;

3_of_8 18. Jun 2006 11:53

Re: Vokale Zählen
 
@SirThornberry: Meine Lösung beachtet Groß- und Kleinschreibung.

Noobinator 18. Jun 2006 11:55

Re: Vokale Zählen
 
Zitat:

Zitat von userF
Nun hab ich das so gemacht aber es geht irgendwie trozdem nicht

Delphi-Quellcode:
  for i := 1 to Length(Satz) do
  begin
    if Satz[i] in ['a', 'e', 'i', 'o', 'u'] then
      inc(VokNum)
    else
      inc(KonstNum);
  end;
du definierst jedes zeichen außer die Vokale als Konsonanten, aber auch Leerzeichen und Satzzeichen sind zeichen.

sonst finde ich keinen Fehler

3_of_8 18. Jun 2006 12:04

Re: Vokale Zählen
 
Hast du dem Ereignis OnClick bei deinem Button auch die Methode zaehlenClick zugewiesen?

semo 18. Jun 2006 12:05

Re: Vokale Zählen
 
definiere einmal bitte "es geht nicht" genauer....

userF 18. Jun 2006 12:11

Re: Vokale Zählen
 
Das habe ich nun,ob es so richtig sein kann weiß ich selbst noch nicht.Wollte Eure meinung dazu mal lesen.

Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    eingabe: TEdit;
    vokale: TLabel;
    Label2: TLabel;
    ausgabevokale: TEdit;
    ausgabekonsonanten: TEdit;
    zaehlen: TButton;
    schliessen: TButton;
    procedure zaehlenClick(Sender: TObject);
    procedure schliessenClick(Sender: TObject);
  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;
var
  Form1: TForm1;
implementation
var satz:string;

procedure TForm1.BtnZaehlenClick(Sender: TObject);
var
  i: Integer;
  VokNum, KonstNum: Integer;
  Satz: string;
begin
  VokNum := 0;
  KonstNum := 0;

  // Groß-/Kleinschreibung ignorieren
  Satz := AnsiLowerCase(EdtSatz.Text);
procedure TForm1.zaehlenClick(Sender: TObject);
  begin
    vokal:=0;
    konsonant:=0;
    for i:=1 to length(satz) do
      if (satz[i]='a') or (satz[i]='e') or (satz[i]='i')
         or (satz[i]='u') or (satz[i]='o') then
        inc(vokal;
      else
       inc(konsonant);
end;

  LblVokNum.Caption := IntToStr(VokNum);
  LblKonstNum.Caption := IntToStr(KonstNum);
end;
[edit=sakura] [delphi]-Tag geschlossen! Mfg, sakura[/edit]

semo 18. Jun 2006 12:25

Re: Vokale Zählen
 
erstens: wenn du quelltext postest, dann nutze bitte den button "Delphi-Code" hier oben um den Quelltext richtig zu formatieren, damit er schön lesbar ist, danke!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    EdtSatz: TEdit;
    LblVokNum: TLabel;
    LblKonstNum: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  vokal, KonstNum: Integer;
  Satz: String;
begin
  vokal   := 0;
  KonstNum := 0;

  // Groß-/Kleinschreibung ignorieren
  Satz := AnsiLowerCase(EdtSatz.Text);

  vokal    :=0;
  KonstNum :=0;
  for i:=1 to length(satz) do
    if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
      inc(vokal)
    else
      inc(KonstNum);


  LblVokNum.Caption := IntToStr(vokal);
  LblKonstNum.Caption := IntToStr(KonstNum);
end;

end.
So funktioniert es, da waren ein Haufen kleine Fehler drin. Wenn du kompilierst dann wirft dir der Compiler Meldungen aus. Wenn du diese nachverfolgst und einen nach dem anderen behebst, gelangst du auch allein ans Ziel.
Programmieren ist nun mal eine Tätigkeit die Geduld und Aufmerksamkeit abfordert.

userF 18. Jun 2006 12:31

Re: Vokale Zählen
 
Danke dir computer-glossar.de. ich schau mir das eben mal an

Noobinator 18. Jun 2006 12:37

Re: Vokale Zählen
 
Delphi-Quellcode:
....
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  vokal, KonstNum: Integer;
  Satz: String;
begin
  vokal   := 0;
  KonstNum := 0;

  // Groß-/Kleinschreibung ignorieren
  Satz := AnsiLowerCase(EdtSatz.Text);

  vokal    :=0;
  KonstNum :=0;
  for i:=1 to length(satz) do
    if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
      inc(vokal)
    else
      inc(KonstNum);


  LblVokNum.Caption := IntToStr(vokal);
  LblKonstNum.Caption := IntToStr(KonstNum);
end;

....
durchlaufen wir mal den Satz: " Hallo du! " mit dem code:

dann erkennt er 3 x Vokal: a o u
aber er erkennt 6x Konsonat: H L L Leerzeichen D !

der fehler ist Hier:
Delphi-Quellcode:
if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
      inc(vokal)
    else
      inc(KonstNum);
jedes Zeichen was kein Vokal ist, ist ein Konsonant.

das müsste so aussehen:
Delphi-Quellcode:
if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
      inc(vokal)
    else
if satz[i] in ['a'..'z'] then
      inc(KonstNum);

semo 18. Jun 2006 12:40

Re: Vokale Zählen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  vokal, KonstNum, sonderzeichen: Integer;
  Satz: String;
begin
  vokal        := 0;
  KonstNum     := 0;
  sonderzeichen := 0;

  // Groß-/Kleinschreibung ignorieren
  Satz := AnsiLowerCase(EdtSatz.Text);

  // jedes Zeichen des Satzes prüfen:
  for i:=1 to length(satz) do
    // prüfen ob wir einen Buchstaben haben:
    if (satz[i] in ['a'..'z']) then
    begin
      // unterscheiden zwischen vokalen und Konsonanten
      if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
        inc(vokal)
      else
        inc(KonstNum);
    end else
      inc(sonderzeichen);

  LblVokNum.Caption       := IntToStr(vokal);
  LblKonstNum.Caption     := IntToStr(KonstNum);
  LblSonderzeichen.Caption := IntToStr(sonderzeichen);
end;
auf diese Art kannst du nun noch die sonderzeichen herausbekommen.

userF 18. Jun 2006 12:40

Re: Vokale Zählen
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
EdtSatz: TEdit;
LblVokNum: TLabel;
LblKonstNum: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
vokal, KonstNum: Integer;
Satz: String;
begin
vokal := 0;
KonstNum := 0;

// Groß-/Kleinschreibung ignorieren
Satz := AnsiLowerCase(EdtSatz.Text);

vokal :=0;
KonstNum :=0;
for i:=1 to length(satz) do
if (satz[i] in ['a', 'e', 'i', 'u', 'o']) then
inc(vokal)
else
if satz[i] in ['a'..'z'] then
inc(KonstNum);

LblVokNum.Caption := IntToStr(vokal);
LblKonstNum.Caption := IntToStr(KonstNum);
end;

end.

So sollte es funktionieren?

TheAn00bis 18. Jun 2006 12:42

Re: Vokale Zählen
 
Noch ein Tip:

Es ist sinnvoll solche Aufgaben auf mehrere Prozeduren und auch Funktionen zu verteilen. Denn dann ist der Code viel übersichtlicher, du kannst eine einmal programmierte Prozedur oder Funktion immer wieder verwenden und Fehler sind leichter auszumerzen.

Dazu ein Beispiel:

Diese Prozedur gibt zu jedem ihr übergebenen Satz die Anzahl von Konsonanten und Vokalen zurück:

Delphi-Quellcode:
procedure ZaehleVokUndKons(pSatz: String; var pnVok, pnKons: Integer);
var i:integer;
begin
    pnVok := 0;
    pnKons := 0;
    for i:=1 to length(pSatz) do
      begin
        if (pSatz[i] in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']) then
            inc(pnVok)
        else if (pSatz[i] in ['a'..'z', 'A'..'Z']) then
            inc(pnKons);
      end;
end;
In deinem Projekt könntest du diese jetzt beliebig oft aufrufen, ohne alles nochmal tippen zu müssen. Aufgerufen würde sie beispielsweise so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var nVok,
    nKons: integer;
begin
  ZaehleVokUndKons(edit1.text, nVok, nKons);
  edit2.text := inttostr(nVok);
  edit3.text := inttostr(nKons)
end;
Noch besser wäre aber auch die Überprüfung, ob es sich bei einem Buchstaben um Vokale oder Konsonanten handelt auch "auszulagern", dazu bieten sich Funktionen an. Dann sähre das ganze so aus:


Delphi-Quellcode:
function istVokal(pChar: Char): Boolean;
begin
  if pChar in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] then result := true
    else result := false;
end;

function istKonsonant(pChar: Char): Boolean;
begin
  if (pChar in ['a'..'z', 'A'..'Z']) and (not isVowel(pChar)) then result := true
    else result := false;
end;

procedure ZaehleVokUndKons(pSatz: String; var pnVok, pnKons: Integer);
var i:integer;
begin
    pnVok := 0;
    pnKons := 0;
    for i:=1 to length(pSatz) do
      begin
        if istVokal(pSatz[i] )then
            inc(pnVok)
        else if istKonsonant(pSatz[i]) then
            inc(pnKons);
      end;
end;
Der Aufruf ist der selbe, wie oben.

Mir hat sowas früher im sehr geholfen, da ich mich selber auch verbessern wollte. Wenn es dich weniger interessiert dann überseh den Beitrag einfach. :D

Edit: Verwirrenden Bezeichner "Konst" in "Kons" geändert.

Airblader 18. Jun 2006 12:45

Re: Vokale Zählen
 
@userF

Es kam nun ein paar Mal, aber nimm doch bitte endlich mal die Delphi-Tags im Forum zur Hilfe, denn so ist dein QT absolut unleserlich formatiert und nimmt viel Lust an der Hilfe! ;)

air

semo 18. Jun 2006 12:48

Re: Vokale Zählen
 
@TheAn00bis

ich denke mal wenn du die postings hier verfolgt hast, wirst du gesehen haben das er blutiger anfänger ist und sicher froh ist wenn er es erst einmal ohne auslagern von methoden hinbekommt.

TheAn00bis 18. Jun 2006 12:50

Re: Vokale Zählen
 
Zitat:

Zitat von computer-glossar.de
@TheAn00bis

ich denke mal wenn du die postings hier verfolgt hast, wirst du gesehen haben das er blutiger anfänger ist und sicher froh ist wenn er es erst einmal ohne auslagern von methoden hinbekommt.

Jep, erstmal bestimmt, aber ich wollte es ja auch nur zum Weiterlernen anfügen, hinterher sieht er es sich vielleicht gerne mal an!
Ohne die vielen hilfsbereiten Nutzer hier, die mir gezeigt haben, wie ich Sachen hätte besser machen können würde ich heute bestimmt vieles sehr umständlich programmieren.

Schule kann sowas doch kaum vermitteln, denn im Unterricht kommt es in erster Line auf Grundlegende Prinzipien an. (OOP, dann Datenstruckturen, dann Visualisierung via UML und das Umsetzungen der Darstellung etc.)

semo 18. Jun 2006 12:52

Re: Vokale Zählen
 
ok, da geb ich dir recht.

wenns fürn unterricht ist, beeindruckt das sicherlich auch noch den lehrer :thumb:

userF 18. Jun 2006 12:55

Re: Vokale Zählen
 
TheAn00bis Danke für deine Überlegungen, für mich ist aber das einfachste schon echt schwer genug sorry. Ich brauch nur ein einfache kleines Programm schreiben welches mir die Konsonaten zählt und damit bin ich ja schon maßlos überfordert wie ich sehen muss. Selbst wenn ich den CODE Editieren will und oben auf Delphi Code klicke dazu schaff ich es nichtmal Euch den vernünftig zu zeigen.Ich geb mir alle Mühe aber ich bin da wohl zu doof dafür sorry

semo 18. Jun 2006 12:59

Re: Vokale Zählen
 
Liste der Anhänge anzeigen (Anzahl: 1)
deinen quelltext markieren, dann einfach auf diesen knopf klicken:

userF 18. Jun 2006 13:01

Re: Vokale Zählen
 
Sorry ich hatte das genau falsch rum gemacht.erst delphi Code geklickt und dann den Quelltext eingefügt. Werd es ab nun beachten sorry an alle nochmal


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz