• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sortowanie przez wstawienie problem ze wskaźnikami

42 Warsaw Coding Academy
0 głosów
318 wizyt
pytanie zadane 16 grudnia 2015 w C i C++ przez dzidziamocarz Początkujący (370 p.)

Mam problem bo po obejrzeniu kursu Pana Mirosława postanowiłem wykonać sam sortowanie przez wstawienie. Nie do końca umiem jeszcze używać wskaźniki i wyprodukowałem taki kod w języku C sugerując się filmikiem.

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int ile;
clock_t start,stop;
double czas;


void Sortowanie( int *tab, int size )
{
    int temp, j, i;

    for( i = 1; i < size; i++ )
    {
        temp = tab[ i ];

        for( j = i - 1; j >= 0 && tab[ j ] > temp; j-- )
             tab[ j + 1 ] = tab[ j ];

        tab[ j + 1 ] = temp;
    }
}


int main()
{
    int i;
    printf("Podaj ilosc liczb: \n");
    scanf("%d", &ile);

    int *tablica;
    tablica=new int [ile];

    srand(time(NULL));

     for( i=0; i<ile; i++)
    {
        tablica[i] = rand()%100+1;
    }

   printf("sortuje teraz przez wstawianie \n");

     start = clock();
    Sortowanie(tablica,ile);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    printf("Czas sortowania przez wstawienie: %lf s", czas);

    printf("Po posortowaniu: ");
    for (i=0, i<ile, i++){
            printf("%d", tablica[i]);
    }
    delete [] tablica;
    return 0;
}

Program wyświetla mi błąd przy przypisywaniu wskaźnikowi wartości tablicy. Nie jestem pewny czy tak powinna wyglądać dynamiczna alokacja tablicy w C.

1 odpowiedź

0 głosów
odpowiedź 16 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 16 grudnia 2015 przez Sebastian Fojcik
 
Najlepsza

W języku C nie ma przecież takiej ślicznej alokacji przy użyciu operatora new jak w C++ <3 :-D

W C służyły (służą*) do tego malloc() (rezerwuje pamięć) oraz free() (zwalnia pamięć)

Tak wygląda dynamiczne stworzenie tablicy w języku C, z rozmiarem podanym przez użytkownika:

int * tablica;
int n;
scanf("%d",&n);  
tablica=(int*) malloc(n*sizeof(int));

Prawda, wygląda to gorzej niż w C++, ale cóż... trzeba z tym jakoś żyć :-D

Aby odnieść się do ostatniego elementu tablicy int'ów o rozmiarze "n" w C++ zrobilibyśmy tak: tablica[ n-1 ]. W języku C, wyglądałoby to tak:

tablica + n*sizeof(int);

Należy pamiętać, że C++ to rozwinięty C. Uczenie się języka C z kursów o C++ nie jest chyba dobrym rozwiązaniem :-/

W języku C nie programuję, ale wydaje mi się, że nie ma tam operatora [ ]... Jeśli nie mam racji, to najwyżej zaraz rzuci się na mnie z wyrzutami jakiś programista C. Raz się żyje, chyba jestem w stanie zaryzykować :-D

komentarz 16 grudnia 2015 przez dzidziamocarz Początkujący (370 p.)
Dzięki już poprawiłem i wszystko śmiga :)

Podobne pytania

0 głosów
4 odpowiedzi 3,883 wizyt
0 głosów
2 odpowiedzi 693 wizyt
–3 głosów
3 odpowiedzi 486 wizyt
pytanie zadane 29 września 2015 w C i C++ przez Nicku Nowicjusz (120 p.)

93,382 zapytań

142,381 odpowiedzi

322,539 komentarzy

62,738 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...