parent
fae8efe512
commit
9a2b004dff
@ -0,0 +1,23 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
int lower(int c); |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
int i; |
||||||
|
|
||||||
|
char s[] = "DEERTGAD UIOG\0"; |
||||||
|
printf("s = %s\n", s); |
||||||
|
|
||||||
|
printf("lower s = "); |
||||||
|
for (i = 0; s[i] != '\0'; i++) |
||||||
|
printf("%c", lower(s[i])); |
||||||
|
printf("\n"); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/* lower: преобразование прописных c в строчные, только для ASCII */ |
||||||
|
int lower(int c) |
||||||
|
{ |
||||||
|
return (c >= 'A' && c <='Z') ? c +'a'-'A' : c; |
@ -0,0 +1,38 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
unsigned setbits(unsigned x, int p, int n, unsigned y); |
||||||
|
void printfbit(unsigned n); |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
printf("76543210\n\n"); |
||||||
|
|
||||||
|
unsigned c1 = 'f'; |
||||||
|
printfbit(c1); |
||||||
|
|
||||||
|
unsigned c2 = 'z'; |
||||||
|
printfbit(c2); |
||||||
|
|
||||||
|
printfbit(setbits(c1, 5, 3, c2)); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/* setbits: x получает n правых бит из y, начиная с p-й позиции */ |
||||||
|
unsigned setbits(unsigned x, int p, int n, unsigned y) |
||||||
|
{ |
||||||
|
return ( (~0 << (p+1)) & x ) | ( ~(~0 << (p+1-n)) & x ) | |
||||||
|
(~(~0 << n) & y) << (p+1-n); |
||||||
|
} |
||||||
|
|
||||||
|
void printfbit(unsigned n) |
||||||
|
{ |
||||||
|
for(int i = 7; i >= 0; i--) |
||||||
|
{ |
||||||
|
if(n & (1 << i)) |
||||||
|
putchar('1'); |
||||||
|
else |
||||||
|
putchar('0'); |
||||||
|
} |
||||||
|
putchar('\n'); |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
unsigned invert(unsigned x, int p, int n); |
||||||
|
void printfbit(unsigned n); |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
printf("76543210\n\n"); |
||||||
|
|
||||||
|
unsigned c = 'f'; |
||||||
|
printfbit(c); |
||||||
|
|
||||||
|
printfbit(invert(c, 5, 3)); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/* invert: инвертирует n бит из x, начиная с p-й позиции */ |
||||||
|
unsigned invert(unsigned x, int p, int n) |
||||||
|
{ |
||||||
|
return x ^ (~(~0 << n) << (p+1-n)); |
||||||
|
} |
||||||
|
|
||||||
|
void printfbit(unsigned n) |
||||||
|
{ |
||||||
|
for(int i = 7; i >= 0; i--) |
||||||
|
{ |
||||||
|
if(n & (1 << i)) |
||||||
|
putchar('1'); |
||||||
|
else |
||||||
|
putchar('0'); |
||||||
|
} |
||||||
|
putchar('\n'); |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
/* binsearch: найти х в v[0] <= v[1] <= … <= v[n-1] */ |
||||||
|
int main(int x, int v[], int n) |
||||||
|
{ |
||||||
|
int low, high, mid; |
||||||
|
low = 0; |
||||||
|
high = n - 1 ; |
||||||
|
while (low <= high && x != v[mid]) { |
||||||
|
mid = (low + high) / 2; |
||||||
|
if (x < v[mid]) |
||||||
|
high = mid - 1; |
||||||
|
else |
||||||
|
low = mid + 1; |
||||||
|
mid = (low + high) / 2; \ |
||||||
|
} |
||||||
|
if ( x == v[mid]) |
||||||
|
return mid; |
||||||
|
else |
||||||
|
return -1; /* совпадения нет */ |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
#define MAXLEN 30 |
||||||
|
|
||||||
|
void escape(char s[], char t[]); |
||||||
|
void unescape(char s[], char t[]); |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
char input[MAXLEN] = "bla\tbla\nbla\n"; |
||||||
|
char output[MAXLEN]; |
||||||
|
|
||||||
|
printf("Original = %s\n", input); |
||||||
|
escape(output, input); |
||||||
|
printf("Escaped = %s\n", output); |
||||||
|
unescape(input, output); |
||||||
|
printf("Unescaped = %s\n", input); |
||||||
|
printf("The End\n"); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
void escape(char s[], char t[]) |
||||||
|
{ |
||||||
|
int i, j; |
||||||
|
|
||||||
|
for (i = 0, j = 0; s[i]; i++, j++) |
||||||
|
switch (t[i]) { |
||||||
|
case '\t': |
||||||
|
s[j++] = ' '; |
||||||
|
s[j] = 't'; |
||||||
|
break; |
||||||
|
case '\n': |
||||||
|
s[j++] = ' '; |
||||||
|
s[j] = 'n'; |
||||||
|
break; |
||||||
|
default: |
||||||
|
s[j] = t[i]; |
||||||
|
break; |
||||||
|
} |
||||||
|
s[j] = t[i]; // \0 ! |
||||||
|
} |
||||||
|
|
||||||
|
void unescape(char s[], char t[]) |
||||||
|
{ |
||||||
|
int i, j; |
||||||
|
|
||||||
|
for (i = 0, j = 0; s[i]; i++, j++) |
||||||
|
switch (t[i]) { |
||||||
|
case ' ': |
||||||
|
switch (t[++i]) { |
||||||
|
case 't': |
||||||
|
s[j] = '\t'; |
||||||
|
break; |
||||||
|
case 'n': |
||||||
|
s[j] = '\n'; |
||||||
|
break; |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
s[j] = t[i]; |
||||||
|
break; |
||||||
|
} |
||||||
|
s[j] = t[i]; |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#include <limits.h> |
||||||
|
|
||||||
|
void itoa(int n, char s[]); |
||||||
|
void reverse(char s[]); |
||||||
|
|
||||||
|
int main(void) { |
||||||
|
char buffer[20]; |
||||||
|
int i = 35; |
||||||
|
|
||||||
|
printf("Number: %d\n", i); |
||||||
|
itoa(i, buffer); |
||||||
|
printf("Buffer : %s\n", buffer); |
||||||
|
|
||||||
|
printf("INT_MIN: %d\n", INT_MIN); |
||||||
|
itoa(INT_MIN, buffer); |
||||||
|
printf("Buffer : %s\n", buffer); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/* itoa: преобразование n в строку s */ |
||||||
|
void itoa(int n, char s[]) { |
||||||
|
int i, sign; |
||||||
|
sign = n; /* сохраняем знак */ |
||||||
|
|
||||||
|
i = 0; |
||||||
|
do { /* генерируем цифры в обратном порядке */ |
||||||
|
s[i++] = abs(n % 10) + '0'; /* следующая цифра */ |
||||||
|
} while ( n /= 10 ); /* исключить ее */ |
||||||
|
if (sign < 0) |
||||||
|
s[i++] = '-'; |
||||||
|
|
||||||
|
s[i] = '\0'; |
||||||
|
reverse(s); |
||||||
|
} |
||||||
|
|
||||||
|
void reverse(char s[]) { |
||||||
|
int c, i, j; |
||||||
|
for ( i = 0, j = strlen(s)-1; i < j; i++, j--) { |
||||||
|
c = s[i]; |
||||||
|
s[i] = s[j]; |
||||||
|
s[j] = c; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#include <math.h> |
||||||
|
|
||||||
|
|
||||||
|
int convert_base(char *p, int b, int s); |
||||||
|
|
||||||
|
int main() { |
||||||
|
char p[] = "111"; |
||||||
|
int b = 10; |
||||||
|
int s = 8; |
||||||
|
|
||||||
|
int result = convert_base(p, b, s); |
||||||
|
printf("Converted number: %d\n", result); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
// Функция для конвертации числа из одного основания в другое |
||||||
|
int convert_base(char *p, int b, int s) { |
||||||
|
int decimal = 0; |
||||||
|
int len = strlen(p); |
||||||
|
|
||||||
|
// Преобразование числа в десятичную систему счисления |
||||||
|
for (int i = 0; i < len; i++) { |
||||||
|
decimal += (p[i] - '0') * pow(b, len - i - 1); |
||||||
|
} |
||||||
|
|
||||||
|
// Преобразование десятичного числа в нужное основание |
||||||
|
int result = 0; |
||||||
|
int index = 0; |
||||||
|
while (decimal > 0) { |
||||||
|
result += (decimal % s) * pow(10, index); |
||||||
|
decimal /= s; |
||||||
|
index++; |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
Loading…
Reference in new issue