Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 23:44   #1
Ховард
Новичок
Джуниор
 
Регистрация: 13.06.2011
Сообщений: 2
По умолчанию задачи в Си на "Строки" и "Структуры"

1)Дана символьная строка. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Найти самое длинное слово.
(Работа выполняется с использованием указателей на символ (строку) и
функциями работы со строками)
2)7. Сформировать массив структур. Структура должна содержит данные о спортсменах - фамилия, рост, вес, результат, тренер.
Определить:
• Найти лучший результат спортсмена заданного тренера;
• Найти самого высокого спортсмена;
• есть ли спортсмены с одинаковым ростом и весом

Последний раз редактировалось Ховард; 13.06.2011 в 23:50.
Ховард вне форума Ответить с цитированием
Старый 14.06.2011, 07:17   #2
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от Ховард Посмотреть сообщение
1)Дана символьная строка. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Найти самое длинное слово.
Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

typedef struct
{
    char const * begin;
    char const * end;
}
    range;

range range_(char const * begin, char const * end)
{
    range r = {begin, end};
    return r;
}

int len(range r)
{
    return r.end - r.begin;
}

range find_longest_rec(range str, range word, range longest)
{
    if (str.begin == str.end)
    {
        if (len(word) > len(longest))
            return word;
        else
            return longest;
    }
    else if (!isspace(*str.begin))
    {
        return find_longest_rec( range_(str.begin + 1, str.end)
                               , range_(word.begin, word.end + 1)
                               , longest);
    }
    else
    {
        if (len(word) > len(longest))
            return find_longest_rec( range_(str.begin + 1, str.end)
                                   , range_(str.begin + 1, str.begin + 1)
                                   , word);
        else
            return find_longest_rec( range_(str.begin + 1, str.end)
                                   , range_(str.begin + 1, str.begin + 1)
                                   , longest);
    }
}

range find_longest(range str)
{
    return find_longest_rec( str
                           , range_(str.begin, str.begin)
                           , range_(str.begin, str.begin));
}

void print_word(range word)
{
    if (word.begin != word.end)
    {
        putchar(*word.begin);
        print_word(range_(word.begin + 1, word.end));
    }
}

int main()
{
    char const * str = "More than a single state flag bit can be combined into "
                       "a single bitmask by using the bitwise OR operator (|).";
    print_word(find_longest(range_(str, str + strlen(str))));
    putchar('\n');
}

Последний раз редактировалось como; 14.06.2011 в 07:29.
como вне форума Ответить с цитированием
Старый 14.06.2011, 11:10   #3
Ховард
Новичок
Джуниор
 
Регистрация: 13.06.2011
Сообщений: 2
По умолчанию

по идее выглядеть должно примерно вот так)
Изображения
Тип файла: jpg z_e5887cf4.jpg (220.8 Кб, 126 просмотров)
Ховард вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Паскаль. 2 задачи (Программа "Верификация","КАК БРИГАДИРУ РАЗДЕЛИТЬ ЗАРОБОТАННЫЕ ДЕНЬГИ") Valik102 Помощь студентам 3 20.05.2009 20:42