Problem ze wskaznikami -zadanie

Problemy i ich rozwiązania w C++.

Problem ze wskaznikami -zadanie

Postprzez Malutki » niedziela, 5 czerwca 2011, 15:52

Cześć mam problem i nie wiem jak do niego podejść mam zadanie o takiej treści :

Napisz funkcję sortującą tablicę liczb całkowitych malejąco przez proste wybieranie. Algorytm sortowania:
1. Wyszukaj największy z n elementow tablicy
2. Zamień ten element z pierwszym elementem tablicy
3. W tym momencie największy element znajduje się na początku tablicy. Powtórz dwie pierwsze operacje dla
n-1 pozostałych elementow, następnie dla n-2 i tak dalej do chwili, gdy zostanie ostatni, najmniejszy
element.
Funkcja ma przyjmować następujące argumenty: adres tablicy do posortowania, rozmiar (liczbę elementow)
tablicy, znacznik wskazujący czy wyprowadzać wyniki pośrednie, to znaczy wartość tablicy po każdej zamianie
(1) czy też nie (0).

Jeśli ktoś by mógł się zlitować i pomóc w rozwiązaniu to bym był wdzięczny.
Malutki
Bywalec
Bywalec
 
Posty: 42
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Problem ze wskaznikami -zadanie

Postprzez Morfidon » niedziela, 5 czerwca 2011, 21:48

Morfidon
Administrator
Administrator
 
Posty: 593
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Problem ze wskaznikami -zadanie

Postprzez Malutki » poniedziałek, 6 czerwca 2011, 16:00

Panie Arkadiuszu przerobiłem tą lekcje z sortowaniem załączam na dowód nawet kawałek kodu :
Kod: Zaznacz cały
void Sort(int tab,int rozmiar){
       int k, t;
    for(int i = 0; i < rozmiar - 1; i++)
    {
         k = i;                           
         for(int j = i + 1; j < rozmiar; j++)
         if (tab[j] < tab[k])             
             k = j;
         t = tab[i];
         tab[i] = tab[k];
         tab[k] = t;
    }
}


lecz mój problem ciągle przysparza mi kłopotów nie bardzo rozumiem w zadaniu o co ma chodzić z przyjmowaniem przez funkcje znacznika pośredniego.
Pytałem nauczyciela ale on mi lakonicznie powiedział :( i zostałem w czarnej d. z tym.


Zrobiłem coś takiego do tej pory :

Kod: Zaznacz cały
#include <iostream>
using namespace std;

void funkcja( int tabl[] , int rozmiar,bool czy );
int pierwszy(int tab ,int rozmiar);
int main()
{
  int tab [] ={1,2,3,4,5,5,7,8,8,10};
  int * pierwszy;
  pierwszy=tab;
  int rozmiar=sizeof(tab)/sizeof(int);
    for(int i=0;i<rozmiar ;i++)
    {
        pierwszy=tab+i;
        cout << *pierwszy << endl;
    }
funkcja( tab,rozmiar,true);

}
void sortujmalejaco(int *adres,int rozmiar,bool znacznik)
{
    if(znacznik=true)
    {
       
               
    }
}

Proszę o jakąś podpowiedź co robię źle ,i nakierować moje myślenie na jakieś dobre tory .Program mogę sam napisać ale nie wiem jak się zabrać za to sortowanie ze znacznikiem pośrednim.
Malutki
Bywalec
Bywalec
 
Posty: 42
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Problem ze wskaznikami -zadanie

Postprzez Morfidon » poniedziałek, 6 czerwca 2011, 16:43

Jeżeli znacznik jest false to wystarczy posortować tak jak jest w kursie, jeżeli znacznik jest true to znaczy wyświetlić dodatkowo po każdej zamianie wszystkie wartości tablicy co ukazuje jak działa algorytm sortujący.
Morfidon
Administrator
Administrator
 
Posty: 593
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Problem ze wskaznikami -zadanie

Postprzez Malutki » wtorek, 7 czerwca 2011, 14:44

Panie Arkadiuszu cały czas próbuje ale coś robię nie tak proszę o poprawienie kodu jeśli to możliwe i powiedzenie w czym tkwi błąd załączam program ,który do tej pory zrobiłem , cały czas chodzi o to sortowanie.
Kod: Zaznacz cały
#include <iostream>
using namespace std;

int main() {
   int tab[]={0,1,2,3,4,5,6,7,8,9,10};
   int rozmiar=sizeof(tab)/sizeof(int);
   int * pierwszy;

   
   for(int i=0;i<rozmiar;i++)
   {
      pierwszy=tab+i;
      //cout << *pierwszy <<endl;
      for(int j=i+1;j<rozmiar;j++)
      {

         if(*pierwszy<*pierwszy+j)
         {
            int t; /inicjalizuje zmienna t;
            t=*pierwszy; //pod t przypisuje wartosc znajdujaca sie pod *pierwszy
            *pierwszy=*pierwszy+1; //pod *pierwszy przypisuje to co sie znajduje pod *pierwszy+1
            //*pierwszy+1=&t; tu mam blad cos zle robie

         }
      }

   }



}
Malutki
Bywalec
Bywalec
 
Posty: 42
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Problem ze wskaznikami -zadanie

Postprzez Morfidon » wtorek, 7 czerwca 2011, 15:18

Kod: Zaznacz cały
#include <iostream>

using namespace std;

void sortuj(int *, int, bool);
void PokazStan();
const int ile = 4;
int tab[ile];
int main()
{
    for (int i = 0; i < ile; i++)
    {
        cout <<"Podaj "<<i+1<<" liczbe ";
        cin >>tab[i];
        cin.ignore();
    }

    sortuj(tab, ile, 1);

    getchar();
    return 0;
}
void sortuj(int *tab,int rozmiar,bool znacznik)
{
    int k, t;

    for(int i = 0; i < rozmiar - 1; i++)
    {
         k = i;
         for(int j = i + 1; j < rozmiar; j++)
           if (tab[j] > tab[k])
             k = j;

         t = tab[i];
         tab[i] = tab[k];
         tab[k] = t;

        if(znacznik)
            PokazStan();
    }


}
void PokazStan()
{
     cout <<"Nasza tablica wyglada w kolejnosci nastepujaco: \n";
     for (int i = 0; i < ile; i++)
     {
         cout <<i+1<<". = "<<tab[i]<<"\n";
     }
}
Morfidon
Administrator
Administrator
 
Posty: 593
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Problem ze wskaznikami -zadanie

Postprzez Malutki » wtorek, 7 czerwca 2011, 15:24

Bardzo dziękuje ,jest Pan wielkim programistą :)
Malutki
Bywalec
Bywalec
 
Posty: 42
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46


Powrót do C++

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

cron