Untitled

 avatar
unknown
plain_text
2 months ago
8.4 kB
6
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Funkcija za usporedbu potrebna za qsort (za binarno pretraživanje)
int usporedi(const void *a, const void *b) {
        return (*(int*)a - *(int*)b);
}

int main() {
        FILE *fp;
            int polje[500], trazeni[5], i, j;
                int sekv_koraci[5], bin_koraci[5];
                    int sekv_nasao[5] = {0}, bin_nasao[5] = {0};

                        srand(time(NULL));

                            // Generiranje datoteke
                                fp = fopen("dat.txt", "w");
                                    for (i = 0; i < 500; i++) fprintf(fp, "%d ", rand() % 1001);
                                        fclose(fp);

                                            // Unos 5 brojeva
                                                printf("Unesite 5 brojeva [1, 1000]:\n");
                                                    for (i = 0; i < 5; i++) scanf("%d", &trazeni[i]);

                                                        // Učitavanje iz datoteke u polje
                                                            fp = fopen("dat.txt", "r");
                                                                for (i = 0; i < 500; i++) fscanf(fp, "%d", &polje[i]);
                                                                    fclose(fp);

                                                                        // --- Sekvencijalno pretraživanje ---
                                                                            for (i = 0; i < 5; i++) {
                                                                                        for (j = 0; j < 500; j++) {
                                                                                                        if (polje[j] == trazeni[i]) {
                                                                                                                            sekv_nasao[i] = 1;
                                                                                                                                            sekv_koraci[i] = j + 1;
                                                                                                                                                            break;
                                                                                                        }
                                                                                        }
                                                                            }

                                                                                // --- Binarno pretraživanje (zahtijeva sortirano polje) ---
                                                                                    qsort(polje, 500, sizeof(int), usporedi);
                                                                                        for (i = 0; i < 5; i++) {
                                                                                                    int lijevo = 0, desno = 499, koraci = 0;
                                                                                                            while (lijevo <= desno) {
                                                                                                                            koraci++;
                                                                                                                                        int sredina = lijevo + (desno - lijevo) / 2;
                                                                                                                                                    if (polje[sredina] == trazeni[i]) {
                                                                                                                                                                        bin_nasao[i] = 1;
                                                                                                                                                                                        bin_koraci[i] = koraci;
                                                                                                                                                                                                        break;
                                                                                                                                                    }
                                                                                                                                                                if (polje[sredina] < trazeni[i]) lijevo = sredina + 1;
                                                                                                                                                                            else desno = sredina - 1;
                                                                                                            }
                                                                                        }

                                                                                            // --- Ispis rezultata ---
                                                                                                printf("\nREZULTATI:\nSekvencijalno:\n");
                                                                                                    float suma_sekv = 0, br_sekv = 0;
                                                                                                        for (i = 0; i < 5; i++) {
                                                                                                                    if (sekv_nasao[i]) {
                                                                                                                                    printf("%d. broj %d je pronadjen u %d koraka.\n", i + 1, trazeni[i], sekv_koraci[i]);
                                                                                                                                                suma_sekv += sekv_koraci[i]; br_sekv++;
                                                                                                                    } else printf("%d. broj %d nije pronadjen.\n", i + 1, trazeni[i]);
                                                                                                        }

                                                                                                            printf("Binarno:\n");
                                                                                                                float suma_bin = 0, br_bin = 0;
                                                                                                                    for (i = 0; i < 5; i++) {
                                                                                                                                if (bin_nasao[i]) {
                                                                                                                                                printf("%d. broj %d je pronadjen u %d koraka.\n", i + 1, trazeni[i], bin_koraci[i]);
                                                                                                                                                            suma_bin += bin_koraci[i]; br_bin++;
                                                                                                                                } else printf("%d. broj %d nije pronadjen.\n", i + 1, trazeni[i]);
                                                                                                                    }

                                                                                                                        if (br_sekv > 0) printf("Srednji broj koraka za sekvencijalno: %.2f\n", suma_sekv / br_sekv);
                                                                                                                            if (br_bin > 0) printf("Srednji broj koraka za binarno: %.2f\n", suma_bin / br_bin);

                                                                                                                                return 0;
}
                                                                                                    
Editor is loading...
Leave a Comment