Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 3
1

Не знаю как сделать функции для курсовой

25.12.2020, 05:18. Показов 3350. Ответов 5

Author24 — интернет-сервис помощи студентам
Используя qsort делать сортировку, другими методами нельзя.

Программе на вход подается текст (текст представляет собой предложения, разделенные точкой. Предложения - набор слов, разделенные пробелом или запятой, слова - набор латинских букв и цифр. Длина текста и каждого предложения заранее не известна.

Программа должна сохранить этот текст в динамический массив строк и оперировать далее только с ним.
Программа должна найти и удалить все повторно встречающиеся предложения (сравнивать их следует посимвольно, но без учета регистра).

Далее, программа должна запрашивать у пользователя одно из следующих доступных действий (программа должна печатать для этого подсказку. Также следует предусмотреть возможность выхода из программы):

1-Распечатать каждое слово и количество его повторений в тексте.

2-Преобразовать каждое предложение так, что символы в каждом слове шли в обратном порядке.

3-Удалить предложения в котором встречается запятая.

4-Отсортировать предложения по уменьшению значения кода 5 символа предложения. Если 5 символ является разделителем между словами, то брать следующий символ. Если символов в предложении меньше 5, то для этого предложения значение равняется -1.

Все сортировки должны осуществляться с использованием функции стандартной библиотеки. Использование собственных функций, при наличии аналога среди функций стандартной библиотеки, запрещается.
Все подзадачи, ввод/вывод должны быть реализованы в виде отдельной функции.

Я написал код для преобразования и удаления дубликатов, осталось сделать все функции. Свитч использовать умею. Но нужна помощь именно в написании функций. Помогите, пожалуйста, перваку

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
#include <wchar.h>
 
int no_repeat(char**main, char ** main_correct, int size); //удаление повторов в тексте
 
int main(){
//переменные
    int iter = -1;int count = 0, k, j, size, size_arr;
    char * begin;char ** result_text;char**main_correct;
    int i =0, choice;char c;
    begin = malloc(100);
    size = 100;
//считывание
    while( (c = getchar())!='\n')
    {
        begin[i]=c;
        i++;
        if (i == size - 1){
            size = size * 2;
            begin = realloc(begin, size);
        }
    }
//выделение памяти для массива
    result_text = malloc(100 *sizeof (char*));
    size_arr = 100;
//преобразование в динамический массив строк
    for (i = 0; i < strlen(begin); i++){
        iter++;
        if (begin[i] == '.' || begin[i] == '!' || begin[i] == '?'){
            result_text[count] = malloc(iter* sizeof(char)+10);
            for (k = 0, j = i - iter; j <= i; j++, k++) {
                result_text[count][k] = begin[j];
            }
            result_text = realloc(result_text, 100*i);
            result_text[count][k]='\0';
            count++;
            if (count == size_arr - 1){
                size_arr = size_arr*2;
                result_text = realloc(result_text, size_arr);
            }
 
            iter = -1;
            i++;
        }
    }
 
    main_correct = malloc(count);
    count = delete_repeat(result_text, main_correct, count);
    result_text = main_correct;
 
    //for(i = 0; i < count; i ++){    //проверка правильности преобразования
    //    printf("%s\n",result_text[i]);
    //}
 
     printf("1 - Распечатать каждое слово и количество его повторений в тексте.\n"
           "2 - Преобразовать каждое предложение так, что символы в каждом слове шли в обратном порядке.\n"
           "3 - Удалить предложения в которых встречается запятая.\n"
           "4 - Отсортировать предложения по уменьшению значения кода 5 символа предложения.\n"
           "5 - Выход из программы.\n");
 
    scanf("%d", &choice);
 
    switch (choice) {
        case 1:
            
            break;
        case 2:
            
            break;
        case 3:
            
            break;
        case 4:
            
            
            break;
        case 5:
            printf("Программа остановлена");
            return 0;
 
    }
    return 0;
}
 
int delete_repeat(char ** main, char**main_correct, int count) {
    int r1, r2, r3 = 0;
    char*el_1;
    char*el_2;
    for (int i = 0; i < count; i++){
        r1 = 0;
        el_1 = main[i];
        for (r2 = 0; r2 < count-1; r2++) {
            if (r2 == i)
                r2++;
            if (strlen(main[i]) == strlen(main[r2])) {
                el_2 = main[r2];
                for (int j  = 0; j < strlen(main[i]); j++){
                     el_1[j] = (char)(tolower(el_1[j]));
                     el_2[j] = (char)(tolower(el_2[j]));
                }
                if (strcmp(el_1, el_2) == 0) {
                    r1++;
                }
            }
        }
        if (i != count)
        {
            if (r1 == 0)
            {
                main_correct[r3] = main[i];
                r3++;
            }
        }
 
    }
    return r3;
}
Добавлено через 6 минут
Строка 58 лишняя, забыл убрать

Добавлено через 2 минуты
всё, теперь код работает, но нет функций
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2020, 05:18
Ответы с готовыми решениями:

не знаю как сделать функцию для стека
RETRIEVE(p,S). Эта функция возвращает элемент, который стоит в позиции р в стеке S. Результат не...

не знаю как сделать формулу для екселя
не могу набрать форулу

Не знаю как сделать палитру цветов для фигур
Моей задачей является:Реализовать редактирование цветов выбранной фигуры в программе. Для выбора...

Сделать красивый интерфейс для дипломки и не знаю как
Здравствуйте! Вот хочу сделать красивый интерфейс для дипломки и не знаю как!:( Делал на winforms...

5
447 / 323 / 129
Регистрация: 18.07.2017
Сообщений: 1,455
25.12.2020, 16:53 2
Цитата Сообщение от evilexe_student Посмотреть сообщение
Помогите, пожалуйста, перваку
Как? Дать пинка до википедии? https://ru.wikipedia.org/wiki/... 0%A1%D0%B8
Цитата Сообщение от evilexe_student Посмотреть сообщение
Но нужна помощь именно в написании функций.
Как же ты delete_repeat() написал, если не умеешь функции писать?
0
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 3
25.12.2020, 19:29  [ТС] 3
Я сделал все функции кроме 1-Распечатать каждое слово и количество его повторений в тексте.
Помоги пж, я вообще не могу понять как её реализовать ...
0
447 / 323 / 129
Регистрация: 18.07.2017
Сообщений: 1,455
25.12.2020, 20:21 4
Цитата Сообщение от evilexe_student Посмотреть сообщение
Распечатать каждое слово и количество его повторений в тексте.
C++
1
2
3
4
void output(char** words, size_t* repeats, size_t word_count){
    for(int i = 0; i < word_count; i++)
        printf("%s -> %d\n", words[i], repeats[i]);
}
Цитата Сообщение от evilexe_student Посмотреть сообщение
я вообще не могу понять как её реализовать
Как? Посчитать перебором: проверяешь все введенные слова. если такое уже есть, проверяемое выкидываешь и прибавляешь счетчик у найденного ранее.
Можно было бы строковое дерево запилить типа string_tree https://github.com/Assemberist... -0.1.0/src. Но для новичка это сложновато, а мне лень полчаса расписывать как его сделать и использовать.

Добавлено через 1 минуту
Библиотека string.h в помощь чтобы велосипеды не строить
0
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 3
26.12.2020, 01:47  [ТС] 5
Это просто какой-то вывод... Который вообще не считает повторы
0
447 / 323 / 129
Регистрация: 18.07.2017
Сообщений: 1,455
26.12.2020, 09:19 6
Цитата Сообщение от evilexe_student Посмотреть сообщение
вообще не считает повторы
Так поищи по форуму. За тебя сто раз написано.
Подсчет слов в строке
Подсчет количества одинаковых слов во введенной строке
0
26.12.2020, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2020, 09:19
Помогаю со студенческими работами здесь

Не знаю, как сделать макрос для построения диаграммы
Нашла код для построения диаграммы, но не могу разобраться в нем. Помогите, пожалуйста подогнать...

Задание для начинающих программистов.Не знаю как это сделать
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; void main(void) { clrscr(); // очистить...

Хочу сделать процедуры для базы данных, но не знаю как сравнивать
Помогите составить процедуры к базе дынных 1) у какой организации меньше всего финансовая...

Нужно написать проверочный код на ассемблере для Insert, не знаю как сделать
Без понятия, как написать проверочную прогу на ассемблере для процедуры Insert (вставка подстроки в...

Как сделать задание я вообще не знаю как его сделать, если сделаете, скиньте архивом пожалуйста)
Как сделать задание я вообще не знаю как его сделать, если сделаете, скиньте архивом пожалуйста)))...

для курсовой нужно сделать
Нуэжно:  Разработанное приложение, решающее поставленную задачу в зависимости от темы и варианта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru