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

Тема в разделе "C/C++/C#", создана пользователем Again, 19 дек 2010.

  1. Again

    Again Гость

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

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

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

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

    ierofant Гость

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

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    ierofant
    Я думаю он имеет в виду что надо составить свою функции (с рекурсией) вывода числа в шестнадцатеричной системе.

    Again
    Правильно!?
     
  4. ierofant

    ierofant Гость

    Или если через printf :
    Код (C++):
    printf ("%x\n", x);
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
  6. Again

    Again Гость

    Да, ты правильно понял.
     
  7. Again

    Again Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (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;
    }
     
  9. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (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" );
    }
    }
    Если я все правильно понял.
     
  10. Again

    Again Гость

    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;
    }
    Спс за прогу, вот ток ф-ция должна быть рекурсивной...
     
  11. ierofant

    ierofant Гость

    Одно другому не мешает :facepalm:
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ладно) Поставим вопрос боком) Что такое рекурсия?
     
  13. Again

    Again Гость

    Рекурсивная ф-ция - это ф-ция, которая вызывает сама себя.
    Например: рекурсивная версия ф-ции sum (n)

    Код (C++):
    int sum ( int n )
    {
    if (n == 0)
    return 0;
    else
    return n+sum(n-1);
    }
     
Загрузка...

Поделиться этой страницей