
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
Int main(void){
FILE *in=fopen("input.txt","r");
FILE *out=fopen("output.txt","w");
char c;
int tot_cnt=0,i,j,n;
memset(cnt,0,sizeof(cnt));//обнуляет массив cnt
while(1){
c=getc(in);
if(feof(in)) break;
if(c=='\n') continue;//игнорируем переводы строки. но если мы этого не хотим, то строчку надо УДАЛИТЬ
cnt[(unsigned)c]++;//символ с встретился еще раз. фиксируем
tot_cnt++;//увеличиваем количество считанных символов на 1
}
j=0;
for(i=0;i<256;i++){//перебираем все 256 символов и записываем в массив а только те, которые встречаются не нулевое число раз
if(cnt[i]==0) continue;
a[j++]=i;
}
n=j;
sort(a,0,n-1);
for(i=0;i<n;i++)
fprintf(out,"%c %d %.2lf\n",a[i],cnt[(unsigned)a[i]],((double)cnt[(unsigned)a[i]])/tot_cnt * 100.0);
return 0;
}
№17. #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXS 256//максимальное количество элементов в строке
typedef struct node{//элемент списка
struct node *next,*prev;//следующий и предыдущий элемент
char s[MAXS];//данные текущего элемента (в 4 задаче - строчка длины MAXS)
} node;
typedef struct list{
node *head;//выделенный элемент списка
int n;//количество элементов в списке
} list;
void swap(char s[],char t[]){//поменять местами 2 строки
char buf[MAXS];//вспомогательная переменная
strcpy(buf,s);//копируем в buf s
strcpy(s,t);//в s t
strcpy(t,buf);//в t buf
}
void init(list *lst){//инициализация списка
lst->head=0;//создается пустой список. совсем пустой
lst->n=0;
}
void link(node *u,node *v){//связать элементы списка u и v
u->next=v;
v->prev=u;
}
void ins(list *lst,char s[]){//добавление элемента в список
node *e=(node*)malloc(sizeof(node));//выделение памяти под 1(!!) элемент типа "node". никаких массивов здесь нет
strcpy(e->s,s);//копирование строчки s в элемент списка
// a->b = (*a).b
if(lst->n==0){//если список пустой
lst->head=e;//выделенный элемент (а других и нет :D) пусть будет равен только что созданному
e->next=e;//закольцовываем список. e<-e->e
e->prev=e;
lst->n++;
return;//завершаем выполнение функции
}
//если в списке естьэлементы, вставляем вновь созданный элемент списка после элемента head
link(lst->head->prev,e);// head->prev -> e
link(e,lst->head);//e -> head
lst->n++;
}
void rotate(list *lst){//перемещение головы списка на позицию вперед
lst->head=lst->head->next;
}
char is_num16(char s[]){
int x=0,i,n=strlen(s);
if(n>5) return 0;
for(i=0;i<n;i++){
if(s[i]<'0'||s[i]>'9') return 0;//елси s[i] не цифра, то вернуть 0 и прекратить работу функции
else{
x*=10;
x+=s[i]-'0';
}
}
if(x!=0 && s[0]=='0') return 0;//если число не 0, то в начале не должно быть ни одного нуля
if(x==0 && n > 1) return 0;//если число 0 записывается РОВНО одним нулем. 00 - некорректная запись
return x>=0 && x < (1<<16);//16 разрядное число x Е [0,2^16). (1<<16) = 2^16
}
void find_num16(char s[],FILE *out){
int n=strlen(s),i,j;
char *t=(char*)malloc(n+1);//строка, с которой будет хранится текущая подстрока s
//перебираем все построки s
for(i=0;i<n;i++)//начинающиеся с i-го символа
for(j=0;s[i+j];j++){//длины j+1.
t[j]=s[i+j];
t[j+1]=0;//полноценная строка в С должна завершаться 0.
if(is_num16(t)) //если подстрока является 16-ти битным числом без знака - выведем ее.
fprintf(out,"%s\n",t);
else break;//иначе все подстроки, содержащие ее не будут являться дестичными записями таких чисел. прекращаем работу для текущего i
}
}
char s[MAXS];