Wskazanie wiersza o najdłuższym słowie (bez cyfr i innych znaków)

0

Witam mam do zrobienia taki podpunkt
mam wskazać wiersz który ma najwięcej liter w macierzy typu znakowego
Zrobiłem to tak ale ta procedura źle wskazuje :

procedure naj_wiersz(M:Matrix);
var k,i,max,w,l:byte;
  begin
  max:=0;
  w:=0;
  for i:=1 to N do
  l:=0;
  begin
  for k:=1 to N do
  begin
  if (byte(m[i][k])>=65) and (byte(m[i][k])<=90) then
      l:=l+1;
   if (byte(m[i][k])>=97) and (byte(m[i][k])<=122) then
      l:=l+1;
  end;
  if (max<l) then
     begin
     w:=w+1;
     max:=l;
     end;
  end;
  writeln(w);
  end;     ; 

Ktoś pomoże mi ten problem rozwiązać ?

1

kod nieczytelny, bez formatowania

procedure naj_wiersz(M: Matrix);
var
  k, i, max, w, l: byte;
begin
  max := 0;
  w := 0;
  for i := 1 to N do
    l := 0;
  begin
    for k := 1 to N do
    begin
      if (byte(M[i][k]) >= 65) and (byte(M[i][k]) <= 90) then
        l := l + 1;
      if (byte(M[i][k]) >= 97) and (byte(M[i][k]) <= 122) then
        l := l + 1;
    end;
    if (max < l) then
    begin
      w := w + 1;
      max := l;
    end;
  end;
  writeln(w);
end;

pierwsza pętla jest zupełnie bez sensu

 for i := 1 to N do
    l := 0;

skąd się bierze wartość zmiennej N będącej końcową wartością w głównej pętli procedury

  for k := 1 to N do
0

@Kamil Bechta: a jak wygląda deklaracja typu Matrix?

for k := 1 to N do
begin
  if (byte(M[i][k]) >= 65) and (byte(M[i][k]) <= 90) then
    l := l + 1;
  if (byte(M[i][k]) >= 97) and (byte(M[i][k]) <= 122) then
    l := l + 1;
end;

Aż tyle kodu? Przecież jest do dyspozycji operator in i zbiory:

for k := 1 to N do
  if M[i, k] in ['a' .. 'z', 'A' .. 'Z'] then
    l := l + 1;

Poza tym, czym jest N i dlaczego nie używasz standardowego typu String dla ciągów znaków?

0

i podstawowy strukturalny błąd
budujesz procedurę, a należało by zbudować funkcję której parametrem jest macierz, a rezultatem funkcji indeks odpowiedniego wiersza macierzy

function  naj_wiersz(M:Matrix):integer;
begin 
    
end;
0

Zrobiłem już ten podpunkt i o dziwo działa, miałem wygenerować zawartość macierzy o wymiarach N i elementach znakowych. Sprawdzić, który wiersz jest najdłuższy i podać jego indeks.

1
type
  TCharMatrix = array [1 .. N, 1 .. N] of Char;

  function LongestRow(const AMatrix: TCharMatrix): Integer;
  var
    X, Y, LCount, LMax: Integer;
  begin
    Result := 0;
    LMax := 0;

    for Y := 1 to N do
    begin
      LCount := 0;

      for X := 1 to N do
        if AMatrix[X, Y] in ['a' .. 'Z', 'A' .. 'Z'] then
          LCount += 1;

      if LCount > LMax then
      begin
        LMax := LCount;
        Result := Y;
      end;
    end;
  end;

Tyle wystarczy. Indeks wiersza zwracany jest w rezultacie.

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