С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 07.02.2014
Сообщений: 3
1

Написать программу, упорядочивающую массив строк в порядке возрастания длины их первого слова методом пузырьковой сортировки

07.02.2014, 04:26. Показов 2131. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток,
Прошу помочь с задачей:
Написать программу, упорядочивающую массив строк в порядке возрастания длины их первого слова методом пузырьковой сортировки. Использовать указатели на строки.

Я пытаюсь сделать так:
в цикле ввожу строки, затем в нём же создаю еще один цикл(для обращения к символам), в котором проверяю условие: если данный элемент массива( символ ) не является пробелом, к переменной k прибавляю 1, далее выхожу из меньшего цикла, записываю значение k (длину первого слова введённой только что строки) в другой целочисленный массив.
Вроде бы всё в лоб и просто, но не выходит.
Ошибаюсь где-то здесь вот здесь:
C
1
2
3
4
5
6
7
for(j=0;j<z;j++)
        {
            if(mas[i][j] !=' ')
            {
                k=k+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
int main()
{
    int m,n,i;
    int z,j;
    setlocale(LC_CTYPE,"RUS");
    printf("Введие количество строк\n");
    scanf("%d",&n);
 
    int* a=(int*)malloc(sizeof(int));
    char **mas=(char**)malloc(sizeof(char*)*n);
    printf("\nВведие строки:\n");
    for (i=0;i<n;i++)
    {
        mas[i]=(char*)malloc(sizeof(char));
        gets(mas[i]);
        z=strlen(mas[i]);
        int k=0;
        for(j=0;j<z;j++)
        {
            if(mas[i][j] !=' ')
            {
                k=k+1;
            }
        }
      a[i]=k;
    }
 for (int l=0;l<n;l++)
  printf (" %d ", a[l]);
return 0;
}


Добавлено через 49 минут
Заменил внутренний цикл на:
C
1
2
3
4
5
6
for(j=0;j<z;j++)
        {
            if(mas[i][j] ==' ')
               break;
        k=k+1;
        }
Очистил буфер входного потока везде, осталось только доделать...
Но break юзать как-то нехорошо, нам говорили. И почему не получалось первым способом?

Добавлено через 11 минут
Вот итог:
Кликните здесь для просмотра всего текста
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
 
void bubble(int *items,char** mas, int n);
 
int main()
{
    int m,n,i;
    int z,j;
    setlocale(LC_CTYPE,"RUS");
    printf("Введие количество строк\n");
    scanf("%d",&n);
 
    int* a=(int*)malloc(sizeof(int));
    char **mas=(char**)malloc(sizeof(char*)*n);
    printf("\nВведие строки:\n");
    fflush(stdin);
    for (i=0;i<n;i++)
    {
        mas[i]=(char*)malloc(sizeof(char));
        gets(mas[i]);
        z=strlen(mas[i]);
        int k=0;
        for(j=0;j<z;j++)
        {
            if(mas[i][j] ==' ')
               break;
        k=k+1;
        }
      a[i]=k;
    }
bubble(a,mas,n);
return 0;
}
 
 
 
void bubble(int *items,char** mas, int n)
{
int a, b, t;
char* to;
  int i;
 
  for(a=1; a < n; ++a)
    for(b=n-1; b >= a; --b) {
      if(items[b-1] > items[b]) {
        t = items[b-1];
        items[b-1] = items[b];
        items[b] = t;
        to = *(mas+b-1);
        *(mas+b-1)=*(mas+b);
        *(mas+b)=to;
      }
    }
    printf("\nВвёденные строки отсортированы по длине первого слова в порядке возрастания:\n");
    for(i=0;i<n;i++)
        printf("\n%s\n",*(mas+i));
}

Но программа нестабильная...Не знаю, почему. Пытался юзать fgets( .. ) также вылетает.

Таким образом, осталось два вопроса:
1)Почему изначально не получилось( использовать знак неравенства)
2)Почему иногда вылетает?(много циклов?)

Добавлено через 1 час 55 минут
UPD
вопрос 2 отпал, память я "криво" выделял...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2014, 04:26
Ответы с готовыми решениями:

Напишите функцию, упорядочивающую элементы массива по сумме первого и второго поля, которая записывается в третье поле, в порядке возрастания
Парни проверьте. Все правильно работает, но выдает небольшие касяки, какие думаю вы сами увидите...

Расставить элементы массива в порядке возрастания методом сортировки выбором и сортировки простыми вставками
Здрасьте еще раз!С прошедшим вас праздником! я глупая и бестолковая опять пришла к вам на...

Отсортировть массив методом пузырьковой сортировки
//Создать одномерный массив целых чисел, размером 10 ячеек. //Заполнить массив случайными числами....

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

2
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
07.02.2014, 05:29 2
Vladubor, У вас же программа со строками работает, но в цикле вы захватываете память под один символ.

C
1
mas[i]=(char*)malloc(sizeof(char));
gets работает нестабильно, потому что он никак не может проконтролировать максимальное количество символов в строке. используйте вместо него fgets(char *bufr, int count, FILE *stream)

третим параметром подавайте stdin

Добавлено через 29 минут
C
1
2
3
4
5
6
7
for(j=0;j<z;j++)
{
            if(mas[i][j] !=' ')
            {
                k=k+1;
            }
}
Так неполучится. Вам нужно дойти до конца первого слова(=> узнать длину слова) и прервать цикл. А здесь вы только подсчитаете количество символов, отличных от пробелов.
0
0 / 0 / 1
Регистрация: 07.02.2014
Сообщений: 3
07.02.2014, 08:41  [ТС] 3
Нет, все работает)
Вот так:
Кликните здесь для просмотра всего текста
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
void bubble(int *items,char** mas, int n);
int main()
{
    int nn = 125;
    int n,i,z,j;
    setlocale(LC_CTYPE,"RUS");
    printf( "Введие количество строк\n" );
    scanf("%d",&n);
    int* a=(int*)malloc(sizeof(int)*n);
    char **mas=(char**)malloc(sizeof(char*)*n);
    printf( "\nВведите строки:\n" );
    fflush(stdin);
    for (i=0;i<n; i++)
    {
        mas[i]=(char*)malloc(sizeof(char)*nn);
        gets( *(mas+i) );
        z=strlen( *(mas+i) );
        int k=0;
        for(j=0;j<z;j++)
        {
            if(mas[i][j] ==' ')
               break;
            k=k+1;
        }
      a[i]=k;
    }
bubble(a,mas,n);
return 0;
}
void bubble(int *items,char** mas, int n)
{
int a, b, t;
char* to;
  int i;
  for(a=1; a < n; a++)
    for(b=n-1; b >= a; b--) {
      if(items[b-1] > items[b]) {
        t = items[b-1];
        items[b-1] = items[b];
        items[b] = t;
        to = *(mas+b-1);
        *(mas+b-1)=*(mas+b);
        *(mas+b)=to;
      }
    }
    printf( "\nВвёденные строки отсортированы по длине первого слова:\n" );
    for(i = 0 ; i < n; i++ )
        printf("\n%s\n", *(mas+i) );
}

С выделением памяти разобрался, нужно было кол-во символов строки максимальное, я его указал, и программа начала работать стабильно, да и gets() сойдет для того, чтобы сдать отчёт уже =)
Спасибо, что откликнулись!
0
07.02.2014, 08:41
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2014, 08:41
Помогаю со студенческими работами здесь

Распечатать слова, из которых состоит предложение, в порядке возрастания длины слова
помогите реализовать это на перле) из темы &quot;разработка cgi-програм на perl&quot; собственно:...

Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки
В плюсах полный ноль...помогите пожалуйста создать одномерный массив через new и delete его...

Упорядочить слова в порядке возрастания их длины
Заданное предложение, слова в нем разделены пробелом. Упорядочить слова в порядке возрастания их...

Упорядочить слова в порядке возрастания их длины
Дано предложение, слова в нем разделены пробелом. Упорядочить слова в порядке возрастания их...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru