[ xeron @ 24.03.2006. 19:19 ] @
U cemu je greska ?

Sta program treba da radi ?
Prvo se unese duzina rijeci, onada unosimo tu rijec, program ispisuje rijec obrnuto ...
Code:
#include <windows.h>
#include <stdio.h>

main(){
       int wl;
       int i,j;
       printf("Duzina rijeci koju unosite iznosi: \n");
       scanf("%d",&wl);
       char word[wl];
       for(i=0;i<=wl;i++){
                          scanf("%c",& word[wl]);
                          
                          }
                          
                          printf("rijec obrnuto: \n");
                          for(i=wl;i<iwl;i--){
                                              printf("%c",word[wl]);
                                              }
                          
                          
                          
                                            
                                            system("pause");
                                            return 0;
                                            }
                          

OUTPUT:
duzina rijeci koju unosite : 3
unosite svoju rijec: npr. net

rijec obrnuto: ten

Mislim da je greska u


Code:
 for(i=i<wl;iwl;i--){
                                              printf("%c",word[wl]);
                                              }
[ Pharos @ 24.03.2006. 22:12 ] @
Aj potrudi se da tu reč makar uneseš kako treba. Ako to uradiš, ja ću ti odraditi ostalo.
Mrzi me da pišem from scratch :D
[ NrmMyth @ 24.03.2006. 22:52 ] @
Code:

for( int  i = strlen( rijec ) -1; i >= 0; --i )
        putchar( rijec[i] );
[ X Files @ 25.03.2006. 10:57 ] @
Evo ti jedan zadatak za vezbu:

Napraviti funkciju koja kao argument prima 'char*' (tj. neki nazovi string teksta) i koja ce
taj prosledjeni tekst okrenuti, tj. modifikovati ga da bude u obrnutom redosledu.

Zabranjeno je koristiti bilo koju bibliotecku funkciju.
[ xeron @ 25.03.2006. 16:11 ] @
pa ovo je trebalo biti cilj gore navedenog zadatka ...

samo jos ne kontam u cemu je greska :D
[ Pharos @ 25.03.2006. 16:40 ] @
Sine imaš mali milion grešaka.
Napravi ovo što ti je Molder (X Files) rekao.
Napraviš f-ju koja kao argument ima char*;
Onda će ti biti mnogo lakše da napišeš program i shvatićeš šta si ovde aj da kažem nalupao.
Da zanemarimo greške u kojima ne znaš kako sa scanf unosiš elemente niza, imaš velikih algoritamskih grešaka.
Jednostavno rečeno, ne znaš kako da uneseš reč.
Probaj samo normalno da ispišeš tu reč koju si kao uneo pa vidi uspeva li ili ne :D
[ X Files @ 25.03.2006. 17:45 ] @
Probaj nekako ovako /NETESTIRANO/
Code:

void okreni( char *t )
{
   int duzina = -1;
   while ( t[ ++duzina ] )
    ;

   char pomocna;

   for ( int i=0; i<duzina/2; i++ )
   {
      pomocna = t[i];
      t[i] = t[duzina-i-1];
      t[duzina-i-1] = pomocna;
   }
}


Code:

char *tekst = "neki tekst";

// printf ( ovde ispisi pocetni tekst ...

okreni( tekst );

// printf ( ovde ispisi krajni tekst ...



[Ovu poruku je menjao X Files dana 25.03.2006. u 18:46 GMT+1]
[ z@re @ 27.03.2006. 01:28 ] @
mene interesira sta ce ti onaj windows.h header :)

[ jedan_veoma_obican_kreten @ 27.03.2006. 05:51 ] @
A mene interesira zasto

int duzina = -1;
while(t[++duzina]);

a ne,

int trenutnaPozicija = 0;
while (t[trenunaPozicija++]) duzina++;

Izgleda da svi patimo od starih kafanskih trikova...
[ jedan_veoma_obican_kreten @ 27.03.2006. 05:57 ] @

A onda me jos interesuje a zasto bi pravili funkciju za obrtanje stringa kada ima dovoljno informacija da se string ODSTAMPA naopacke sto je i cilj zadatka. Da unistimo orginalni podatak?!

Code:

void stampajObrnuto(char *s)
{
  char *tmp = s;
  while (*tmp) tmp++;
  tmp--;
  while (tmp != s) {
    printf("%c", *tmp);
    tmp--;
  }
  printf("%c", *tmp); 
}

void stampajObrnuto(char *s)
{
  if (*s) {
    stampajObrnuto(s++);
    printf("%c", *s);
  }
}
[ xeron @ 27.03.2006. 13:19 ] @
Code:
#include <stdio.h>
#include <windows.h>// za koristenje system("pause")

int main ()
{
    int a,i;
    printf ("unesite broj slova");
    scanf ("%d",&a);
    char rijec [a];
    char obrnuto [a];
    for (i=0;i<=a;i++)
    {
        scanf ("%c",&rijec[i]);}
    for (i=a;i>=0;i--)
    {
        printf ("%c",rijec[i]); 
    }
    system ("pause");
    return 0;
}


Ovo je rješenje .....
[ X Files @ 27.03.2006. 14:25 ] @
Za system("PAUSE")dovoljan je mislim:

#include "stdlib.h"

Ne daj Boze da je potreban ceo Windows :)

[ z@re @ 27.03.2006. 22:57 ] @
I jos da napomenemo da stdlib.h header je dio ANSI C standarda, dok windows.h nije.

Uvijek koristi standardne headere naspram OS-specificnih za ovako jednostavne zadatke. To ce meni koji koristim BSD omogucit da ja copy pastam tvoj kod iz browsera i kompajliram ga, bez da moram radit preinake.

Jos cemo malo napominjat, sve mi se cini. Linija

Code:

char rijec[a];


nije dozvoljena unutar ANSI C standarda. Ovisno od kompajlera do kompajlera, moze proci ili ne. Inicijalizacija polja uvijek treba imati konstantu, a ne varijablu. Tvoj slucaj bi se rijesio ovako :

Code:

char *rijec = (char *)malloc((sizeof(char) * a)  + 1);


Dalje, vjerujem da ti ne treba varijabla za drugo polje charova, jer koristis samo jedno. Pa onda, unos mozes jednostavno rijesiti gets funkcijom, bez da bespotrebno vrtis nekakve petlje i upisujes znak po znak. Petlja za ispis je dobra, iako bi ja tu koristio putchar funkciju umjesto printf, ali moze i ovako. Moze se i izbjec da korisnik mora prvo upisati broj slova u rijeci, ali vjerujem da ti je to i neka poanta za zadatak. Dakle, napravis finu dinamicku alokaciju sa mallocom kao na primjeru gore, i jos mozes i provjerit da malloc slucajno nije vratio NULL pointer sto bi znacilo da iz nekog razloga nije uspio alocirat dovoljno memorije za tvoju rijec (nevjerujem da se ovo moze desit, ali je dobra programerska praksa). Gets funkcija ima nekakvih problema, ali uvijek mozes koristiti dobru fgets funkciju i napomenes da ti je ulaz stdin. I na kraju, kod ovog nacina kako ti upisujes znak po znak sa scanf, umjesto

Code:

scanf("%c", &rijec[i]);


koristi

Code:

scanf("%c", (rijec + i));


Ovo dodatno poboljsava kod jer umjesto dobivanja adrese nekog mjesta u polju koristimo vec gotovu adresu, koju ne treba vaditi iz nicega.

[Ovu poruku je menjao z@re dana 27.03.2006. u 23:58 GMT+1]
[ xeron @ 28.03.2006. 09:17 ] @
hvala