Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ####################################################
- ZPRS-projekt(rotace slova)
- author: Jan Hecko
- ####################################################
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <TIME.H>
- int main()
- {
- int count=0;//counter ktery se zvetsuje po kazde rotaci
- int pocet;//kolikrat se to otoci
- int interval=3000;//interval pro funkci Sleep() v milisekundach
- char smer;
- fflush(stdin);
- printf("Zadejte smer, kterym chcete rotovat (L/R): ");
- scanf("%c",&smer);
- fflush(stdin);
- while ((smer!='L')&&(smer!='R'))
- {
- printf("spatne zadani, opakujte vstup:");
- fflush(stdin);
- scanf("%c",&smer);
- fflush(stdin);
- }
- int i; //promenna pro pruchod u for
- const int u = 50; //max delka retezce - lze zmenit
- char slovo[u];
- printf("zadejte vetu\n");
- gets(slovo); //funkce gets nacte z klavesnice string a ulozi ho do promenne, ktera je v zavorkach
- int c = strlen(slovo); /*strlen():funkce ktera vraci delku promenne-stringu, ktery je v zavorkach a ulozi se do promenne c
- pozor: kdyby bylo v promenne "slovo" napr. "banan", tak to vrati 5, ale znaky se cislujou od 0,
- takze to je vlastne 0-4, proto je pak u toho foru i=(c-2), abych se dostal na predposledni char,
- pro posledni by bylo i=(c-1)
- */
- if (smer=='R')
- {
- printf("nyni bude slovo rotovat vpravo\n");
- }
- else
- {
- printf("nyni bude slovo rotovat vlevo\n");
- }
- char rotace; //do teto promenne se bude ukladat vstup pri dotazu, zda chces, aby program pokracoval v rotaci
- do
- {
- printf("zadejte kolikrat chcete aby retezec rotoval\n");
- scanf("%d",&pocet);//zadas kolikrat chces aby to rotovalo
- count = 0;
- char *p; //vytvori pointer na typ char
- char pom; //pomocna promenna kam se ulozi posledni znak, aby nebyl prepsan posunovanim
- do
- {
- if (smer=='R')
- {
- pom=slovo[c-1];
- for (i =(c-2);i>=0;i--) // od (delka stringu)-2 = predposledni znak (cisluje se od nuly)
- {
- p=&slovo[i]; // do p se ulozi adresa i-teho znaku v retezci (&=operator reference,ziskani adresy)
- 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)
- }
- slovo[0]=pom; //a nakonec se na prvni pozici stringu ulozi to, co bylo na konci
- system("cls"); //vymaze okno
- }
- else if (smer=='L')
- {
- pom=slovo[0];
- for(i=1;i<c;i++)
- {
- p=&slovo[i];
- slovo[i-1]=*p;
- }
- slovo[c-1]=pom;
- system("cls");
- }
- printf("rotovana veta je: \n");
- for(i =0; i <c;i++) //vytiskne po znacich rotovane slovo
- {
- printf("%c",slovo[i]);
- }
- Sleep(interval);//ceka pocet milisekund, koolik si napises do zavorky (do promenne interval)
- count++;
- }while (count < pocet);
- printf("\n");
- fflush(stdin);
- printf("pro ukonceni rotace stiknete 'Q', jinym vstupem pokracuje\n");
- scanf("%c",&rotace);
- fflush(stdin); //odstrani "enter" z predchoziho scanf,ktery zustal na zasobniku, nvm jak vysvetlit jednoduse, zkus to bez toho a pochopis
- }while (rotace!='Q');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment