Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. //SDIZO I1 212B LAB01
  2. //Bartosz Wdowiak
  3. //wb39475@zut.edu.pl
  4.  
  5.  
  6. #include "stdafx.h"
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <iostream>
  10. #include <ctime>
  11. #include <fstream>
  12.  
  13. using namespace std;
  14.  
  15. struct Struktura {          //tworzenie struktury
  16.     int i;
  17.     char c;
  18.     float f;
  19. };
  20.  
  21. Struktura** Losowanie(int N) {              //funkcja losująca
  22.  
  23.     struct Struktura** tab = (struct Struktura**) malloc(N * sizeof(struct Struktura*));    //alokacja pamięci na tablicę N wskaźników na struktury
  24.     bool spr;
  25.     int k = 0;
  26.     int *liczby = new int[N];
  27.     for (int x = 0; x < N; x++) {
  28.  
  29.         tab[x] = (struct Struktura*) malloc(sizeof(struct Struktura));  //alokacja pamięci na pojedynczą strukturę z przypisaniem adresu do x-tej pozycji tablicy tab[]
  30.  
  31.         do {
  32.             int temp = (rand() % 10000) - 1000;         //losowanie inta z zakresu od -1000 do 9000
  33.             spr = true;
  34.             for (int i = 1; i <= k; i++) {
  35.                 if (temp == liczby[i]) {                //jeżeli jest to ustaw spr na false
  36.                     spr = false;
  37.                 }
  38.             }
  39.             if (spr == true) {
  40.                 liczby[k] = temp;
  41.                 k++;
  42.             }
  43.         } while (spr != true);
  44.         tab[x]->i = liczby[x];
  45.         tab[x]->c = (rand() % 22) + 66;     //przypisanie litery losowanej z zakresu od B do X
  46.         tab[x]->f = 1000 + x + 1;           //przypisanie liczby 1000 + numer struktury (x od 0 dlatego "+1")
  47.     }
  48.     return tab;             //zwracanie adresu tablicy
  49. }
  50.  
  51.  
  52. void Kasowanie(Struktura**tab, int N) {         //funkcja zwalniająca pamięć
  53.  
  54.     for (int x = 0; x < N; x++) {
  55.         free(tab[x]);
  56.     }
  57.     free(tab);
  58. }
  59.  
  60.  
  61. void BubbleSort(Struktura**tab, int N) {        //sortowanie bąbelkowe
  62.  
  63.     do {
  64.         for (int i = 0; i < N - 1; i++) {
  65.             if (tab[i]->i > tab[i + 1]->i) {    //jeżeli nastęny mniejszy niż obecny
  66.                 swap(tab[i], tab[i + 1]);       //to zamien miejscami
  67.             }
  68.         }
  69.         N = N - 1;
  70.     } while (N > 1);
  71. }
  72.  
  73.  
  74.  
  75. int Zliczanie(Struktura**tab, int N, char X) {  //zliczanie wystąpień znaku
  76.  
  77.     int licznik = 0;
  78.     for (int i = 0; i < N; i++) {
  79.         if (tab[i]->c == X) {
  80.             licznik++;
  81.         }
  82.     }
  83.     return licznik;
  84. }
  85.  
  86.  
  87. int main()
  88. {
  89.     srand(time(NULL));
  90.     int N;
  91.     char X;
  92.     double czas_wykonania;
  93.     int licznik;
  94.     Struktura**tablica;
  95.     std::ifstream plik;
  96.     plik.open("inlab01.txt", ios::in);                      //otworzenie pliku
  97.     if (plik.good() == false) {                             //sprawdzenie pliku
  98.         cout << "BRAK DOSTEPU DO PLIKU!" << endl;
  99.     }
  100.     plik >> N >> X;                                         //przypisanie danych wejsciowych z pliku do zmiennych
  101.     clock_t start, stop;
  102.  
  103.     start = clock();                                        //czas start
  104.  
  105.     tablica = Losowanie(N);
  106.     BubbleSort(tablica, N);
  107.     licznik = Zliczanie(tablica, N, X);
  108.     for (int i = 0; i < 20; i++) {                          //wypisanie pierwszych 20 struktur
  109.         cout << "Struktura nr " << i + 1 << ":" << endl << tablica[i]->c << endl << tablica[i]->i << endl << tablica[i]->f << endl;
  110.     }
  111.     Kasowanie(tablica, N);
  112.  
  113.     stop = clock();                                         //czas stop
  114.  
  115.     czas_wykonania = (double)(stop - start) / CLOCKS_PER_SEC;   //wyliczenie czasu wykonania
  116.  
  117.     cout << "Znak: " << X << " pojawil sie " << licznik << " razy" << endl << "Czas wykonania programu: " << czas_wykonania << "s" << endl;
  118.  
  119.     system("PAUSE");
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement