Wątek przeniesiony 2016-12-05 22:00 z Delphi i Pascal przez furious programming.

Program z tablicami i błąd kompilacji

0

Witam,

Mam takie zadanie:
Napisz program, w którym do 10 elementowej tablicy jednowymiarowej wczytujemy N imion z klawiatury (N jest wprowadzane przez użytkownika podczas działania programu). Po wprowadzeniu imion, na ekranie ma pojawić się informacja o ilości imion kończących się na literę ‘a’. Po wykonaniu operacji program ma zapytać czy chcemy zakończyć program czy wykonać go jeszcze raz.

Wyszło mi coś takiego, ale wyskakuje błąd i nie wiem co z tym zrobić...

program imiona;

var
  j, n, licznik : integer;
  s : string;
  tab1 : array[1..10] of string;

begin

  writeln('Podaj ilosc imion:  ');
  readln(n);

  for j:=1 to n do

    begin

      write('Podaj imie: ');
      readln(tab1[j]);

    end;

  s:=tab1[j];
  licznik:=0;

     repeat

       if (s[Length(s)])='a' then licznik:=licznik+1;

       s:=tab1[j+1];

     until s=tab1[n];

     write('Ilosc imion konczacych sie na "a": ', licznik);


  readln;

end.

Za każdą pomoc z góry dziękuję.

0

No to podaj nam jaki błąd Ci się pojawia :)

0

Program się wysypuje xD

0
  1. Po forze nie zerujesz zmiennej j
  2. s:=tab1[j+1]; i tak zawsze będzie wczytywało tą samą wartość, bo j się dalej nie zmienia, no ale jest już poza tablicą....

Że tak dodam, to warunek stopu jest cienki, bo może przerwać wcześniej, dodatkowo porównywanie stringów jest mniej efektywne, niz porównywanie liczb.

0
uses
  Crt;
var
  LNames: array [1 .. 10] of String;
  LCount, LIndex, LCounter: Integer;
begin
  repeat
    ClrScr();

    Write('Names count: ');
    ReadLn(LCount);

    for LIndex := 1 to LCount do
    begin
      Write('Name ', LIndex, ': ');
      ReadLn(LNames[LIndex]);
    end;

    LCounter := 0;

    for LIndex := 1 to LCount do
      if LNames[LIndex][Length(LNames[LIndex])] = 'a' then
        Inc(LCounter);

    WriteLn('Counter: ', LCounter);
    Write('Press [Q] to exit...');
  until ReadKey() in ['q', 'Q'];
end.

Tłumaczyć raczej nie trzeba.

0

Po co ograniczać się do 10 imion? I po co trzymać cokolwiek w tablicy?

uses sysutils;

var n, i: integer;
var str: string;
var sum: integer = 0;
begin
  readLn(n);
  for i in [0..n-1] do
  begin
    readLn(str);
    inc(sum, ord(ansiLastChar(str) = 'a'));
  end;
  writeLn(sum);
end.

http://ideone.com/nShm0k

1 użytkowników online, w tym zalogowanych: 0, gości: 1