Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.07 KB | None | 0 0
  1. //
  2. // Programskal till obluppg4 - deluppgift B
  3. //
  4. // Hanterar fallet med 26 bokstäver A-Z
  5.  
  6. #include <string>
  7. #include <cctype>
  8. #include <iostream>
  9. #include <fstream>
  10. #include <cmath>
  11. using namespace std;
  12.  
  13. // Globala konstanter:
  14.  
  15. // Tips: Använd de globala konstanterna ANTAL_BOKSTAVER och ANTAL_SPRAK
  16. // istället för värdena 26 och 4 i programmet.
  17. const int ANTAL_BOKSTAVER = 26;  //A-Z
  18. const int ANTAL_SPRAK = 4;
  19.  
  20. // 2d-arrayen TOLK_HJALP innehåller bokstavsfrekvensen i %
  21. // för fyra språk. TOLK_HJALP[0][0] är frekvensen av
  22. // bokstaven a för engelska.TOLK_HJALP[0][25] är frekvensen av
  23. // bokstaven z för engelska.
  24. // Arrayen är en GLOBAL KONSTANT och skall alltså ej skickas
  25. // som parameter till den funktion som behöver den.
  26. const double TOLK_HJALP[ANTAL_SPRAK][ANTAL_BOKSTAVER]=
  27.        {{8.27,1.48,2.94,4.03,11.78,2.22,1.72,6.77, //engelska
  28.          7.39,0.12,0.81,3.76,2.85,6.71,7.79,1.54,
  29.          0.05,5.95,6.69,9.07,2.66,1.13,2.14,0.19,
  30.          1.89,0.03},
  31.         {7.97,1.40,3.55,3.79,16.89,1.02,1.00,0.75, //franska
  32.          7.08,0.38,0.04,5.51,2.82,8.11,5.19,2.78,
  33.          1.01,6.69,8.35,7.22,6.09,1.35,0.02,0.54,
  34.          0.30,0.15},
  35.         {9.50,1.11,1.53,5.30,8.94,1.74,3.57,3.94,  //svenska
  36.          3.98,0.89,3.26,4.93,3.41,8.46,5.01,1.77,
  37.          0.00,6.73,5.56,9.20,1.94,2.42,0.00,0.05,
  38.          0.45,0.00},
  39.         {5.12,1.95,3.57,5.07,16.87,1.35,3.00,5.79, //tyska
  40.          8.63,0.19,1.14,3.68,3.12,10.64,1.74,0.42,
  41.          0.01,6.30,6.99,5.19,3.92,0.77,1.79,0.01,
  42.          0.69,1.24}};
  43.  
  44. // Globala variabler är ej tillåtna
  45.  
  46. //--------------------------------------------------------
  47. // Funktionsdeklarationer:
  48.  
  49. // Deklarationer av dina egna funktioner
  50. // Använd exakt de funktionsnamn som finns nedan
  51.  
  52. int berakna_histogram_abs(string input, int letters[]){
  53.     int counter = 0;
  54.  
  55.     for(int i = 0; i < ANTAL_BOKSTAVER; i++){
  56.         letters[i] = 0;
  57.     }
  58.  
  59.     for(int i = 0; i<input.size(); i++){
  60.         switch(input[i]){
  61.         case 'a':
  62.         case 'A':
  63.             letters[0]++;
  64.             counter++;
  65.             break;
  66.         case 'b':
  67.         case 'B':
  68.             letters[1]++;
  69.             counter++;
  70.             break;
  71.         case 'c':
  72.         case 'C':
  73.             letters[2]++;
  74.             counter++;
  75.             break;
  76.         case 'd':
  77.         case 'D':
  78.             letters[3]++;
  79.             counter++;
  80.         case 'e':
  81.         case 'E':
  82.             letters[4]++;
  83.             counter++;
  84.             break;
  85.         case 'f':
  86.         case 'F':
  87.             letters[5]++;
  88.             counter++;
  89.             break;
  90.         case 'g':
  91.         case 'G':
  92.             letters[6]++;
  93.             counter++;
  94.             break;
  95.         case 'h':
  96.         case 'H':
  97.             letters[7]++;
  98.             break;
  99.         case 'i':
  100.         case 'I':
  101.             letters[8]++;
  102.             counter++;
  103.             break;
  104.         case 'j':
  105.         case 'J':
  106.             letters[9]++;
  107.             counter++;
  108.             break;
  109.         case 'k':
  110.         case 'K':
  111.             letters[10]++;
  112.             counter++;
  113.             break;
  114.         case 'l':
  115.         case 'L':
  116.             letters[11]++;
  117.             counter++;
  118.             break;
  119.         case 'm':
  120.         case 'M':
  121.             letters[12]++;
  122.             counter++;
  123.             break;
  124.         case 'n':
  125.         case 'N':
  126.             letters[13]++;
  127.             counter++;
  128.             break;
  129.         case 'o':
  130.         case 'O':
  131.             letters[14]++;
  132.             counter++;
  133.             break;
  134.         case 'p':
  135.         case 'P':
  136.             letters[15]++;
  137.             counter++;
  138.             break;
  139.         case 'q':
  140.         case 'Q':
  141.             letters[16]++;
  142.             counter++;
  143.             break;
  144.         case 'r':
  145.         case 'R':
  146.             letters[17]++;
  147.             counter++;
  148.             break;
  149.         case 's':
  150.         case 'S':
  151.             letters[18]++;
  152.             counter++;
  153.             break;
  154.         case 't':
  155.         case 'T':
  156.             letters[19]++;
  157.             counter++;
  158.             break;
  159.         case 'u':
  160.         case 'U':
  161.             letters[20]++;
  162.             counter++;
  163.             break;
  164.         case 'v':
  165.         case 'V':
  166.             letters[21]++;
  167.             counter++;
  168.             break;
  169.         case 'w':
  170.         case 'W':
  171.             letters[22]++;
  172.             counter++;
  173.             break;
  174.         case 'x':
  175.         case 'X':
  176.             letters[23]++;
  177.             counter++;
  178.             break;
  179.         case 'y':
  180.         case 'Y':
  181.             letters[24]++;
  182.             counter++;
  183.             break;
  184.         case 'z':
  185.         case 'Z':
  186.             letters[25]++;
  187.             counter++;
  188.             break;
  189.         }
  190.     }
  191.     return counter;
  192. }
  193.  
  194. void abs_till_rel(int antal_bokstaver, double lettersREL[], int lettersABS[]){
  195.     for(int i = 0; i < ANTAL_BOKSTAVER; i++){
  196.         lettersREL[i] = lettersABS[i]/double(antal_bokstaver);
  197.     }
  198. }
  199.  
  200. void plotta_histogram(double lettersREL[]){
  201.     char chars[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',};
  202.     int a = 0;
  203.     for(int i = 0; i<ANTAL_BOKSTAVER; i++){
  204.         cout << chars[i] << ": ";
  205.         a = lettersREL[i] * 200;
  206.         for(int i = 0; i < a; i++){
  207.             cout << "*";
  208.         }
  209.         cout << endl;
  210.  
  211.     }
  212. }
  213.  
  214. // Funktionen tolka
  215.  
  216. // Funktionen namn_pa_fil
  217.  
  218. // Funktionen inlasning
  219.  
  220. //--------------------------------------------------------
  221. // Huvudprogram:
  222.  
  223. int main()
  224. {
  225.  
  226.     int letters[ANTAL_BOKSTAVER];
  227.     double lettersREL[ANTAL_BOKSTAVER];
  228.     string input;
  229.     cout << "Ge input: " << endl;
  230.     getline(cin, input);
  231.     int antal_bokstaver = berakna_histogram_abs(input, letters);
  232.     abs_till_rel(antal_bokstaver, lettersREL, letters);
  233.     plotta_histogram(lettersREL);
  234.  
  235.  
  236.   return 0;
  237. }
  238.  
  239. //--------------------------------------------------------
  240. // Funktionsdefinitioner:
  241.  
  242.  
  243.  
  244.  
  245. // -------------------------------------------------------
  246. // Rapport om uppgiften
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement