Program sprawdzający, czy napis jest palindromem

2015-01-19 20:47
0

Witam Wszystkich Chciałem zapytać czy program który napisałem jest zrobiony dobrze jeśli nie prosił bym o Poprawienie i wytkniecie błedu.z Góry Dziekuje

Treść : Napisz funkcję, która dostaje jako argument napis, i zwraca 1 w przypadku
gdy napis jest palindromem1 oraz 0 w przeciwnym wypadku

Kod:

#include <stdio.h>

int dlugosc(char *napis)
{
    int d=0;
    while(napis[d]!='\0')
    d++;
    return d;
}

int porownanie(char *napis1, char *napis2)
{
    int i,x;
    if(dlugosc(napis1)!= dlugosc(napis2)) return 0;
    for(i=0;i<dlugosc(napis1);i++)
    {
        for(x=dlugosc(napis1);x>=0;x--)
        {
            if(napis1[i]!=napis2[x]) return 0;
            else return 1;
        }
    }
}
int main()
{
    int wyw;
    char napis1[]="kajak";
    char napis2[]="kajak";
    wyw=porownanie(napis1,napis2);
    printf("%d", wyw);
    return 0;
}

Pozostało 580 znaków

2015-01-19 20:52
2
  1. Masz problem z i++ - http://4programmers.net/Forum/1101404
  2. Zapoznaj się z funkcją strlen()
  3. Jeżeli masz pętle z warunkiem: i<dlugosc(napis1) to ta funkcja dlugosc() odpala ci się na każdym kroku pętli.
  4. Zadanie mówi o przekazaniu jednego napisu
  5. Zadanie prosi o sprawdzenie czy napis jest palindromem twoja realizacja sprawdza czy jeden napis jest odwróconą wersją drugiego

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-19 20:53
0

Źle, bo nieoptymalnie.
W C istnieje funkcja strlen, nie potrzebujesz dwóch pętli do sprawdzenia czy jest palindromem.

Nie mogłem korzystac z funkcji biblioteki string.h zapomniałem dodac sory :) - Miloszex112 2015-01-19 20:54

Pozostało 580 znaków

2015-01-19 21:10

Marne masz szanse z programowaniem skoro z takimi prostymi rzeczami sobie nie radzisz:

int ispalindrom(const char *str)
  {
   const char *p=str,*q=str;
   while(*q) ++q;
   while(p<--q) if(*(p--)!=*q) return 0;
   return 1;
  }

int main()
  {
   printf("%d",ispalindrom("kajak"));
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-19 21:11
Dzieki ale mam nadzieję ze jakos sobie poradzę :) - Miloszex112 2015-01-19 21:13
Jeżeli masz sporo kasy aby wynajmować fachowców na kod powyżej 20 wierszy to spoko - poradzisz sobie. Jak nie ... to masz problem, właśnie straciłeś dobrą okazje na naukę. - _13th_Dragon 2015-01-19 21:14
Chodziło mi o to żę mam nadzieję ze uda mi sieę nauczyć tego programowania ale fakt faktem widzę ze mi nie idzie :/ - Miloszex112 2015-01-19 21:18
A Jakie jest twoje zdanie Każdy może nauyczć sie programowania? czy to raczej nie jest dla Każdego - Miloszex112 2015-01-19 21:21
Prymitywnych podstaw - każdego się da nauczyć. Programista - to już nie dla każdego, ale widziałem na własne oczy osobę kompletnie nie nadającą się na tym stanowisku. - _13th_Dragon 2015-01-19 21:24
:/ Mam nadzieję ze jednak jakos dam sobie radę , narazie z programowaniem mam stycznośc w sumie nie całe 3 miesiące i to praktycznie tylko tyle co na zajeciach bo nie znajduje za duzo czasu by programowac w domu i mam duzo zaległości :/ - Miloszex112 2015-01-19 21:39

Pozostało 580 znaków

2015-01-19 21:26
2

Jeśli to na ocenę to zaplusujesz robiąc to jednoprzebiegowo (bez znajomości długości):
http://www.liafa.univ-paris-d[...]isplexity/Angers/mallmann.pdf

Edit: wywaliłem to drugie bo wymaga długości ciągu.


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 2x, ostatnio: vpiotr, 2015-01-19 21:39
To drugie to nieco inne zadanie ;) To pierwsze owszem jeden przebieg, ale trudno mi wyobrazić takie warunki przy których da lepszy czas niż normalne dwuprzewodowe porównanie. - _13th_Dragon 2015-01-19 21:30
To drugie pewnie można wykorzystać w ten sposób że jeśli wynik = n to mamy palindrom. A to pierwsze - to jakieś wielomiany, pewnie jakby się uprzeć to można zrobić na FPGA i będzie tak samo albo lepiej wydajne jak implementacja dwuprzebiegowa. To raczej ciekawostka do zastosowań gdzie naprawdę możemy tylko coś przeczytać jeden raz. - vpiotr 2015-01-19 21:33
"To drugie pewnie można wykorzystać w ten sposób że jeśli wynik = n to mamy palindrom" - fajnie zaś n - znajdziemy w drugim przebiegu ;P "... to jakieś wielomiany ... lepiej wydajne jak implementacja dwuprzebiegowa" - od kiedy złożoność wielomianowa jest lepsza od O(n), bo dwuprzebiegowy to wciąż O(n) mam nadzieje że pamiętasz to. - _13th_Dragon 2015-01-19 21:50
Nie chodziło mi tam o złożoność. Na końcu jest podana - ok. O(n*log(n)/faktor) - czyli bardziej złożone od O(n), ale jednoprzebiegowo - i o to chodziło. - vpiotr 2015-01-19 22:17
Czyli wracamy do mojego pierwszego komentarza. Ja się zgadzam że pomysł ciekawy, tylko zastanawiam się przy jakich warunkach ten algorytm da lepszy czas niż normalne dwuprzebiegowe porównanie. - _13th_Dragon 2015-01-19 22:24
To raczej nie chodzi o czas, tylko warunki. Mogą być sytuacje gdy to jest niezbędne (np. mało pamięci lub wysoki koszt powtórnego odczytu). Więcej o takich algorytmach: http://en.wikipedia.org/wiki/Streaming_algorithm i http://en.wikipedia.org/wiki/Online_algorithm - vpiotr 2015-01-20 09:46

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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