Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачи на экзамен по эвм.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
53.6 Кб
Скачать

Int main(void){

int n=0,i;

scanf("%d",&m);//количество строк, которые будут введены с клавиатуры

gets(buf);

for(i=0;i<m;i++){

t[i]=(char*)malloc(MAXL);

gets(t[i]);

}

freopen("input.txt","r",stdin);

freopen("output.txt","w",stdout);

while(gets(buf)){//считываем очередную строку из файла, пока не достигнем его конца

if(bad(buf)) continue;//если строка buf плохая, то игнорируем ее

s[n]=(char*)malloc(MAXL);//выделяем память для очередной строки

strcpy(s[n],buf);//копируем туда то, что считали

n++;

}

sort(s,0,n-1);

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

printf("%s\n",s[i]);

return 0; }

№14. #include <stdlib.h>

#include <stdio.h>

#define MAXN 10000

Void sort(int a[],int lt,int rt){

int i=lt,j=rt,x=a[(lt+rt)/2],t;

do{

while(abs(a[i])>abs(x)) i++;//находим следующий, который больше или равен

while(abs(a[j])<abs(x)) j--;//находим следующий, который меньше или равен

if(i<=j){

t=a[i];a[i]=a[j];a[j]=t;

//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]

i++;j--;

}

}while(i<=j);

if(lt < j) sort(a,lt,j);//сортируем первую половину

if(i < rt) sort(a,i,rt);//сортируем одну половину

//в двух половинах суммарно уже как минимум на 1 элемент меньше!

}

Int main(void){

FILE *in=fopen("input.txt","r");

FILE *out=fopen("output.txt","w");

int i=0,x,sum=0,n;

int *a=(int*)malloc(sizeof(int)*MAXN);

while(fscanf(in,"%d",&x) == 1){

if(x!=sum)

a[i++]=x;

sum+=x;

}

n=i;

sort(a,0,n-1);

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

fprintf(out,"%d ",a[i]);

fprintf(out,"\n");

return 0;

}

№15. #include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

int main(int argc, char **argv)

{

int block;

FILE *f;

int *mas;

int k = 0, i;

int * tmp;

int value;

int flag = 0;

mas = NULL;

printf("input block \n");

scanf("%d", &block);

f = fopen("input.txt", "r");

if (f == NULL)

assert(0);

while(fscanf(f, "%d", &value) == 1)

{

if (mas == NULL)

{

mas = (int *)malloc(block*sizeof(int));

mas[0] = value;

k++;

continue;

}

if (k%block == 0)

{

tmp = (int *)realloc(mas, (k + block)*sizeof(int));

if (tmp == NULL)

assert(0);

mas = tmp;

mas[k] = value;

k++;

continue;

}

mas[k] = value;

k++;

}

printf("\n");

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

printf("%d ", mas[i]);

printf("\n");

while (flag != 1)

{

flag = 1;

for (i = 0; i < k-1; i++)

{

if (mas[i] > mas[i + 1])

{

flag = 0;

value = mas[i];

mas[i] = mas[i+1];

mas[i+1] = value;

}

}

}

printf("after sort\n");

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

printf("%d ", mas[i]);

printf("\n");

free(mas);

return 0;

}

№16. #include <stdlib.h>

#include <stdio.h>

#include <string.h>

int cnt[256];//сколько раз встретился каждый символ

char a[256];

void sort(char a[],int lt,int rt){

int i=lt,j=rt,x=a[(lt+rt)/2];

char t;

do{

while(cnt[(unsigned)a[i]] < cnt[(unsigned)x] ) i++;//находим следующий, который больше или равен

while(cnt[(unsigned)a[j]] > cnt[(unsigned)x] ) j--;//находим следующий, который меньше или равен

if(i<=j){

t=a[i];a[i]=a[j];a[j]=t;

//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]

i++;j--;

}

}while(i<=j);

if(lt < j) sort(a,lt,j);//сортируем первую половину

if(i < rt) sort(a,i,rt);//сортируем одну половину

//в двух половинах суммарно уже как минимум на 1 элемент меньше!

}