tdulik

Generator krizovek - zakladni verze

Aug 28th, 2020 (edited)
2,105
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #define velikostPole 8000000
  7. /* slovnik bude vypadat takto:
  8. pes;pritel cloveka
  9. slunce;nejblizsi hvezda
  10. sobota;den odpocinku
  11. skola;vzdelavaci instituce
  12. leto;nejteplesi rocni obdobi
  13. strom;rostlina s pevnym kmenem
  14. hlina;zemina
  15. parez;zbytek stromu po kaceni
  16. */
  17. char slovnik[velikostPole][100];
  18. char popisySlov[velikostPole][100];
  19.  
  20. unsigned int mujRand(unsigned int rozsah) {
  21.     return (rand() * rand()) % rozsah;
  22. }
  23.  
  24. int main(int argc, char* argv[]) {
  25.     FILE* vstup = stdin;
  26.     FILE* vystup = fopen("krizovka.txt", "w");
  27.     if (vystup == NULL) {
  28.         printf("Nemohu otevrit soubor krizovka.txt\n");
  29.         return 0;
  30.     }
  31.     if (argc > 1) {
  32.         vstup = fopen(argv[1], "r");
  33.         if (vstup == NULL) {
  34.             printf("Nemohu otevrit soubor %s\n", argv[1]);
  35.             return 0;
  36.         }
  37.     }
  38.     else
  39.         printf("Vlozte slova (konec=CTRL+Z): \n");
  40.  
  41.     char slovo[256], popis[256];
  42.     int pocetSlov = 0;
  43.     while (fscanf(vstup, "%255[^;];%255[^\n]%*c", slovo, popis) == 2 && pocetSlov < velikostPole) {
  44.         slovo[255] = 0;
  45.         strcpy(slovnik[pocetSlov], slovo);
  46.         strcpy(popisySlov[pocetSlov], popis);
  47.         pocetSlov++;
  48.  
  49.     }
  50.     printf("Pocet nactenych slov = %d\n", pocetSlov);
  51.     srand(time(NULL));
  52.  
  53.     do {
  54.         int indexTajenky = mujRand(pocetSlov);
  55.  
  56.         char* tajenka = slovnik[indexTajenky];
  57.         printf("Tajenka=%s\n", tajenka);
  58.  
  59.         int delkaTajenky = strlen(tajenka);
  60.         for (int i = 0; i < delkaTajenky; i++) {
  61.             char pismeno = tajenka[i];
  62.             char* ukPozice;
  63.             char* slovoTajenky;
  64.             int indexSlova;
  65.             do {
  66.                 indexSlova = mujRand(pocetSlov);
  67.                 slovoTajenky = slovnik[indexSlova];
  68.                 ukPozice = strchr(slovoTajenky, pismeno);
  69.             } while (ukPozice == NULL);
  70.             int pozicePismenaTajenky = ukPozice - slovoTajenky;
  71.            
  72.             for (int j = 0; j < 40 - pozicePismenaTajenky; j++) {
  73.                 putchar(' ');
  74.                 fputc(' ', vystup);
  75.             }
  76.             for (int j = 0; j < pozicePismenaTajenky; j++) {
  77.                 putchar(slovoTajenky[j]);
  78.                 fputc('.', vystup);
  79.             }
  80.             printf("|%c|%s : %s\n", pismeno, ukPozice + 1, popisySlov[indexSlova]);
  81.             fprintf(vystup, "|.|");
  82.             for (int j = pozicePismenaTajenky+1; j < strlen(slovoTajenky); j++)
  83.                 fputc('.', vystup);
  84.             fprintf(vystup, " >>        %s\n", popisySlov[indexSlova]);
  85.         }
  86.         fprintf(vystup, "Dalsi krizovka:\n\n");
  87.         fflush(vystup);
  88.         printf("Chces dalsi krizovku? (A)no - (N)=ne\n");
  89.         char znak;
  90.         do {
  91.             znak = getchar();
  92.         } while (znak != 'A' && znak != 'N');
  93.         if (znak == 'N') break;
  94.     } while (1);
  95.     fclose(vystup);
  96.     if (vstup!=stdin) fclose(vstup);
  97. }
RAW Paste Data