Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 19.10.2013
Сообщений: 159
1

Сортировка чисел из файла в порядке возрастания (перевод с Паскаля)

24.01.2016, 22:59. Показов 614. Ответов 4
Метки нет (Все метки)

Хотелось бы, чтобы вы преобразовали код отсюда: https://www.cyberforum.ru/post1994072.html из Паскаля в Си
Условие: сортировка чисел из файла в порядке возрастания
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2016, 22:59
Ответы с готовыми решениями:

Сортировка 3 чисел в порядке возрастания
Добрый день, я начинающий с++ программист. Есть у меня задание, необходимо отсортировать введенные...

Сортировка чисел в порядке возрастания в массиве
помогите написать программу на C++. Которая сортирует числа в порядке возрастания в массиве.

Сортировка чисел массива в порядке возрастания
Доброго времени суток всем. Я новичок , написал код для сортировки чисел массива в порядке...

Сортировка чисел в строке в порядке возрастания
Вот код: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int p...

4
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
25.01.2016, 06:42 2
Цитата Сообщение от Dionisius Посмотреть сообщение
Хотелось бы, чтобы вы
прикольно
0
2 / 2 / 0
Регистрация: 19.10.2013
Сообщений: 159
26.01.2016, 17:29  [ТС] 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void sort(char str)
{
    int i;
    int m;
    int A[m];
    int n;
    int p;
    for (i=1; i=n-1; i++)
    {
        for (m=i+1; m<n; m++)
        {
            if(A[i]>A[m])
            {
                p=A[i];
                A[i]=A[m];
                A[m]=p;
            }
        }
    }
}
 
 
int main()
{
    char str[80];
    char str1[80];
    FILE *fp1;
    fp1=fopen("r", "test1.txt");
    FILE *fp2;
    fp2=fopen("r", "test2.txt");
    printf("Vvedite stroku chisel: \n");
    scanf("%s", str);
    int k,n;
    int i,j;
    while (!EOF)
    {
        fprintf(fp1, "%s", str);
        i=1;
        while (i<=strlen(str))
        {
            if (((str[i]=='0')||(str[i]=='1')||(str[i]=='2')||(str[i]=='3')||(str[i]=='4')||(str[i]=='5')||(str[i]=='6')||(str[i]=='7')||(str[i]=='8')||(str[i]=='9'))&&((i=1)||!(str[i-1]!='0')||!(str[i-1]!='1')||!(str[i-1]!='2')||!(str[i-1]!='3')||!(str[i-1]!='4')||!(str[i-1]!='5')||!(str[i-1]!='6')||!(str[i-1]!='7')||!(str[i-1]!='8')||!(str[i-1]!='9')))
            {
                n=n+1;
                str[i]=' ';
                j=i;
            while(j<=strlen(str)&&((str[i]=='0')||(str[i]=='1')||(str[i]=='2')||(str[i]=='3')||(str[i]=='4')||(str[i]=='5')||(str[i]=='6')||(str[i]=='7')||(str[i]=='8')||(str[i]=='9')))
            {
                str=str+str[j];
                j=j+1;
            }
            
            i=i+strlen(str);
            }
            else
            i=i+1;
        }
        printf("Konechnaya posledovatelnost: \n");
    /*for (i=1; i<k; i++)
    {
        printf("%d", A[i]);
    }*/
    fclose(fp1);
    fclose(fp2);
    return 0;
    }
    
    
    
    
    
    
}
Можете, пожалуйста, исправить ошибки в данном коде?
0
735 / 540 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
27.01.2016, 05:36 4
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void sort(char str)//для чего здесь эта функция если ты ее впоследствии не используешь,
{                       //а что-то изобретаешь в строках 43-60?
    int i;
    int m;
    int A[m];
    int n;
    int p;
    for (i=1; i=n-1; i++)
    {
        for (m=i+1; m<n; m++)
        {
            if(A[i]>A[m])
            {
                p=A[i];
                A[i]=A[m];
                A[m]=p;
            }
        }
    }
}
 
 
int main()
{
    char str[80];
    char str1[80];
    FILE *fp1;
    fp1=fopen("r", "test1.txt");
    FILE *fp2;                                          //для чего тебе второй файл?
    fp2=fopen("r", "test2.txt");
    printf("Vvedite stroku chisel: \n");           //для чего здесь набивать массив если его можно ввести сразу в файл?
    scanf("%s", str);                                 //тем более зачем вместо массива делать строку?
    int k,n;
    int i,j;
    while (!EOF)
    {
        fprintf(fp1, "%s", str);
        i=1;
        while (i<=strlen(str))
        {
            if (((str[i]=='0')||(str[i]=='1')||(str[i]=='2')||(str[i]=='3')||(str[i]=='4')||(str[i]=='5')||(str[i]=='6')||(str[i]=='7')||(str[i]=='8')||(str[i]=='9'))&&((i=1)||!(str[i-1]!='0')||!(str[i-1]!='1')||!(str[i-1]!='2')||!(str[i-1]!='3')||!(str[i-1]!='4')||!(str[i-1]!='5')||!(str[i-1]!='6')||!(str[i-1]!='7')||!(str[i-1]!='8')||!(str[i-1]!='9')))
            {
                n=n+1;
                str[i]=' ';
                j=i;
            while(j<=strlen(str)&&((str[i]=='0')||(str[i]=='1')||(str[i]=='2')||(str[i]=='3')||(str[i]=='4')||(str[i]=='5')||(str[i]=='6')||(str[i]=='7')||(str[i]=='8')||(str[i]=='9')))
            {
                str=str+str[j];
                j=j+1;
            }
            
            i=i+strlen(str);
            }
            else
            i=i+1;
        }
        printf("Konechnaya posledovatelnost: \n");
    /*for (i=1; i<k; i++)
    {
        printf("%d", A[i]);
    }*/
    fclose(fp1);
    fclose(fp2);
    return 0;
    }
    
    
    
    
    
    
}
Добавлено через 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
#include <stdio.h>
#include <stdlib.h>
const int N = 10;
int main()
{
    int i = 0, j, c,  A[N];
    FILE *fp;
    fp = fopen("test1.txt", "r");
    printf("\nIshodniy massiv:\n");
    for(i = 0; i < N; ++i){
        fscanf(fp, "%d", &A[i]);
        printf("%d ", A[i]);
    }
    fclose(fp);
    for(i = 0; i < N - 1; ++i){
        for(j = N - 2; j >= i; --j)
            if(A[j] > A[j + 1]){
                c = A[j];
                A[j] = A[j + 1];
                A[j + 1] = c;
            }
    }
    printf("\nOtsortirovanniy massiv:\n");
    for(i = 0; i < N; ++i)
        printf("%d ", A[i]);
    return 0;
}
0
2 / 2 / 0
Регистрация: 19.10.2013
Сообщений: 159
27.01.2016, 12:45  [ТС] 5
Это слишком простой код, но мне хотелось бы, чтобы сортировка происходила в строке, а не в массиве!

Добавлено через 2 часа 35 минут
Ах да, но нашел я на просторах форума следующий код:

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
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
 
const int SIZE =80;
 
void form (char*, char*);
char *probel2 (char *in);
char *probel1 (char *in);
char *copyword (char *, char *, int);
char *sort (char *a, char *b, char *);
 
int main()
{
    char buf[SIZE], outbuf[SIZE]={' '};
 
    while(cout<<"Vvedite stroky: ",
    cin.getline(buf, SIZE))
    {   
        form (buf, outbuf);
 
        printf("Rezultat: %s", outbuf);
        return 0;
    }
}
void form (char *a,char *out)
{   
    char *first=a; 
    *out='\0';
    int s[80]={0};
    char min;
 
    while (*(first=probel1(a)))
    {
        min=*first;
        a=probel2(first);
 
        out=copyword(first, out,a-first);
    }
    cout<<endl; 
}
char *probel1(char *in)
{ 
    while (*in&&(*in==' ')||(*in=='\t'))
        in++;
    return in;
}
char *probel2 (char *in)
{
    while (*in&&*in!=' '&&*in!='\t')
        in++;
    return in;
}
char *copyword (char * from, char *to, int len)
{
    char *a=to;
    char *d=to;
    char *b=to;
    for (int j=0; (j<len)&&(*to++=*from++); j++)
        ;
    
    while (a!=to)
    {
        b=d;
        while (b!=to-1)
        {
            if (*b>*(b+1))
            {   
                char buf=*(b+1);
                *(b+1)=*b;
                *b=buf;
            }
            b++;
        }
        a++;
    }
    *to++=' ';
    *to='\0';
    return to;
}
Этот код сортирует в порядке возрастания только одиночные цифры. Можете подогнать под условие, чтобы можно было отсортировать двухзначные, трехзначные и т.д. целые числа?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2016, 12:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Сортировка 3-х значных чисел в порядке возрастания
Надо написать программу на С++. Сортировка 3-х значных чисел в порядке возрастания))

Дана последовательность чисел a1, a2 , ., an. Представить в порядке возрастания. Сортировка обменом
Дана последовательность чисел a1, a2 , ..., an. Требуется представить числа в порядке возрастания....

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

Создание файла из действительных чисел, расположенных в порядке возрастания
// Создать ф-ии, рещающие след. задачи: // 1.Создание файла из действительных чисел, расположенных...

Прочитать из текстового файла N действительных чисел и отсортировать их в порядке возрастания.
Прочитать из текстового файла N действительных чисел и отсортировать их в порядке возрастания.

Сортировка массива в порядке возрастания и вывод элементов в обратном порядке
нашла на форуме пару примеров, но они не полные и не запускаются, выбрала из них более менее...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.