Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Szukanie najdłuższego wyrazu - co jest źle?

Raulpg 09 Cze 2011 09:44 1344 3
  • #1 09 Cze 2011 09:44
    Raulpg
    Poziom 12  

    Cześć. Mam takie zadanie: napisz funkcję, do której wysyłasz wypełnioną tablicę znaków, czyli napis. Zadaniem funkcji jest zwrócenie pozycji wskazującej, gdzie w tym napisie rozpoczyna się najdłuższy wyraz. Zastanów się nad tym, jak przekazać informacje, gdy napis nie zawiera żadnego wyrazu.

    Wskazówka: załóż, że wyraz to nieprzerwany ciąg dowolnych liter.

    Program, który napisałem porównuje dwa kolejne wyrazy ze sobą i wyświetla ten, który ma więcej liter. Wydaje mi się, że brakuje jednej pętli for. Oto, co stworzyłem:

    Code:
    # include <stdio.h>
    
    # include <string.h>

    int napis(char tab[10]) // Funkcja na NAPIS
    {
      int k,i,n=4;
      for (i=0; i<n; i++)
          {
             printf("\n Podaj element [%d] = ",i);
             gets(&tab[i]); // umozliwia wprowadzanie spacji a po niej kolejny ciag znakow w przeciwnienstwie do "scanf"
          }
      return tab[10];
    }

    void porownaj(char tab[10])
    {
      int i, z, n=4;
      char max[10]="0";
     
      z = strcmp(max,tab);
      if (z<=0) printf("\n Najdluzszy napis jest na pozycji %s", tab);
      else printf("\n Najdluzszy napis jest na pozycji %s", max);
    }                                       

    main ()
    {   
        int suma;
        char tab[10];
       
        suma = napis(tab); // wywolanie funkcji
        porownaj(tab);

        getchar();
        return 0;
    }

    0 3
  • #2 09 Cze 2011 10:00
    szelus
    Specjalista - Mikrokontrolery

    1. Masz mieć na wejściu jeden napis (łańcuch), a nie oddzielne wyrazy.
    2. Napis musisz przeglądać w pętli, odnajdując początek i koniec kolejnego wyrazu (na podstawie kodu znaku).
    3. Jak znajdziesz następny wyraz, to porównujesz go z poprzednim i zapamiętujesz pozycję i długość dłuższego.
    4. itd
    5. Funkcja ma zwracać (jako wynik) pozycję wyrazu, więc nie może być typu void.
    6. Nie skupiaj się (na razie) na wprowadzaniu/wyprowadzaniu danych.
    7. Popraw tutuł, bo obecny nie ma nic wspólnego z problemem. "Szukanie najdłuższego wyrazu", czy coś takiego.
    8. Kod wklejaj w znacznikach SYNTAX.

    0
  • #3 09 Cze 2011 10:52
    Raulpg
    Poziom 12  

    to takie pytanie - skad program ma wieziec, gdzie sie napis konczy a gdzie zaczyna? zakladajac ze nie bede ich oddzielal spacjami?

    0
  • #4 09 Cze 2011 12:25
    szelus
    Specjalista - Mikrokontrolery

    Nie napis, a wyraz.

    Cytat:
    Wskazowka: zaloz, ze wyraz to nieprzerwalny ciag dowolnych liter.
    pdkr. moje

    Jeżeli w tekście (napisie) kolejne litery nie są rozdzielone innym znakiem, to jest to ciągle ten sam wyraz. Sugeruję zapoznanie się z funkcją isalpha() i wariantami (zakładając 8-mio bitowy kod znaku). http://linux.die.net/man/3/isalpha - to jest akurat standard, na windowsie będzie tak samo.

    0