[C]Problem z programem Algorytm sortowania przez wybieranie

Dobry,

mianowicie do 24 powinienem dzisiaj skończyć bardzo prosty projekcik. Ale wszystko się pokićkało, że szkoda gadać. A roboty jeszcze sporo z innych rzeczy.

Dokładnie to wczoraj zrobiłem ten program I DZIAŁAŁ! Jednak potem pozmieniałem i nie wiem jakim cudem, po jakimś kompilowaniu i nadpisaniu pliku już nie działało.

-Środowisko: DEV-C++ najnwoszy z kompilatorem gcc (najnowsza beta), a także pod unixem gcc wywalał błędy (nie będę w stanie pokazać logów z gcc pod UNIXem)

-Windows 7 64bit

-Język C

Problem

Zadanie to stworzyć program, gdzie użytkownik wprowadza standardowym wejściem (klawiatura) znaki, które są przypisywane elementom tablicy. Potem używając sortowania przez wybieranie uporządkowuje znaki według ich wartości w kodzie ASCII.

Mój kod mianowicie wygląda tak:

#include 

#include 

#define MAXTAB 100


void SelectionSort(int n, char t[]);

void swap(char& a, char& b);

int i = 0;


main() 

{

   char TabWej[MAXTAB];

      for(i=0;i
      TabWej[i] = ' '; //przypisuje wszedzie spacje, zeby potem wyswietlanie uporzadkowanej tablicy bylo przejrzyste

   fgets(TabWej, sizeof(TabWej), stdin); //bezpieczniej niz scanf

       for(i=0;i
       printf("%c ", TabWej[i]);

   printf("\n");

   SelectionSort(MAXTAB, TabWej);

      for(i=0;i
      printf("%c ", TabWej[i]);

      printf("\n");

      system("pause");

      return 0;

}

void swap(char& a, char& b) /* TUTAJ BŁĄD - moja wiedza o wskaźnikach i tablicach jest znikoma, w ogóle w C jestem NAJGORSZYM LAIKIEM - co jest nie tak i jak

{ * poprawic w ogole ta funkcje? Jej zrodlo takze (bo pewnie trzeba bedzie jakos inaczej operowac na a,b,temp*/

   char temp = a;

   a = b;

   b = temp;

}

void SelectionSort(int n, char t[])

{

   int j, k;

   i = 0;

   for(i=0;i
   {

      k=i;

      for(j=i+1;j
         if((int)t[j]<(int)t[k]) /* pobiera wartosc znaku ascii danego elementu tablicy */

         k=j;

      swap(t[k], t[i]);

   }

}

A błędy są mianowicie takie:

error: syntax error before & token (6 linia)

error syntax before & token (27linia)

29 linia error ‘a’ undeclared (first use in this func)

29 error: (Each undeclared indentifier is reported only once

29: for each function it appears in.

30: b undeclared

Funkcja powinna porzadkowac ten wprowadzony ciag znakow wedlug znakow ASCII. Mam nadzieje, ze widzicie jakies oczywiste bledy czy cos, prosilbym o pomoc. Na szczescie koncowego programu dzisiaj nie musze wysylac, jednak tez jestem zainteresowany jego ulepszeniem. Nie prosze o gotowe rozwiazania, ale chociaz o porady - co przeczytac, co zmienic. Program ma byc prosty i nieskomplikowany.

Dziekuje i pozdrawiam !

W C wskaźnik na typ T to T*, a nie T& (to w C++, referencja, natomiast w C nie ma takiej konstrukcji). Aby odwołać się do wartości wskazywanej przez wskaźnik należy użyć operatora *.

Zobacz http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html

#include 

#include 

#define MAXTAB 100


void SelectionSort(int n, char t[]);

void swap(char *a, char *b);

int i = 0;

char *a, *b;


main()

{

      char TabWej[MAXTAB];

           for(i=0;i
           TabWej[i] = ' ';

      fgets(TabWej, sizeof(TabWej), stdin);

                    for(i=0;i
                    printf("%c ", TabWej[i]);

      printf("\n");

      SelectionSort(MAXTAB, TabWej);

           for(i=0;i
           printf("%c ", TabWej[i]); /* MOZNA USUNAC */

           printf("\n");

      system("pause");

      return 0;

}

void swap(char& a, char& b)

{

     char temp = *a;

     *a = *b;

     *b = temp;

}

void SelectionSort(int n, char t[])

{

     int j, k;

     i = 0;

     for(i=0;i
     {

        k=i;

        for(j=i+1;j
           if((int)t[j]<(int)t[k])

           k=j;

        swap(&t[k], &t[i]); /* CZY NA PEWNO & ? */

     }

}

Wprowadziłem zmiany, jak zalecają w stronce - czyli poprawnie używając wskaźników… a mimo to dalej wyświetla błędy. Jak na zdjęciu: http://i52.tinypic.com/4jx1eo.jpgZrobiłem tak jak podane w przykładzie działającym - w prototypie funkcji

void swap(char *a, char *b);

a w deklaracji

void swap(char& a, char& b)

. No i wywołuję funkcję w następujący sposób:

swap(&t[k], &t[i]);

Czego słuszności nie jestem przekonany. EDIT: Jak deklaruję zmienne

char *a, *b;

na początku programu, to zmienia się lista błędów:

http://i53.tinypic.com/29vi786.jpg

Jednak nie podoba mi się deklarowanie tych zmiennych (To chyba nie będzie działać teraz w ogóle).

Deklaracja nie może różnić się od definicji, w obu przypadkach ma być:

void swap(char *a, char *b)

wywołanie:

swap(&t[k], &t_);_

jest poprawne ale można też tak:

swap(t+k,t+i);

Rzeczywiście, wielkie dzięki. Kosmetyczna drobnostka i :wink:

Co nie zmienia faktu, że przede mną przerobienie porządnie jakiejś książki + ćwiczeń - przynajmniej na potrzeby projektów i ćwiczeń z programowania, bez większego szału.

Ale jeszcze raz dzięki.

pozdrawiam,

n0need