[Pascal] loopje String A..Z

Pagina: 1
Acties:

  • jordan2k
  • Registratie: Juli 2001
  • Laatst online: 23-08 17:26
Eerst maar eens de werking (wat het moet gaan doen).
Je voert een woord in bv. "woord" :)
Geef het ingevoerde woord weer.
en vertel daarna hoeveel X A t/m Z er in zit.

Loop vast op het loopje dat gemaakt moet worden voor aantal keer A B C D enz.
Heeft iemand een idee hoe ik het kan aanpaken want in het school boek staat het niet en we kunnen het ook niet vinden. :(

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{--------------------------------------------------}
{ Programmanaam     : String                       }
{ Omschrijving      : in: woord uit: aantal leters }
{ File name         : string                       }
{ Taal              : Pascal                       }
{--------------------------------------------------}

program woord;
uses crt;


var s:string;
    c:char;
    i:integer;
    counta:integer;
    z:array['a'..'z'] of string;

begin
  begin
    clrscr;
    write('voer een woord in: ');
    readln(s);
    clrscr;
    write('ingevoerde string is: ',s);
    readln;
    end;
  clrscr;
  for i:= 1 to length(s) do
  begin
    c:=s[i];
    write(c:2);
    end;
  readln;
  counta:=0;
  for i:=1 to length(s) do
  begin
    if (s[i]='a') or (s[i]='A') then counta:=counta+1;
  end;
  write('Aantal x A ',counta);
  readln;

end.

[ Voor 15% gewijzigd door jordan2k op 05-03-2003 20:45 ]


Verwijderd

Even wat pseudo code:
newStr = converToUpper(s);
for (i = 0; i < newStr.Length(); i++)
DO
aantal[(newStr[i] - 'A')]++;
OD

Success

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik zou een array maken met een lengte van 26; en dan letter voor letter door een woord heen lopen en telkens het getal in de array met 1 ophogen. Bedenk ook even dat scriptrequests hier niet worden gewaardeerd :)

edit:
great minds.... :z

[ Voor 8% gewijzigd door Spider.007 op 05-03-2003 21:03 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program woord;
uses crt;


var 
   s:string;
   i : integer;
  freq : array[1..26] of integer;
begin
  { init }
  for i := 1 to 26 do
     freq[i] := 0;

  { Invoer }
   clrscr;
   write('voer een woord in: ');
   readln(s);
   clrscr;
   writeln('ingevoerde string is: ',s);
   writeln('Letter frequentie: ');
   s := uppercase(s);  { weet niet of dit gaat in std pascal }
   for i := 1 to length(s) do
   begin
        if (ord(s[i]) - 64 >= 1) and (ord(s[i] - 64 <= 26) then
        freq[ord(s[i]) - 64] := freq[ord(s[i]) - 64];'
  end;
  for i := 1 to 26 do
     writeln('Letter ' + chr(i + 64) + ' : ' + inttostr(freq[i]));
   readln;
end.


die uppercase en inttostr werkt denk ik niet zo 123 in standaard pascal.

[ Voor 11% gewijzigd door Verwijderd op 05-03-2003 21:14 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Wat zou je denken van een turflijstje (mooi woord: frequentietabel)? Je declareert eerst een array-type waarin je gaat turven hoe vaak een bepaalde letter voorkomt:
Delphi:
1
2
type
  TLetters: array[0..255] of Integer;
Dan declareer je een variabele van het type TLetters en vul je alle array-elementen met het cijfer 0:
Delphi:
3
4
5
6
var
  Letters: TLetters;
begin
  FillChar(Letters, SizeOf(Letters), 0);

Nadat de gebruiker het woord heeft ingevuld, loop je het woord langs van de eerste tot de laatste letter. Als bijvoorbeeld de n-de letter het karakter 'A' is, verhoog je in de array de waarde op de 65ste positie (Ord('A') = 65) met 1. Als je het hele woord bent langsgelopen, kun je in de array terugvinden hoe vaak iedere letter in het alfabet (en ook leestekens en dergelijke) in het woord voorkomt.
Delphi:
7
8
9
  { gebruiker woord laten invoeren in de variabele Woord}
  for i := 1 to Length(Woord) do
    Letters[Ord(Woord(i))] := Letters[Ord(Woord(i))] + 1;
Nu nog weergeven hoe vaak A t/m Z voorkomen:
Delphi:
10
11
12
13
14
  for i := Ord('A') to Ord('Z') do
  begin
    Frequentie := Letters[i];
    WriteLn(Format('Aantal x %s: %d', [Chr(i), Frequentie]));
  end;

[ Voor 8% gewijzigd door Tomatoman op 05-03-2003 21:13 . Reden: regelnummering ]

Een goede grap mag vrienden kosten.


  • jordan2k
  • Registratie: Juli 2001
  • Laatst online: 23-08 17:26
Spider.007 schreef op 05 March 2003 @ 21:02:
Ik zou een array maken met een lengte van 26; en dan letter voor letter door een woord heen lopen en telkens het getal in de array met 1 ophogen. Bedenk ook even dat scriptrequests hier niet worden gewaardeerd :)

edit:
great minds.... :z
is geen script req. (is niet zo bedoeld) zoek aleen een paar tips hoe we het kunnen aanpakken. heb denk ik nu wel wat meer duidelijkheid van het hoe en wat.

Allemaal Bedankt gaat nu vast wel lukken.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

type TLetters: array[0..255] of Integer;
Of nog netter:
Delphi:
1
2
var
  Letters: array['A'..'Z'] of Integer;

Ziet gek uit, maar kan echt ;)

/edit
en dan verderop dus iets als
Delphi:
1
2
3
for i := 1 to Length(Woord) do
   if Woord[i] in ['A'..'Z', 'a'..'z'] then
      Inc(Letters[UpCase(Woord[i])]);

Waarbij je natuurlijk eerst alle elementen van die array op 0 gezet hebt ;)

[ Voor 57% gewijzigd door _Thanatos_ op 06-03-2003 10:10 ]

日本!🎌

Pagina: 1