/* 1)Дана вещественная последовательность a1, a2,... , an.
Определить максимальное количество идущих подряд положительных
членов последовательности. Вывести найденный фрагмент.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* в этой реализации под последовательностью понимается массив */
enum {MAX_SIZE=100}; /* максимальная длина последовательности */
int in_positives; /* признак: в подпоследовательности? */
int size; /* используемая длина массива */
int i; /* номер текущего элемента последовательности */
int first; /* номер первого элемента максимальной подпоследовательности */
int curr_len; /* текущая длина подпоследовательности */
int max_len; /* максимальная длина подпоследовательности */
float v[MAX_SIZE];
size = 0;
/* ввод данных */
printf("Вводите данные, CTRL-Z для окончания\n");
printf("v[%d]=",size);
for(;size<MAX_SIZE && scanf("%f", &v[size])!= EOF;)
{
size++;
printf("v[%d]=",size);
};
if (size==0)
printf("Последовательность пуста\n");
else
{
in_positives = 0;
max_len = 0;
curr_len = 0;
for (i=0; i<size; i++)
{
if (v[i]<=0 && in_positives)
{
in_positives = 0;
if (curr_len > max_len)
{
max_len = curr_len;
first = i-max_len;
}
curr_len=0;
}
else if (v[i]>0)
{
in_positives = 1;
curr_len++;
}
}
if (in_positives && curr_len>max_len)
{
max_len = curr_len;
first = i-max_len;
}
printf("Наибольшая подпоследовательность положительных элементов ");
for (i=first; i<first+max_len; i++)
printf("%4.2f;", v[i]);
printf("\n");
printf("Ее длина %d\n", max_len);
}
system("Pause");
return 0;
}
/*
2)Дано целое неотрицательное число <2^16. Получить число перестановкой битов каждого
байта данного числа в обратном порядке.
Задача решается перестановкой "по месту"
*/
#include <stdio.h>
#include <stdlib.h>
void print_binary(const unsigned short val);
int main()
{
int i;
int num;
int len = sizeof(unsigned short)*8;
int hi, lo; /* левый и правый биты в цикле */
printf("num=");
scanf("%u", &num);
printf("Введенное число\n");
print_binary(num);
for (i=0; i<len/2; i++)
{
hi = (num & (1 << (len-i-1)))!=0; /* левый бит */
lo = (num & (1 << i))!=0; /* правый бит */
/* если установлен левый бит, установить правый бит,
иначе сбросить правый бит */
num = (hi ? num | 1<<i : num & ~(1<<i));
/* если установлен правый бит, установить левый бит,
иначе сбросить левый бит */
num = (lo ? num | 1<<(len-i-1) : num & ~(1<<(len-i-1)));
}
printf("Число с переставленными битами\n");
print_binary(num);
system("pause");
return 0;
}
void print_binary(const unsigned short val)
/* печать беззнакового двухбайтового целого в битовой форме */
{
int i;
int len = sizeof(unsigned short)*8; /* бит в числе */
for (i=len-1; i>=0; i--)
putchar(val & (1 << i) ? '1' : '0');
putchar('\n');
}
/*
2)Дано целое неотрицательное число <2^16.
Получить число перестановкой битов каждого байта данного числа в обратном порядке.
Перестановка битов каждого байта в отдельности. Решение с использованием другого числа.
*/
#include <stdio.h>
#include <stdlib.h>
void print_binary(const unsigned short val);
unsigned char reverse(const unsigned char val);
int main()
{
int num1, num2;
unsigned char ch;
unsigned char hi, lo;
printf("num1=");
scanf("%u", &num1);
printf("Введенное число\n");
print_binary(num1);
hi = 0xFF & (num1 >> 8); /* левый байт */
lo = 0xFF & num1; /* правый байт */
printf("Число с переставленными битами\n");
num2 = (reverse(hi)<<8) | reverse(lo);
print_binary(num2);
system("pause");
return 0;
}
void print_binary(const unsigned short val)
/* печать беззнакового двухбайтового целого в битовой форме */
{
int i;
int len = sizeof(unsigned short)*8; /* бит в числе */
for (i=len-1; i>=0; i--)
putchar(val & (1 << i) ? '1' : '0');
putchar('\n');
}
unsigned char reverse(const unsigned char val)
{
/* Перестановка битов байта*/
int i;
unsigned char res;
res = val & 1;
for (i=1; i<8; i++)
{
res = (res << 1) | ((val >> i) & 1);
}
return res;
}
/*
3)Строку, представляющую собой запись вещественного числа в форме с
фиксированной точкой, преобразовать в строку, представляющую собой
запись того же числа в форме с плавающей точкой в нормализованном виде.
*/
/*
http://www.tspu.tula.ru/ivt/old_site/umr/timoi/solovieva/Computer/chisl_vpl.htm
Поэтому договорились для выделения единственного варианта записи
числа считать, что мантисса всегда меньше единицы, а ее первый
разряд содержит отличную от нуля цифру
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int main()
{
char s1[80];
char s2[80];
int i,j;
int power;
gets(s1);
i=0;
j=0;
while (s1[i]!='\0' && s1[i]!='-' && s1[i]!= '.' && !isdigit(s1[i]))
i++;
if (s1[i]=='\0')
{
printf("Нет числа\n");
getch();
return 0;
}
if (s1[i]=='-')
{
s2[j++]='-';
i++;
}
if (s1[i]!='.' && !isdigit(s1[i]))
{
printf("Нет числа\n");
getch();
return 0;
}
s2[j++]='0';
s2[j++]='.';
power=0;
while (s1[i]!='\0' && s1[i]=='0')
i++;
while (s1[i]!='\0' && isdigit(s1[i]))
{
s2[j++]=s1[i++];
power++;
}
if (s1[i]=='.')
i++;
if (power==0)
while (s1[i]!='\0' && s1[i]=='0')
{
power--;
i++;
}
while (s1[i]!='\0' && isdigit(s1[i]))
s2[j++]=s1[i++];
s2[j++]='e';
s2[j++]=(power>=0 ? '+': '-');
if (power<0) power=-power;
s2[j++]=power %10 +'0';
while (power >= 10)
{
power/=10;
s2[j]=s2[j-1];
s2[j-1]='0'+power % 10;
j++;
}
s2[j]='\0';
puts(s2);
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.