Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОАиП Контрольная работа №1 Вариант №25

.doc
Скачиваний:
5
Добавлен:
01.04.2014
Размер:
301.06 Кб
Скачать

Вариант № 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();

}

Результат работы программы:

11