C - Ciąg liczb, losowanie, liczby podzielne, sortowanie

0

Witam,
Mam do rozwiązania zadanie w C, jednak z programowania jestem mocno przeciętny i pojawił się problem.
O ile udało mi się zrobić losowanie ciągu liczb, to niestety poległem na pozostałych punktach.
Czy ktoś może wskazać/poprawić, co jest źle lub jak być powinno? Może w ogóle inny pomysł na rozwiązanie zadania?
Proszę o pomoc.

 
Treść zadania:

Dany jest ciąg liczb całkowitych nieujemnych.
Napisać program dzielący ciąg na następujące grupy:
-zera,
-jedynki,
-liczby podzielne przez 2,
liczby podzielne przez 3, niepodzielne przez 2,
liczby podzielne przez 5, niepodzielne przez 2 i 3,
W poszczególnych grupach liczby powinny być ustawione w porządku niemalejącym.
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
static unsigned long int liczba_od = 0; /* deklaracja wartości poczatkowej losowania */
unsigned int liczba_do; /* unsigned int - zmienne o wartosciach nieujemnych, końcowy zakres losowania */
int ciag;
int zera = 0;
int jeden = 0;
int podzieldwa = 0;
int podzieltrzy = 0;
int podzielpiec = 0;

 printf("Ile liczb ma zawierac ciag? Podaj: \n");
 scanf("%d", &liczba_do);
 printf("Ciag wylosowanych %d liczb to:\n", liczba_do);
 printf("\n");
 int tablica[liczba_do];
 
srand(time(0)); /*ustawienie zarodka, aby random losował za kazdym razem inne liczby */
 for (liczba_od; liczba_od<liczba_do; liczba_od++) {
    ciag = (liczba_od + rand() % liczba_do);  /* losowanie liczb z przedziału <liczba_od, liczba_do> */
    tablica[liczba_od] = ciag;
//    printf("%d, ", ciag);  
 }
 
liczba_od = 0; //zerowanie liczby od
tablica[liczba_od] = ciag;
for (liczba_od; liczba_od<liczba_do; liczba_od++) {
    printf("%d, ", tablica[liczba_od]);
//  printf("Element numer %d = %d\n", liczba_od, tablica[liczba_od]); //wyswietlenie tablicy, element po elemencie.    
    }

//char * zmiena = (char)tablica[5];
//printf("%d\n\n" ,tablica[4]);

    for (liczba_od; ciag<liczba_do; liczba_od++) {
    if (ciag == 0) {
                  zera = zera + 1;
                  }
                  else if (ciag = 1) {
                                     jeden = jeden + 1;
                                     }

    if ((ciag % 2) == 0) { //dzielenie modulo
                      podzieldwa = podzieldwa + 1;
                      }
                          else if ((ciag % 3) == 0) {
                          podzieltrzy = podzieltrzy + 1;
                          }
                              else if ((ciag % 5) == 0) {
                              podzielpiec = podzielpiec + 1;
                              }
}    

printf("\n");
printf("\n");
printf("Liczba zer w ciagu:\n");
printf("\n");
printf("%d", zera);
printf("\n");
printf("\n");
printf("Liczba jedynek w ciagu:\n");
printf("\n");
printf("%d", jeden);
printf("\n");
printf("\n");
printf("Liczby podzieldwa w ciagu:\n");
printf("\n");
printf("%d", podzieldwa);
printf("\n");
printf("\n");
printf("Liczby podzieltrzy w ciagu:\n");
printf("\n");
printf("%d", podzieltrzy);
printf("\n");
printf("\n");
printf("Liczby podzielpiec w ciagu:\n");
printf("\n");
printf("%d", podzielpiec);
printf("\n");
printf("\n");


system("PAUSE");	
  return 0;
}


/*
DO SORTOWANIA:
              
void boublesort(int table[], int size)
{
        int i, j, temp;
        for (i = 0; i<size; i++)
                for (j=0; j<size-1; j++)
                        {
                                if (table[j] > table[j+1])
                                {
                                        temp = table[j+1];
                                        table[j+1] = table[j];
                                        table[j] = temp;
                                }
                        }
}

*/
0

Nie wiem czy to najoptyamlniejszy sposob, ale najpierw przegladaj tablice i spradzajc do ktrych z tych warunkow dana liczba nalzey (chyba, ze cos sie wyklucza - sprawdz - pisze na szybko) Wyniki zapisuj (pewnie jako 0 i 1 ) w dodatkowaej tablicy struktur. Pozniej z kazdego pola pisz do soobnej tablicy. Jak juz ustlisz ciagi to je posrotuj, choicaz teraz jak mysle to posortowanie ich w 1 kroku bylby baridzej optymlane :)
Pozdrawim

edit: teraz zauwzyelm ze d osortowanie uzywasz sortowania babelkowego, pomysl moze o jakims z kosztem 0(n log n). To sporo przyspieszy dzialanie programu. Jak do szkoly (przynajmnie u mnei tak jest) jest to koszt algorytmow jest dosyc istotny

0

Dzięki za odpowiedź i za rady.
Jednak program został oddany do oceny tydzień temu, tylko nauczyciel zachorował i wyniku nie znam ;)

0

Nie działa mi ten program, wybiera losowe liczby, ale nie sortuje, jak wstawić sortowanie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1