- •Содержание:
- •Введение
- •Задача 1(№130)
- •Текст программы:
- •Задача 2(№133)
- •Текст программы:
- •Задача 3(№142)
- •Текст программы:
- •Задача 4(№164)
- •Текст программы:
- •Задача 5(№169)
- •Текст программы:
- •Задача 6(№179)
- •Текст программы:
- •Задача 7(№187)
- •Текст программы:
- •Текст программы:
- •Задача 9(№197)
- •Текст программы:
- •Список используемой литературы
Задача 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;
}
}