Advertisement
antisa

Untitled

Mar 7th, 2023 (edited)
790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. int main(void) {
  7.  
  8.     char* mjeseci[] = { "sijecanj", "veljaca", "ozujak", "travanj", "svibanj",
  9.     "lipanj", "srpanj", "kolovoz", "rujan", "listopad",
  10.     "studeni", "prosinac" };
  11.     int i;
  12.  
  13.     for (i = 0; i < 12; i++) {
  14.         printf("%d\t%s\n", i + 1, *(mjeseci + i));
  15.         //printf("%d\t%s\n", i + i, mjeseci[i]);
  16.     }
  17.     return 0;
  18. }
  19.  
  20. /*1. Napisati C program koji omogućava unos broja n, (1 ≤ 𝑛 ≤ 7) koji predstavlja dane u tjednu.
  21. Ukoliko je unesen broj koji ne odgovara broju dana u tjednu, ispisati poruku "Krivo uneseni broj za
  22. dan" i zatražiti novi unos broja n. Za inicijalizaciju imena dana koristiti polje pokazivača. Ispisati
  23. traženi dan.Koristiti isključivo pokazivačku notaciju!*/
  24.  
  25. int main(void) {
  26.  
  27.     int n;
  28.     char* pok[]= {"ponedjeljak", "utorak", "srijeda", "cetvrtak", "petak", "subota", "nedjelja"};
  29.  
  30.  
  31.     printf("unesite broj od 1 do 7:");
  32.     do {
  33.         scanf("%d", &n);
  34.  
  35.         if (n < 1 || n>7) {
  36.             printf("Krivi unos, unesite broj od 1 do 7:");
  37.         }
  38.     }
  39.     while (n < 1 || n>7);
  40.  
  41.     printf("%s", *(pok+(n-1)));
  42.  
  43.     return 0;
  44.  
  45. }
  46.  
  47. /*2. Proširiti prvi zadatak tako da se provjeri koji dan ima najviše suglasnika, te ispisati naopako dan s
  48. najvećim brojem suglasnika. Koristiti isključivo pokazivačku notaciju!*/
  49.  
  50. int main(void) {
  51.  
  52.     int n, i, j;
  53.     char* pok[] = { "ponedjeljak", "utorak", "srijeda", "cetvrtak", "petak", "subota", "nedjelja" };
  54.     int max_suglasnika = 0;
  55.     char* dan_max_suglasnika;
  56.  
  57.  
  58.     printf("unesite broj od 1 do 7:");
  59.     do {
  60.         scanf("%d", &n);
  61.  
  62.         if (n < 1 || n>7) {
  63.             printf("Krivi unos, unesite broj od 1 do 7:");
  64.         }
  65.     } while (n < 1 || n>7);
  66.  
  67.     printf("%s\n", *(pok + (n - 1)));
  68.  
  69.     for (int i = 0; i < 7; i++) {
  70.         int broj_suglasnika = 0;
  71.         char* dan = pok[i];
  72.    
  73.         for (int j = 0; j < strlen(dan); j++) {
  74.             if (dan[j] != 'a' && dan[j] != 'e' && dan[j] != 'i' && dan[j] != 'o' && dan[j] != 'u' && dan[j] != ' ') {
  75.                 broj_suglasnika++;
  76.             }
  77.         }
  78.         if (broj_suglasnika > max_suglasnika) {
  79.             max_suglasnika = broj_suglasnika;
  80.             dan_max_suglasnika = dan;
  81.  
  82.             printf("Dan s najvise suglasnika je: ");
  83.             for (int i = strlen(dan_max_suglasnika) - 1; i >= 0; i--) {
  84.                 printf("%c", dan_max_suglasnika[i]);
  85.             }
  86.             printf("\n");
  87.         }
  88.     }
  89.  
  90.  
  91.     return 0;
  92.  
  93. }
  94.  
  95.  
  96. /*3. Napisati C program koji omogućava unos broja n, (1 ≤ 𝑛 ≤ 12) koji predstavlja mjesece u godini.
  97. Ukoliko je unesen broj koji ne odgovara broju mjeseca u godini, ispisati poruku "Krivo uneseni broj
  98. za mjesec" i zatražiti novi unos broja n. Za inicijalizaciju imena mjeseci koristiti polje pokazivača.
  99. Ispisati traženi mjesec.Koristiti isključivo pokazivačku notaciju!*/
  100.  
  101. int main(void) {
  102.  
  103.     char* mjeseci[] = { "sijecanj", "veljaca", "ozujak", "travanj", "svibanj",
  104.     "lipanj", "srpanj", "kolovoz", "rujan", "listopad",
  105.     "studeni", "prosinac" };
  106.     int i, n;
  107.  
  108.     printf("unesite broj od 1 do 12:");
  109.     do {
  110.         scanf("%d",&n);
  111.  
  112.         if (n < 1 || n>12) {
  113.             printf("Krivi unos, unesite broj od 1 do 12:");
  114.         }
  115.     } while (n < 1 || n>12);
  116.  
  117.     printf("%s", *(mjeseci + (n - 1)));
  118.  
  119.     return 0;
  120. }
  121.  
  122. void popuni_matricu(double** mat, int n) {
  123.     int i, j;
  124.     for (i = 0; i < n; i++) {
  125.         for (j = 0; j < n; j++) {
  126.             mat[i][j] = -1.25 + (double)rand() / RAND_MAX * (7 - (-1.25));
  127.         }
  128.     }
  129. }
  130.  
  131. void ispis_matrice(double** mat, int n) {
  132.     int i, j;
  133.     for (i = 0; i < n; i++) {
  134.         for (j = 0; j < n; j++) {
  135.             printf("%7.2lf", mat[i][j]); //*(mat + i + j);
  136.         }
  137.         printf("\n");
  138.     }
  139. }
  140.  
  141. double pronadi_najveci(double** mat, int n) {
  142.     double max = mat[0][1];
  143.     int i, j;
  144.     for (i = 0; i < n; i++) {
  145.         for (j = i + 2; j < n; j++) {
  146.             //if ((i == j) && ((i + j) == (n - 1))) {
  147.             if (mat[i][j] > max) {
  148.                 max = mat[i][j];
  149.             }
  150.            
  151.         }
  152.     }
  153.     return max;
  154. }
  155.  
  156. void oslobodi_memoriju(double** mat, int n) {
  157.     int i;
  158.     for (i = 0; i < n; i++) {
  159.         free(mat[i]);
  160.     }
  161.     free(mat);
  162. }
  163.  
  164. int main() {
  165.     int n;
  166.     do {
  167.         printf("Unesi broj redova i stupaca matrice: \n");
  168.         scanf("%d", &n);
  169.     } while (n < 2 || n > 8);
  170.  
  171.     srand((unsigned)time(NULL));
  172.     double** mat = (double*)malloc(n * sizeof(double));
  173.     int i;
  174.     for (i = 0; i < n; i++) {
  175.         mat[i] = (double*)malloc(n * sizeof(double));
  176.     }
  177.  
  178.     popuni_matricu(mat, n);
  179.  
  180.     printf("Matrica: \n");
  181.     ispis_matrice(mat, n);
  182.  
  183.     double najveci = pronadi_najveci(mat, n);
  184.     printf("Najveci element iznad dijagonala: %.2lf\n", najveci);
  185.  
  186.     oslobodi_memoriju(mat, n);
  187.  
  188.     return 0;
  189. }
  190.  
  191. //6
  192. int** alociraj_matricu(int m, int n);
  193. void popuni_matricu(int** mat, int m, int n);
  194. double srednja_vrijednost(int** mat, int m, int n);
  195. void ispisi_matricu(int** mat, int m, int n);
  196. #include <stdio.h>
  197. #include <stdlib.h>
  198. #include <time.h>
  199.  
  200. // Funkcija koja dinamički zauzima memoriju za matricu
  201. int** alociraj_matricu(int m, int n) {
  202.     int** mat = (int*)malloc(m * sizeof(int));
  203.     for (int i = 0; i < m; i++) {
  204.         mat[i] = (int*)malloc(n * sizeof(int));
  205.     }
  206.     return mat;
  207. }
  208.  
  209. // Funkcija koja popunjava matricu sa pseudo-slučajnim binarnim vrijednostima
  210. void popuni_matricu(int** mat, int m, int n) {
  211.     for (int i = 0; i < m; i++) {
  212.         for (int j = 0; j < n; j++) {
  213.             // Generiranje binarnog broja
  214.             int binarno[8]; //jer 1 bajt ima 8 bitova valjd
  215.             for (int k = 0; k < 8; k++) {
  216.                 binarno[k] = rand() % 2;
  217.             }
  218.             // Pretvaranje binarnog broja u dekadski ekvivalent
  219.             int dekadski = 0;
  220.             int tezina = 1;
  221.             for (int k = 7; k >= 0; k--) {
  222.                 dekadski += binarno[k] * tezina;
  223.                 tezina *= 2; // jer 2^0, 2^1, 2^2, itd.
  224.             }
  225.             // Provjera ako je generirani negativan binarni broj
  226.             if (binarno[0] == 1) {
  227.                 dekadski -= 256; // preljevanje
  228.             }
  229.             // Upisivanje dekadskog ekvivalenta u matricu
  230.             mat[i][j] = dekadski;
  231.         }
  232.     }
  233. }
  234.  
  235. // Funkcija koja računa srednju vrijednost matrice
  236. double srednja_vrijednost(int** mat, int m, int n) {
  237.     double suma = 0;
  238.     for (int i = 0; i < m; i++) {
  239.         for (int j = 0; j < n; j++) {
  240.             suma += mat[i][j];
  241.         }
  242.     }
  243.     return suma / (m * n);
  244. }
  245.  
  246. // Funkcija koja ispisuje matricu u matričnom obliku
  247. void ispisi_matricu(int** mat, int m, int n) {
  248.     for (int i = 0; i < m; i++) {
  249.         for (int j = 0; j < n; j++) {
  250.             printf("%d ", mat[i][j]);
  251.         }
  252.         printf("\n");
  253.     }
  254. }
  255.  
  256. int main() {
  257.     srand((unsigned)time(NULL));
  258.  
  259.     int m, n;
  260.     do {
  261.         printf("Unesite broj redova m (2 <= m <= 20): ");
  262.         scanf("%d", &m);
  263.     } while (m < 2 || m > 20);
  264.     do {
  265.         printf("Unesite broj stupaca n (5 <= n <= 25): ");
  266.         scanf("%d", &n);
  267.     } while (n < 5 || n > 25);
  268.  
  269.     int** mat = alociraj_matricu(m, n); // Dinamičko zauzimanje memorije za matricu
  270.     popuni_matricu(mat, m, n); // Popunjavanje matrice sa pseudo-slučajnim binarnim vrijednostima
  271.     double srednja = srednja_vrijednost(mat, m, n); // Računanje srednje vrijednosti matrice
  272.     printf("Srednja vrijednost matrice je: %.2f\n", srednja); // Ispis srednje vrijednosti
  273.     ispisi_matricu(mat, m, n); // Ispis matrice u matričnom obliku
  274.  
  275.     // Oslobađanje zauzete memorije
  276.     for (int i = 0; i < m; i++) {
  277.         free(mat[i]);
  278.     }
  279.     free(mat);
  280.  
  281.     return 0;
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement