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

Int main(void){

FILE* in; FILE* out;

double* A; // Описание имени массива A[]

int q, N, i;

int otvet;

out=fopen("output.txt","w"); if(out==NULL)return 1;

in =fopen("input.txt" ,"r"); if(in==NULL){fclose(out);return 1;}

q=fscanf(in, "%d", &N); assert(q==1&&N>0); /* N прочитано успешно */

A = (double*) malloc(N*sizeof(double));

for(i=0; i<N; i++) q=fscanf(in,"%lf ",&A[i]);

assert (q==1); /* все элементы массива А прочитаны успешно */

f213(A,N,&otvet);

fprintf(out,"%lf ",otvet);

fclose(in); fclose(out); free(A);

return 0;

}

/* Сортировка массива целых чисел на том же месте по неубыванию.

Массив А считается отсортированным по неубыванию, если для любой пары

x, y соседних элементов массива выполнено нестрогое неравенство x<=y.

*/

void f213sort(int A[], int N){

#define Besporyadok(x,y) (x>y) /* Порядок <==> НЕубывание */

int i,j,tmp;

int ChisloBespor; /* Число беспорядков */

assert (N>0);

for (i=N-1; i>0; i=i-1) {

ChisloBespor=0;

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

if( Besporyadok(A[j],A[j+1]) ){

tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;

ChisloBespor++;

}

}

if(ChisloBespor==0) return;

}

return;

}

void f213(double A[], int N){

#define Besporyadok(x,y) ((x>=0&&y>=0&&x>y)||(x<0&&y<0&&x<y)||(x<0&&y>=0))

int i,j; double tmp;

int ChisloBespor; /* Число беспорядков */

assert (N>0);

for (i=N-1; i>0; i=i-1) {

ChisloBespor=0;

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

if( Besporyadok(A[j],A[j+1]) ){

tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;

ChisloBespor++;

}

}

if(ChisloBespor==0) return;

}

return;

}

Задача 214. Переставить элементы массива вещественных чисел таким образом, чтобы в начале массива оказались отрицательные элементы, а в конце массива – неотрицательные. При

этом взаимный порядок отрицательных элементов и взаимный порядок неотрицательных

элементов должны остаться такими же, как и в исходном массиве.

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f214sort(double*, double);

void f214(double*, double, double*);

Int main(void){

FILE* in; FILE* out;

double* A; // Описание имени массива A[]

int q, N, i;

int otvet;

out=fopen("output.txt","w"); if(out==NULL)return 1;

in =fopen("input.txt" ,"r"); if(in==NULL){fclose(out);return 1;}

q=fscanf(in, "%d", &N); assert(q==1&&N>0); /* N прочитано успешно */

A = (double*) malloc(N*sizeof(double));

for(i=0; i<N; i++) q=fscanf(in,"%lf ",&A[i]);

assert (q==1); /* все элементы массива А прочитаны успешно */

f214(A,N,&otvet);

fprintf(out,"%lf ",otvet);

fclose(in); fclose(out); free(A);

return 0;

}

/* Сортировка массива целых чисел на том же месте по неубыванию.

Массив А считается отсортированным по неубыванию, если для любой пары

x, y соседних элементов массива выполнено нестрогое неравенство x<=y.

*/

void f214sort(int A[], int N){

#define Besporyadok(x,y) (x>y) /* Порядок <==> НЕубывание */

int i,j,tmp;

int ChisloBespor; /* Число беспорядков */

assert (N>0);

for (i=N-1; i>0; i=i-1) {

ChisloBespor=0;

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

if( Besporyadok(A[j],A[j+1]) ){

tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;

ChisloBespor++;

}

}

if(ChisloBespor==0) return;

}

return;

}

void f214(double A[], int N){

#define Besporyadok(x,y) (x>=0 && y<0)

int i,j; double tmp;

int ChisloBespor; /* Число беспорядков */

assert (N>0);

for (i=N-1; i>0; i=i-1) {

ChisloBespor=0;

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

if( Besporyadok(A[j],A[j+1]) ){

tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;

ChisloBespor++;

}

}

if(ChisloBespor==0) return;

}

return;

}

Результирующий массив получается из исходного путем многократного приведения в порядок пар соседних элементов (x,y). Eсли Besporyadok(x,y) то пара (x,y) заменяется на пару (y,x). Поскольку в каждой такой паре одно число неотрицательно, а другое отрицательно, любая такая замена не меняет взаимный порядок отрицательных элементов или взаимный порядок неотрицательных элементов.

Задача 215. Переставить элементы массива вещественных чисел по убыванию их модулей (сортировка по абсолютной величине). Ответ: последовательно записанные элементы преобразованного массива, при этом на взаимный порядок чисел, одинаковых по абсолютной величине, не накладывается никаких ограничений, они могут располагаться в преобразованном

массиве в любом порядке друг относительно друга.

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

#include <math.h>

void f215sort(double*, double);

void f215(double*, double, double*);

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