- •Int main (void) {
- •Int main(void) {
- •Void f102(file* filein, double* y) {
- •Int main(void){
- •Int main (void) {
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void) {
- •Int main(void){
- •Int main(void) {
- •Int main(void) {
- •Int main(void) {
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
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*);