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

Int main(void){

FILE *in, *out;

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

int q,N,i;

int lev,prav, chislo_dyr; /* для получения ответа из f209 */

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,&lev,&prav,&chislo_dyr);

if(chislo_dyr==0) fprintf(out,"%d %d",lev,prav);

if(chislo_dyr >0) fprintf(out,"%d ",-1);

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

return 0;

}

< реализация функции void f209(...){...} >

< реализация функции void f205sort(...){...} >

/* конец файла 209.c */

/* Задача 210. Является ли массив «парным»: А[0]+A[2]+...=A[1]+A[3]+...? */

void f210(int A[], int N, int* y){

int i, s0=0,s1=0;

assert (N>1);

for (i=0; i+1<N; i=i+2) {s0=s0+A[i]; s1=s1+A[i+1];}

/* если индекс последнего элемента четен, то этот элемент не

учитывается в цикле и его нужно добавить к s0 вне цикла: */

if(N%2==1)s0=s0+A[N-1];

if(s0==s1)*y=1;

if(s0!=s1)*y=0;

return;

}

Задача 211. Является ли массив «счастливым», то есть существует ли его разбиение на две непустые части такие, что

A[0]+A[1]+...A[k-1]=A[k]+A[k+1]+...+A[N-1]?

Идея решения.Если массив "счастливый", то суммы в левой и правой частях равны, а значит удвоенная левая часть равна общей сумме.

/* Является ли массив «счастливым», то есть существует k такое, что

A[0]+A[1]+...A[k-1]=A[k]+A[k+1]+...+A[N-1]? */

void f211(int A[], int N, int* addr_k, int* addr_S){

int i,k,s,Slev;

assert (N>1);

for (i=0,s=0; i<N; i++) s=s+A[i];

Slev=A[0];

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

if(2*Slev==s){*addr_k=k; *addr_S=Slev; return;}

Slev=Slev+A[k];

}

*addr_k=-1;

return;

}

Задача 212. Сортировка массива вещественных чисел по неубыванию.

Функция f212 получается из функции 205sort заменой типов величин А и tmp с int на double в строках 1 и 3. Остальные строки не меняются.

/* Сортировка вещественного массива по неубыванию */

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f212sort(double*, double);

void f212(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); /* все элементы массива А прочитаны успешно */

f212(A,N,&otvet);

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

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

return 0;

}

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

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

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

*/

void f212sort(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 f212(double A[], int N){

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

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;

}

Функции f213, f214 и f215 отличаются от функции f212 только двумя первыми строками. В задаче 215 используется библиотечная функция double fabs( double x), вычисляющая модуль вещественного числа. Поэтому в начало файла с решением задачи 215 необходимо добавить строку #include <math.h>

Задача 213. Переставить элементы массива вещественных чисел таким образом, чтобы в начале массива оказались неотрицательные элементы, идущие по возрастанию, а в конце масси-

ва — отрицательные элементы, идущие по убыванию.

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f213sort(double*, double);

void f213(double*, double, double*);

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