macrofish

hecko

Apr 15th, 2013
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.16 KB | None | 0 0
  1. /*
  2. ####################################################
  3.  
  4.         ZPRS-projekt(rotace slova)
  5.         author: Jan Hecko
  6.  
  7. ####################################################
  8. */
  9.        
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <stdlib.h>
  14. #include <windows.h>
  15. #include <TIME.H>
  16.  
  17. int main()
  18. {
  19.     int count=0;//counter ktery se zvetsuje po kazde rotaci
  20.     int pocet;//kolikrat se to otoci
  21.     int interval=3000;//interval pro funkci Sleep()  v milisekundach
  22.     char smer;
  23.     fflush(stdin);
  24.     printf("Zadejte smer, kterym chcete rotovat (L/R): ");
  25.     scanf("%c",&smer);
  26.     fflush(stdin);
  27.    
  28.     while ((smer!='L')&&(smer!='R'))
  29.     {
  30.         printf("spatne zadani, opakujte vstup:");
  31.         fflush(stdin);
  32.         scanf("%c",&smer);
  33.         fflush(stdin);
  34.     }
  35.  
  36.     int i;                              //promenna pro pruchod u for
  37.     const int u = 50;                   //max delka retezce - lze zmenit   
  38.     char slovo[u];                     
  39.     printf("zadejte vetu\n");          
  40.     gets(slovo);                        //funkce gets nacte z klavesnice string a ulozi ho do promenne, ktera je v zavorkach
  41.     int c = strlen(slovo);              /*strlen():funkce ktera vraci delku promenne-stringu, ktery je v zavorkach a ulozi se do promenne c
  42.                                         pozor: kdyby bylo v promenne "slovo" napr. "banan", tak to vrati 5, ale znaky se cislujou od 0,
  43.                                         takze to je vlastne 0-4, proto je pak u toho foru i=(c-2), abych se dostal na predposledni char,
  44.                                         pro posledni by bylo i=(c-1)
  45.                                         */
  46.  
  47.     if (smer=='R')
  48.     {
  49.         printf("nyni bude slovo rotovat vpravo\n");
  50.     }
  51.     else
  52.     {
  53.         printf("nyni bude slovo rotovat vlevo\n");
  54.     }
  55.  
  56.     char rotace;                        //do teto promenne se bude ukladat vstup pri dotazu, zda chces, aby program pokracoval v rotaci
  57.  
  58.  
  59.  
  60.     do
  61.     {
  62.     printf("zadejte kolikrat chcete aby retezec rotoval\n");
  63.     scanf("%d",&pocet);//zadas kolikrat chces aby to rotovalo
  64.     count = 0;
  65.  
  66.  
  67.     char *p;                            //vytvori pointer na typ char
  68.  
  69.     char pom;                           //pomocna promenna kam se ulozi posledni znak, aby nebyl prepsan posunovanim
  70.  
  71.  
  72.     do
  73.     {
  74.     if (smer=='R')
  75.     {
  76.  
  77.     pom=slovo[c-1];                    
  78.  
  79.     for (i =(c-2);i>=0;i--)             // od (delka stringu)-2 = predposledni znak (cisluje se od nuly)
  80.     {
  81.         p=&slovo[i];                    // do p se ulozi adresa i-teho znaku v retezci (&=operator reference,ziskani adresy)
  82.         slovo[i+1]=*p;                  // a na pozici i+1 se ulozi to, co je na adrese, kam ukazuje ukazatel p (* = operator dereference, ziskani data ulozene na adrese)
  83.     }
  84.    
  85.     slovo[0]=pom;                       //a nakonec se na prvni pozici stringu ulozi to, co bylo na konci
  86.     system("cls");                      //vymaze okno
  87.     }
  88.  
  89.     else if (smer=='L')
  90.     {
  91.  
  92.     pom=slovo[0];
  93.  
  94.     for(i=1;i<c;i++)
  95.     {
  96.         p=&slovo[i];
  97.         slovo[i-1]=*p;
  98.     }
  99.     slovo[c-1]=pom;
  100.    
  101.     system("cls");
  102.     }
  103.  
  104.  
  105.     printf("rotovana veta je: \n");
  106.    
  107.     for(i =0; i <c;i++)                 //vytiskne po znacich rotovane slovo
  108.     {
  109.         printf("%c",slovo[i]);
  110.     }
  111.  
  112.     Sleep(interval);//ceka pocet milisekund, koolik si napises do zavorky (do promenne interval)
  113.     count++;
  114.     }while (count < pocet);
  115.  
  116.     printf("\n");
  117.     fflush(stdin);
  118.     printf("pro ukonceni rotace stiknete 'Q', jinym vstupem pokracuje\n");
  119.     scanf("%c",&rotace);
  120.     fflush(stdin);                  //odstrani "enter" z predchoziho scanf,ktery zustal na zasobniku, nvm jak vysvetlit jednoduse, zkus to bez toho a pochopis
  121.     }while (rotace!='Q');
  122.  
  123.     return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment