Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР Программирование - Опарин И.А. - 2 семестр....docx
Скачиваний:
5
Добавлен:
18.09.2019
Размер:
62.47 Кб
Скачать

Задача 4(№164)

Постановка задачи: Напишите функцию leftrot(x, n), которая циклически сдвигает влево x на n разрядов.

Текст программы:

#include<iostream>

using namespace std;

#include<conio.h>

#include<string.h>

typedef int Typei;

int leftrot(int x,int n)

{

int size=sizeof(x)*8;

return (x<<n)|((x>>size-n)&~(~0<<n));

}

int rightrot(int x,int n)

{

return (leftrot(x,sizeof(x)*8-n));

}

char*itobin (Typei n,char*s);

int main()

{

clrscr ();

char s[33];

int p=55,n=5;

int q=rightrot(p,n);

cout<<"p="<<p<<"="<<itobin(p,s)<<endl;

cout<<"q="<<q<<"="<<itobin(q,s)<<endl;

q=leftrot(p,sizeof(p)*8-2);

cout<<"q="<<q<<"="<<itobin(q,s)<<endl;

return 0;

}

char*itobin(Typei n, char*s)

{

int i, d;

int size=sizeof(Typei)*8;

Typei onebit=1;

for(i=0;i<size;i++,onebit<<=1)

s[i]=n&onebit?'1':'0';

s[i]='\0';

strrev(s);

getch ();

return s;

}

Задача 5(№169)

Постановка задачи: Измените программу 36 так, чтобы ключевые слова печатались в порядке возрастания их чисел вхождений в читаемый текст.

Текст программы:

struct key{

char*word;

int count;

};

key keytab[]={

{"auto", 0}, {"break", 0}, {"case", 0}, {"char", 0},

{"const", 0}, {"continue", 0}, {"default", 0}, {"do", 0},

{"double", 0}, {"else", 0}, {"enum", 0}, {"extern", 0},

{"float", 0}, {"for", 0}, {"goto", 0}, {"if", 0},

{"int", 0}, {"long", 0}, {"register", 0}, {"return", 0},

{"short", 0}, {"signed", 0}, {"sizeof", 0}, {"static", 0},

{"struct", 0}, {"switch", 0}, {"typedef", 0}, {"union", 0},

{"unsigned", 0}, {"void", 0}, {"volatile", 0}, {"while", 0}

};

int NKEYS=(sizeof(keytab)/sizeof(key));

#include<iostream.h>

#include<fstream.h>

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<ctype.h>

int fgetword(ifstream&, char*, int);

int binsearch(char*, key*, int);

const int MAXWORD=100;

void main()

{

int n;

char word[MAXWORD], c;

const int LENFN=30;

void bubble_key(key x[],int n); //Объявление функции сортировки

char inpfname[LENFN], outfname[LENFN];

ifstream inpf;

ofstream outf;

ifstream tmpf;

cout<<"\nВведите имя входного файла\n";

cin.getline(inpfname, LENFN);

inpf.open(inpfname);

if(!inpf){

cerr<<"Не могу открыть файл"<<inpfname;

exit(1);

}

while(fgetword(inpf, word, MAXWORD) !=EOF)

if(isalpha(word[0]))

if((n=binsearch(word, keytab, NKEYS))>=0)

keytab[n].count++;

bubble_key(keytab,NKEYS);

for(n=0;n<NKEYS;n++)

if(keytab[n].count>0)

cout<<keytab[n].count<<" "<<keytab[n].word<<endl;

cout<<"Введите имя выходного файла\n";

cin.getline(outfname, LENFN);

tmpf.open(outfname);

if(!tmpf==0){

cout<<"Файл"<<outfname<<" существует. Переписать? Y/N";

if((c=cin.get())!='Y' && c!='y')

exit(0);

}

tmpf.close();

outf.open(outfname);

for(n=0;n<NKEYS;n++)

if(keytab[n].count>0)

outf<<keytab[n].count<<" "<<keytab[n].word<<endl;

getch();

}

int binsearch(char*word, key tab[], int n)

{

int cond;

int low, high, mid;

low=0;

high=n-1;

while(low<=high){

mid=(low+high)/2;

if((cond=strcmp(word, tab[mid].word))<0)

high=mid-1;

else if(cond>0)

low=mid+1;

else

return mid;

}

return -1;

}

int fgetword(ifstream&f,char*word,int lim)

{

int c;

char*w=word;

while(isspace(c=f.get()))

;

if(c!=EOF)

*w++=c;

if(!isalpha(c)){

*w='\0';

return c;

}

for(;--lim>0;w++)

if(!isalpha(*w=f.get())){

f.putback(*w);

break;

}

*w='\0';

return word[0];

}

void bubble_key(key x[], int n)

{

int i,j;

key tmp;

for(i=n-1;i>0;i--)

for(j=0;j<i;j++)

if(x[j].count>x[j+1].count){

key tmp=x[j];

x[j]=x[j+1];

x[j+1]=tmp;

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]