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

Сортировка строк файла метод пузырька

27.05.2013, 00:25. Показов 3834. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код, который сортирует числа из файла numbers.txt методом пузырька :

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
int main(void)
{
int j,i,n,q;
int *x=NULL;
FILE *f=NULL;
f=fopen("C:\\...\\numbers.txt","r");
if(!f)
{
    printf("Cannot open\n"); 
    return -2;
}
if(fscanf(f,"%d",&n)!=1) 
{
    printf("Cannot read\n");
    return -1;
}
printf("n=%d\n\n",n);
x=(int *)malloc(n*sizeof(int));
for(i=1;i<=n;i++)
{   if(fscanf(f,"%d",&x[i])!=1) 
{
    printf("Kol-vo elementov ne ravno n!\n");
    return 1;
}
}
for(i=1;i<=n;i++)
printf("x[%d]=%d\n",i,x[i]);
      printf("\n");
for(i=1;i<=n;i++)
for(j=1;j<=n-1;j++)
if(x[j]>x[j+1]) 
{
    q=x[j];
    x[j]=x[j+1];
    x[j+1]=q;
}
for(i=1;i<=n;i++)
{
    printf("x[%d]=%d\n",i,x[i]);
}
getch();
return 0;
}
Помогите его переделать, чтобы можно было сортировать строки из файла strings.txt.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2013, 00:25
Ответы с готовыми решениями:

Сортировка массива по возрастанию метод пузырька
подскажите так или не то совсем #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std;...

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

Сортировка массива строк в алфавитном порядке любым методом, кроме метода прямого обмена («пузырька»)
Написать программу по выводу 4-6 строк и сортировать их в алфавитном порядке любым методом , кроме...

Сортировка содержимого текстового файла методами пузырька, слияния, Шелла
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; main() { int N,i; FILE *out; ...

3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.05.2013, 03:04 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define INPUT_FILE_NAME "strings.txt"
#define MAX_ROW_SIZE (1024)
#define INIT_ROWS_NUMBER (32)
 
int main(void) {
    FILE * fin;
    char ** rows, current[MAX_ROW_SIZE];
    int i, j, count, reserved;
    
    if ( ! ( fin = fopen(INPUT_FILE_NAME, "r") ) ) {
        perror("fopen");
        exit(1);
    }
    
    if ( ! ( rows = malloc(sizeof(char*) * INIT_ROWS_NUMBER) ) ) {
        perror("malloc");
        if ( fclose(fin) )
            perror("fclose");
        exit(1);
    }
    reserved = INIT_ROWS_NUMBER;
    
    count = 0;
    
    while ( fgets(current, MAX_ROW_SIZE, fin) ) {
        if ( count == reserved ) {
            if ( ! ( rows = realloc(rows, sizeof(char*) * (reserved + INIT_ROWS_NUMBER)) ) ) {
                perror("realloc");
                if ( fclose(fin) )
                    perror("fclose");
                exit(1);
            }
            reserved += INIT_ROWS_NUMBER;
        }
        if ( ! ( rows[count] = malloc(strlen(current) + 1) ) ) {
            perror("malloc");
            if ( fclose(fin) )
                perror("fclose");
            exit(1);
        }
        strcpy(rows[count++], current);
    }
    
    if ( ferror(fin) || fclose(fin) ) {
        perror("IOError");
        exit(1);
    }
    
    printf("Unsorted:\n");
    for ( i = 0; i < count; ++i )
        printf("%s", rows[i]);
    
    for ( i = 0; i < count - 1; ++i ) {
        for ( j = i + 1; j < count; ++j ) {
            if ( strcmp(rows[j], rows[i]) < 0 ) {
                char * tmp = rows[i];
                rows[i] = rows[j];
                rows[j] = tmp;
            }
        }
    }
    
    system("pause");
    
    printf("\n\nSorted:\n");
    for ( i = 0; i < count; ++i )
        printf("%s", rows[i]);
    
    system("pause");
    
    for ( i = 0; i < count; ++i )
        free(rows[i]);
    free(rows);
    
    exit(0);
}
0
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 17
27.05.2013, 12:25  [ТС] 3
Вылезают три ошибки такого типа - error C2440: =: невозможно преобразовать 'void *' в 'char **' . Как от этого избавиться?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.05.2013, 14:40 4
Цитата Сообщение от Аврора Посмотреть сообщение
невозможно преобразовать 'void *' в 'char **' . Как от этого избавиться?
Перестать компилировать код С как С++. В мелкостудии где-то в настройках проекта есть пимпа такая. Ну или по-тупому писать (char**) перед malloc/realloc там, где память под указатели выделяется, и (char*) перед выделением памяти под строки.
А true way - сохранить файл с расширением ".c", открыть студийную консоль, в ней
Код
cd \туда\где\файлы\лежат
cl prog.c
prog
И в любом случае помните, что файл strings.txt должен лежать в той же папке и какие-нибудь строки из латинских букв содержать...
0
27.05.2013, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2013, 14:40
Помогаю со студенческими работами здесь

Сортировка. Метод пузырька. C++
помогите,пожалуйста,найти ошибку. #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace...

Сортировка (метод пузырька)
Дана действительная матрица А размерности(nxn). Если максимальный элемент матрицы не превосходит...

Метод пузырька (Сортировка массива)
Прошу помочь с алгоритмом и блок схемой... Сортировка массивов методом пузырька...

Сортировка слов (метод Пузырька)
Есть программа, сортирующая слова в алфавитном порядке методом пузырька (BubbleSort). Считка и...


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

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