Форум программистов, компьютерный форум CyberForum.ru

Написать подпрограмму в программе на СИ.. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка одномерных массивов. http://www.cyberforum.ru/cpp-beginners/thread234630.html
В заданном массиве целых чисел найти самую маленькую серию подряд стоящих нечетных элементов. Удалить из массива два первых простых числа. Проверить, изменилась ли серия подряд стоящих нечетных элементов.
C++ В программе предусмотреть диалог, откуда будут вводится элементы исходной матрицы – с клавиатуры или из текстового файла. Результаты выводить на экр Задана матрица целых чисел A(n,n). Найти два наибольших простых числа. Первое простое число заменить минимальным элементом матрицы, второе – максимальным элементом матрицы. http://www.cyberforum.ru/cpp-beginners/thread234628.html
Как передать указатель на функцию в функцию C++
И как с ней работать?
Преобразование типов C++
Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме записи(тригонометрической и алгебраической). Для класа А не определен оператор умножения, но он определен для класса Т. Для класса Т определен конструктор, принимающий аргументом объект класса А и наоборот. Срабатывает следующее A a1; A a2; a1=a1*a2; Так как есть прописаный оператор для класа Т и возможно...
C++ Простенький winlock http://www.cyberforum.ru/cpp-beginners/thread234590.html
LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam) { if (HC_ACTION==nCode) switch(wParam) { case VK_SPACE: return 1;break; // работает case VK_LWIN: return 1;break; // от чего то неработает }
C++ Наследование Привет! Есть следующая ситуация: class Counter { protected: unsigned int count; public: Counter(): count(0) {} Counter (int c): count(c) подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
27.01.2011, 12:12     Написать подпрограмму в программе на СИ..
Вот на сишке, проверяй:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
 
#define DELIMS " \t\n\"\'.,:;?!()`"
#define ALLOC_STEP 5
 
/* Искомая подпрограмма */
size_t wordsDiff(const char* str1, const char* str2);
/* Функция печатает сообщение и завершает программу с кодом 1 */
void errExit(const char* fmt, ...);
 
int main()
{
    char buf[BUFSIZ];
    char* word;
    size_t currSize, size;
    size_t wordLength;
    char** words = NULL;
    char* currW1 = NULL;
    char* currW2 = NULL;
    size_t minDiff;
    size_t newDiff;
    
    size_t i;
    
    puts("Input a sentence followed by the newline character:");
    fgets(buf, BUFSIZ, stdin);
    printf("Input length: ");
    scanf("%u", &wordLength);
 
    currSize = 0;
    size = 0;
 
    /* Разбиваем входную строку на слова длиной wordLength */
    for(word = strtok(buf, DELIMS); word; word = strtok(NULL, DELIMS))
    {
    if(strlen(word) == wordLength)
    {
        if(currSize == size)
        {
        size += ALLOC_STEP;
        if((words = (char**) realloc(words, size * sizeof(char*))) == NULL)
            errExit("Can't (re)allocate memory for array of words of size %u\n", size);
        }
        
        if((words[currSize] = strdup(word)) == NULL)
        errExit("Can't put a duplicate of word `%s' in the array\n", word);
        
        ++currSize;     
    }
    }
 
    size = currSize;
 
    if(currSize == 0)
    printf("No words of length %u was specified\n", wordLength);
    else if(currSize == 1)
    printf("Only one word of length %u was specified: `%s'\n", wordLength, words[0]);
    else
    {
    minDiff = wordLength + 1;
 
    while(currSize)
    {
        word = words[currSize - 1];
        for(i = 0; i < currSize - 1; ++i)
        {
        newDiff = wordsDiff(word, words[i]);
 
        /* Если текущее расстояние равно нулю, то мы нашли искомую пару,
         * дальше просматривать массив нет смысла
         */
        if(newDiff == 0)
        {
            currW1 = word;
            currW2 = words[i];
            minDiff = newDiff;
            currSize = 1;
            break;
        }
        if(newDiff < minDiff)
        {
            currW1 = word;
            currW2 = words[i];
            minDiff = newDiff;
        }
 
        }
 
        --currSize;
    }
 
    printf("The closest pair of word are `%s' and `%s' with lenght of %u\n",
           currW1, currW2, minDiff);
    }
        
    for(i = 0; i < size; ++i)
    free(words[i]);
    free(words);
    
    exit(0);
}
 
void errExit(const char* fmt, ...)
{
    va_list ap;
    va_start (ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
    exit(1);
}
 
size_t wordsDiff(const char* str1, const char* str2)
{
    size_t diff = 0;
    while(*str1 && *str2)
    if(*str1++ != *str2++)
        ++diff;
    return diff;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru