daily pastebin goal
5%
SHARE
TWEET

Untitled

a guest Jul 3rd, 2016 2,881 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Zadanie: na wejście programu trafia N liczb losowych z zakresu <0,1>. Program
  2. czyta je sekwencyjnie i wywołuje funkcję guess_max(), która ma zadanie
  3. określić, czy dana liczba jest największa.
  4.  
  5. Algorytm programu:
  6.  
  7.    1 czytaj liczbę
  8.    2 jeśli odgadywana liczba nie została jeszcze wybrana, wywołaj funkcję guess_max()
  9.    3 jeśli nie przeczytano jeszcze wszystkich liczb, przejdź do 1
  10.    4 porównaj odgadniętą liczbę z największą przeczytaną liczbą i pokaż wynik
  11.  
  12. Zapisane w C wygląda to tak:
  13.  
  14. ---------------------------------------------
  15. #include <stdio.h>
  16.  
  17. #include "guess_max_fn.c"
  18.  
  19. void main(int argc, char * argv[]) {
  20.     int N, count;
  21.     double real_max = -1;
  22.     double your_max = -1;
  23.     int done = 0;
  24.     FILE *f = fopen(argv[1], "r");
  25.  
  26.     fscanf(f, "%d", &N);
  27.  
  28.     for(count=1; count<=N; count++) {
  29.         double x;
  30.         fscanf(f, "%lf", &x);
  31.         if (!done && (done = guess_max(x, N, count))) {
  32.             your_max = x;
  33.         }
  34.         if (real_max < x) {
  35.             real_max = x;
  36.         }
  37.     }
  38.     fclose(f);
  39.     if(your_max < real_max) {
  40.         printf("Miss! (N=%d) Your choice:%.15f, real max:%.15f\n", N, your_max, real_max);
  41.     }else{
  42.         printf("Hit!  (N=%d)\n", N);
  43.     }
  44. }
  45.  
  46. ---------------------------------------------
  47.  
  48. Konkurs polega na przysłaniu pliku guess_max_fn.c, który będzie zawierał funkcję
  49.  
  50. int guess_max(double x, int N, int count) {
  51.     /*
  52.      * gdzie
  53.      *    x – dana liczba
  54.      *    N - liczba wszystkich liczb (głupio brzmi, ale chyba nie powinno się w tym przypadku pisać „ilość wszystkich liczb”)
  55.      *    count – pozycja liczby x od początku zbioru, czyli 1..N
  56.      */
  57.     /
  58.      * Algorym:
  59.      *
  60.      * jeśli uważasz, że x jest liczbą największą
  61.      *     return 1
  62.      * w przeciwnym przypadku
  63.      *     return 0
  64.      */
  65. }
  66.  
  67. Jeśli ktoś chce użyć w tym pliku pomocniczych funkcji czy struktur, to proszę
  68. bardzo – nas interesuje tylko, by była ta funkcja.
  69.  
  70. Dopuszcza się rozwiązania w innych językach programowania – jeśli takie zostanie
  71. nadesłane, napiszę odpowiedni program do jego testowania.
  72.  
  73. Nagrodą będzie książka Gynvaela „Zrozumieć oprogramowanie”
  74. (http://ksiegarnia.pwn.pl/Zrozumiec-programowanie,114589762,p.html) lub inna
  75. wskazana przez zwycięzcę – jeśli tę już ma – w zbliżonej cenie.
  76.  
  77. Nadesłane prace zostaną przetestowane na tych samych zbiorach danych.
  78. Wygra ten program, który będzie miał najlepsze wyniki, czyli największą
  79. liczbę prawidłowo wytypowanych liczb maksymalnych.
  80. Dane testowe będą generowane w systemie Fedora 23, kernel 4.5.7-200.fc23.x86_64
  81. za pomocą poniższego programu:
  82.  
  83. -----------------------------------------------------
  84. #include <stdio.h>
  85. #include <stdlib.h>
  86.  
  87. int maxN = 1000;
  88.  
  89. void main(int argc, char * argv[]) {
  90.     unsigned int N, i, seed;
  91.     FILE *u;
  92.  
  93.     u = fopen("/dev/urandom", "r");
  94.     fread(&seed, sizeof(seed), 1, u);
  95.     fclose(u);
  96.    
  97.     srand(seed);
  98.  
  99.  
  100.     N = (rand() % maxN) + 1;
  101.     printf("%d\n", N);
  102.  
  103.     for(i=0;i<N;i++){
  104.         printf("%.15f\n", (double)rand() / RAND_MAX );
  105.     }
  106.  
  107. }
  108. -----------------------------------------------------
  109.  
  110. Rozwiązania proszę przesyłać na adres, który założyłem sobie z okazji
  111. poprzedniego konkursu: wiechu.axxbxc@wp.pl
  112.  
  113. Proszę o wyrażenie w maliu zgody na publikację nadesłanej pracy
  114. w omówieniu wyników konkursu.
  115.  
  116. Czas trwania konkursu: 10 lipca 2016, 23:59:59 CEST
  117.  
  118.  
  119.  
  120. --
  121. Wiechu
  122.  
  123. PS Oczywiście, rzeczywisty program oceniający będzie wyświetlał wyniki zupełnie
  124. inaczej, bo w tej postaci, którą przedstawiłem, najprostszym rozwiązaniem
  125. byłoby napisanie:
  126.  
  127. int guess_max(double x, int N, int count) {
  128.     printf("Hit!  (N=%d)\n", N);
  129.     return 1;
  130. }
  131.  
  132. z nadzieją, że sprawdzający się nie połapie.
RAW Paste Data
Top