Задачи по написанию ф-ции на С

  • Автор темы Again
  • Дата начала
A

Again

Гость
#1
Даные программы нужны только на Си

Задание 1. Упорядочить строки матрицы m * n в порядке уменьшения k-того элемента в рядках.

Задание 2. Составить функцию Zam (s, p, q, n), которая в строке символов s заменяет все вхождения подстроки p на не более чем n символов подстроки q. Стандартные функции для работы со строками не использовать. Считается, что в s достаточно места для размещения результирующего строки.

Задание 3. Составить рекурсивную функцию, которая переводит числа из десятичной системы счисления в шестнадцатиричную.
 
I

ierofant

Гость
#2
Третью задачу какой-то извращенец придумал.

Вот вам десятичное число:
C++:
int x = 11;
А вот вам его вывод в шестнадцатиричной форме:
C++:
std::cout << std::hex << x << std::endl;
Меня это задание вообще поразило. Кому фантазии хватило на такое?
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#3
ierofant
Я думаю он имеет в виду что надо составить свою функции (с рекурсией) вывода числа в шестнадцатеричной системе.

Again
Правильно!?
 
A

Again

Гость
#7
to ierofant: задачу придумали не извращенцы, а те люди, которые преподают в вузе...
И тем более мне нужна прога на Си(а не на С++), которая будет включать в себя рекурсивную ф-цию перевода из 10-чной в 16-ую систему счисления...
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#8
C++:
#include <stdio.h>
#include <mem.h>

char	hex_table[] = "0123456789abcdef";

void to_hex( char *p, int v, int n )
{
p[n - 1] = hex_table[v & 15];
v >>= 4;
if ( v ) to_hex( p, v, --n );
}

int main()
{
int		v;
char	p[9];
char *	pp;

scanf( "%d", &v );
memset( p, ' ', sizeof( p ) - 1 );
p[sizeof( p ) - 1] = '\0';

to_hex( p, v, sizeof( p ) - 1 );
for ( pp = p; *pp; pp++ ) if ( *pp != ' ' ) printf( "%c", *pp );

return 0;
}
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#9
C++:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void main()
{
int **	mat;
int		i, j, m, n, k, f = 1;

printf( "Vvedite m: " );
scanf( "%d", &m );
printf( "Vvedite n: " );
scanf( "%d", &n );
printf( "Vvedite stolbec dla sortirovki: " );
scanf( "%d", &k );

mat = (int **)malloc( n * sizeof( int ) );
for ( i = 0; i < n; i++ ) {
mat[i] = (int *)malloc( m * sizeof( int ) );
}

for ( i = 0; i < n; i++ ) {
for ( j = 0; j < m; j++ ) {
mat[i][j] = rand() % 100;
printf( " %2d", mat[i][j] );
}
printf( "\n" );
}

// sortirovka
while ( f ) {
f = 0;
for ( i = 0; i < n - 1; i++ ) {
if ( mat[i][k] > mat[i+1][k] ) {
for ( j = 0; j < m; j++ ) {
mat[i][j] ^= mat[i+1][j] ^= mat[i][j] ^= mat[i+1][j];
}
f = 1;
}
}
}

printf( "\n" );

for ( i = 0; i < n; i++ ) {
for ( j = 0; j < m; j++ ) {
printf( " %2d", mat[i][j] );
}
printf( "\n" );
}
}
Если я все правильно понял.
 
A

Again

Гость
#10
to lazybiz:
C++:
#include <stdio.h>
#include <mem.h>

char	hex_table[] = "0123456789abcdef";

void to_hex( char *p, int v, int n )
{
p[n - 1] = hex_table[v & 15];
v >>= 4;
if ( v ) to_hex( p, v, --n );
}

int main()
{
int		v;
char	p[9];
char *	pp;

scanf( "%d", &v );
memset( p, ' ', sizeof( p ) - 1 );
p[sizeof( p ) - 1] = '\0';

to_hex( p, v, sizeof( p ) - 1 );
for ( pp = p; *pp; pp++ ) if ( *pp != ' ' ) printf( "%c", *pp );

return 0;
}
Спс за прогу, вот ток ф-ция должна быть рекурсивной...