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

Int main(void){

FILE* in;

FILE* out;

int* A;

int q, N, i;

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);

if (q!=1 || N<1) return -1;

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

assert(A!=NULL);

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

f207(A,N);

for (i=0; i<N; i++) fprintf(out, "%d ", A[i]);

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

return 0;

}

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

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

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 f207(int A[], int N){

int i;

assert (N>0);

f207sort(A,N);

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

if (A[i]>=0)return; else A[i]=0;

}

return;

}

Задача 208. Полусуммы.

Случай одноэлементного массива разбираем отдельно. В массиве из 2-х или более элементов при обработке текущего элемента А[i] будем помнить его и предыдущий элемент А[i-1] в переменных double tek, pred.

/* Аnew[i]=(A[i-1]+A[i+1])/2;

Аnew[0]=(0+A[1])/2; Аnew[N-1]=(A[N-2]+0)/2; */

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f208(int*, int, int*); int main(void){

FILE* in; FILE* out;

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

int q, N, i;

int otvet; /* переменная для получения ответа из функции f205 */

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 = (int*) malloc(N*sizeof(int));/*выделение N*4 байт для массива А*/

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

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

f208(A,N,&otvet);

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

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

return 0;

}

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

int i; double pred, tek, predposl;

assert (N>0);

if(N==1){A[0]=0.0;return;};

predposl=A[N-2];

pred=A[0];

A[0]=A[1]/2.0;

for (i=1; i<N-1; i++){

tek=A[i]; A[i]=(pred+A[i+1])/2.0; pred=tek;

}

A[N-1]=predposl/2.0;

return;

}

Задача 209. Является ли массив «плотным».

Упорядочим массив A по неубыванию с помощью функции f205sort. Для неубывающего массива A отрезок значений равен [ A[0], A[N-1] ]. Неубывающий массив целых чисел плотен, если в нем нет «дыр» - пар соседних элементов с разностью больше 1. Функция f209

будет вычислять три числа: левый и правый концы отрезка значений и число дыр. При нулевом числе дыр основная функция main должна вывести в файл output.txt два конца отрезка значений; при ненулевом – вывести число -1

Пример. Массив {5,3,6,2,8,3,5,7,2} НЕплотный, так как сортировкa по неубыванию дает {2,2,3,3, 5,5,6,7,8} и обнаруживается дыра (3, 5).

/* Является ли массив «плотным» */

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f209sort(int*, int);

void f209(int*, int, int*); int main(void){

FILE* in; FILE* out;

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

int q, N, i;

int otvet; /* переменная для получения ответа из функции f205 */

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 = (int*) malloc(N*sizeof(int));/*выделение N*4 байт для массива А*/

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

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

f209(A,N,&otvet);

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

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

return 0;

}

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

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

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

*/

void f209sort(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 f209(int A[], int N, int* LEV, int* PRAV, int* y){

int i,chislo_dyr,last;

assert (N>0);

f205sort(A,N);

/* подсчет числа дыр в неубывающем массиве: */

last=A[0]; chislo_dyr=0;

for (i=1; i<N; i++){

if (A[i]>(last+1))chislo_dyr++;

last=A[i];

}

*LEV=A[0]; *PRAV=A[N-1]; *y=chislo_dyr;

return;

}

В этой задаче приведем еще основную функцию:

/* file 209.c Является ли массив плотным */

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f205sort(int*, int);

void f209(int*, int, int*, int*, int*);

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