ОАиП Контрольная работа №1 Вариант №25
.docВариант № 25.
Задание №1
Даны целые М и N и вектор действительных чисел Х[1…N]. Найти целое число i (1 ≤ i ≤ N-M), для которого сумма х[i] + … + x[i+M] ближе всего к нулю.
Блок-схема алгоритма функции main:
for (i=0)(i<N-M)
for (j=i)(j<=i+M)
j++
abs(sum)<sum_prev?
Нет
Да
i++
Листинг программы:
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <alloc.h>
int main(void)
{
clrscr();
int N,M;
int i,j,index;
float *X,sum=0,sum_prev=0xFFFFFFFF;
puts("Enter N:");
scanf("%d",&N);
if (N<=0)
{
puts("N should be >0");
getch();
return -1;
}
puts("Enter M:");
scanf("%d",&M);
if (M<0 || M>=N)
{
puts("should be 0<=M<N");
getch();
return -1;
}
X = (float *) calloc(N, sizeof(float));
printf("Enter vector X[%d]:\n",N);
for (i=0;i<N;i++)
scanf("%e",X+i);
printf("Vector X[%d]:\n",N);
for (i=0;i<N;i++)
printf("%.3f ",*(X+i));
for (i=0;i<N-M;i++)
{
for (j=i;j<=i+M;j++) sum+=*(X+j);
if (abs(sum)<sum_prev)
{
index = i;
sum_prev = abs(sum);
}
sum = 0;
}
printf("\ni = %d",index);
getch();
return 0;
}
Результат работы программы:
Задание №2
Ввести строку символов, содержащую два или более слов, разделенных пробелами. Написать функцию, меняющую местами все четные и нечетные слова в строке, предполагая, что за один раз можно менять местами не более двух символов. Результат вывести на экран. Стандартных функций работы со строками не использовать.
Блок-схема алгоритма функции main:
for (i=0) ( i<length)
Да Нет
i++
for( j=0) (j<count)
Да
Нет
Да
str_mas[j][k]!='\0'?
Нет
Да
str_mas[j+1][k]!='\0'?
Нет
Да
str_tmp[k]!='\0'?
Нет
j=j+2
Листинг программы:
#include <conio.h>
#include <stdio.h>
void main()
{
clrscr();
char str_in[255];
char str_tmp[30];
char str_mas[10][30];
int i,j,k,count,length;
puts("Enter string:");
gets(str_in);
length=0;j=0;k=0;
while(str_in[length]!='\0') length++;
for (i=0;i<length;i++)
{
if (str_in[i]==' ')
{
j++;
k=0;
}
else
{
str_mas[j][k]=str_in[i];
k++;
}
count = j+1;
}
//================================
for (j=0;j<count;j=j+2)
{
if (j==(count-1)) continue;
k=0;
do
{
str_tmp[k] = str_mas[j][k];
k++;
}while(str_mas[j][k]!='\0');
str_tmp[k] = '\0';
k=0;
do
{
str_mas[j][k] = str_mas[j+1][k];
k++;
}while(str_mas[j+1][k]!='\0');
str_mas[j][k]='\0';
k=0;
do
{
str_mas[j+1][k] = str_tmp[k];
k++;
}while(str_tmp[k]!='\0');
str_mas[j+1][k] = '\0';
}
for (j=0;j<count;j++)
{
printf("%s ",str_mas[j]);
}
getch();
}
Результат работы программы: