Autor Wątek: zadanie z tablicami  (Przeczytany 3851 razy)

Offline _user

  • Użytkownik

# Maj 06, 2015, 22:44:35
to nie byl moj kod, znalazlem w necie ze dziala jak sttrev, timus dal dobry przyklad ale funkcja strrev mi nie dziala i nie wiem co mam teraz zrobic ;c

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline _user

  • Użytkownik

# Maj 06, 2015, 23:05:02
Dobra napisalem juz cos tam ale dalej nie dziala do konca jak powinno:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int pal(char tab[],char rev[]){
  if(strcmp(tab, rev)!=0){
    do{
      int suma=atoi(tab) + atoi(rev);
      printf("%i", suma);
    }while(strcmp(tab, rev)==0);
  }
}

int main(void){

  char tab[20],rev[20];
  scanf("%s", tab);
  int x=strlen(tab);
 
  for(int i=0,j=x-1;i<x;++i,--j)
    rev[i]=tab[j];
 
  pal(tab,rev);
  return 0;
}
tam w funkcji pal powinno dodawac az bedzie to palindromem tak ? ale jednak tak nie robi, a funkcja jest taka jak podal timus, jak to naprawic ?

Offline MaxGarden

  • Użytkownik
    • Profil na warsztacie

  • +1
# Maj 06, 2015, 23:21:14
Okomentuj każda linię co według Ciebie dokładnie robi i wróć z tym.

Offline _user

  • Użytkownik

# Maj 06, 2015, 23:22:03
wiem funkcja pal jest do niczego, ale nie umiem naprawic tego kodu

Offline mawpa

  • Użytkownik

# Maj 06, 2015, 23:22:30
Wiem, że to szalony pomysł, ale... Może sprawdzaj, czy suma jest palindromem i jeśli nie jest, to powtarzaj całość od nowa?

Offline _user

  • Użytkownik

# Maj 06, 2015, 23:26:00
ale jak sprawdzic czy suma jest palindromem, skad wziasc revers sumy.

Offline wozix

  • Użytkownik

# Maj 07, 2015, 00:42:48
ale jak sprawdzic czy suma jest palindromem, skad wziasc revers sumy.
Uwaga protip: trzeba napisać odpowiedni algorytm.
Ewentualnie http://pl.wiktionary.org/wiki/rewers .
« Ostatnia zmiana: Maj 07, 2015, 00:47:28 wysłana przez wozix »

Offline Xirdus

  • Moderator

  • +6
# Maj 07, 2015, 01:01:15
No to zamykam.

Edit: nie to kliknąłem i wpierw się nie domknęło...
« Ostatnia zmiana: Maj 07, 2015, 01:03:39 wysłana przez Xirdus »

Offline timus

  • Użytkownik

# Maj 07, 2015, 01:02:38
Najprościej chyba ze zamianą int'a z powrotem na tekst:
#include <stdio.h>
#include <string.h>

// strrev i strdup to funkcje niestandartowe wiec nie kazda libc musi je zawierac
// strrev do zdobycia tu: http://stjarnhimlen.se/snippets/strrev.c
// a strdup tu: https://gist.github.com/reagent/3758387

// w kodzie brak zwalniania pamieci, o czym w C wypada pamietac

char* magic(char* input)
{
char* reverse;

reverse = strdup(input); // robimy duplikat input
strrev(reverse);         // odwracamy go

// wypadaloby dodac jakies sprawdzanie czy jest to liczba
if(strcmp(input, reverse) != 0)
{
int sum = atoi(input) + atoi(reverse); // sumujemy
printf("%i\n", sum);                   // wyswietalmy na ekranie

char buffer[32];
sprintf(buffer, "%d", sum); // zameniamy liczbe na tekst

return strdup(buffer);      // zracamy duplikat
}
return NULL;
}

int main()
{
char* input;
scanf("%s", input);
while(input) // dopuki input nie NULL'em
input = magic(input);
}

Ja nie jestem programistą C, ale tak na oko brakuje ci zmiennej tymczasowej. Nie sądzę, by "daszki" mogły cię przed tym ochronić
Właśnie o to chodzi aby nie było zmiennej tymczasowej, a to "daszki" to alternatywa wykluczająca(XOR). I nie powinno mieć to znaczenia w jakim języku piszesz. http://en.wikipedia.org/wiki/XOR_swap_algorithm