[ sanibo @ 31.10.2003. 10:08 ] @
Neka mi neko kaže šta ne štima u kodu ovog zadatka!
1. Napraviti program u kojem se proverava da li je uneta reč PALINDROM(reč koja kada se čita sa početka ili sa kraja je ista---npr. "ana")
Evo mog koda:

Code:


#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
int duzina,i;
char str1[200],*str2; /*pretpostavljamo da uneseni
string nece biti duzi od 200 znakova*/
printf("\nUnesi string: ");
scanf("%s",str1);
duzina = strlen(str1);
str2 = (char *) malloc(duzina + 1); /*alociranje duzina + 1 znak, dodatni
znak ce posluziti za null znak*/
for(i=0;i<duzina ;i++)
{
str2[i] = str1[duzina - i-1];
}
str2[duzina] = 0;

printf("\nUneseni: %s\nObrnuti: %s",str1,str2);
strcmpi(str1,str2);
if (str1[i]!=str2[i])
printf("\nRec nije palindrom!");
else
printf("\nRec jeste palindrom!");
getch();
return 0;



Hvala
[ filmil @ 31.10.2003. 10:29 ] @
Evo ispravljeni program. Samo bih te molio da objasniš čemu korišćenje strcmpi na onaj način na koji si naveo, i da objasniš zašto si mislio da se stringovi porede pomoću ==. (ako to nama objasniš biće jasnije šta ti nije jasno)

f

Code:

#include <stdio.h>
/*#include <conio.h> nije prenosivo, nemoj koristiti ako bas ne moras*/
#include <string.h>
#include <stdlib.h>

int main(void)
{
    int duzina,i;
    char str1[200],*str2; /*pretpostavljamo da uneseni
                string nece biti duzi od 200 znakova*/
    printf("\nUnesi string: ");
    scanf("%s",str1);
    duzina = strlen(str1);
    str2 = (char *) malloc(duzina + 1); /*alociranje duzina + 1 znak, dodatni
                          znak ce posluziti za null znak*/
    for(i=0;i<duzina ;i++)
    {
        str2[i] = str1[duzina - i-1];
    }
    str2[duzina] = 0;
    
    printf("\nUneseni: %s\nObrnuti: %s",str1,str2);
/*    strcmpi(str1,str2); ne radi nista jer se vrednost ignorise */
    if (strcasecmp(str1,str2) != 0 ) /* mozda ce tebi trebati ovde strcmpi f-ja*/
/* tvoj uslov ovde je pogresan. */
        printf("\nRec nije palindrom!");
    else
        printf("\nRec jeste palindrom!");
/*    getch();*/
    return 0;

[ sanibo @ 31.10.2003. 10:41 ] @
OK, OK, ja sam totalni debitant u "C-u". Tako da vidim da sam napravio glupost, ali dzaba sam pregledao cod nekoliko puta i nisam video.
Hvala na pomoci. U literaturi "strcmpi" piše da se koristi za poredjenje dva stringa, ali očigledno da je nisam pravilno upotrebio.
pozdrav
[ markom @ 31.10.2003. 11:35 ] @
Čisto sporta i razonode radi :-).

Jel' vam palo na pamet da ovaj program zapravo ne radi? :-) Zapravo radi samo za jednu unetu REČ koja je palindrom, ali ne i za celu frazu koja je palindrom.

Kako ispraviti dati program, a da radi za celu frazu? :-) /* rekoh da je poruka sportskog karaktera */


Marko.
[ MilošV @ 31.10.2003. 12:16 ] @
Pozdrav :)
Da uprostim, recimo da je duzina palindroma (moguceg) paran broj, moze se, sa % operatorom, srediti i za neparan...
Mala boolean f-ja za provjeru "palindromicnosti":
Code:

for(int i=0; i<duzinaMogucegPalindroma/2; i++)
  {
  if(moguciPalindrom[i]!=moguciPalindrom[duzinaMogucegPalindroma-(i+1)])
     return false;
  }
return true; /*ako prodje petlju*/

Nijesam ovo provjerio=kompajlirao, valjda fercera...
Svodi se na provjeravanje da li su n-ti znak sprijeda i n-ti znak otpozadi isti

Mislim da bi se sa istom f-jom dobio tacan rezultat i za neparan broj, ukoliko bi kompajler rezonovao da je 5/2=2 kada su 5 i 2 deklarisani kao int

Sve u svemu, mozda i lupam gluposti, desi mi se to ponekad... :)