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

Чтение чисел из файла, сортировка и вывод - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Millen
 Аватар для Millen
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 17
04.03.2011, 10:30     Чтение чисел из файла, сортировка и вывод #1
написать 4 функции, сортирующие массив целых чисел 4 способами:
- методом пузырька
- методом вставки
- методом выбора
- быстрая сортировка (можно воспользоваться функцией qsort).

Аргументы командной строки: сначала номер способа, потом числа.

Делал для сортировки из командной строки.

sort
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
#include "stdafx.h"
#include<iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "sort.h"
using namespace std;
 
int main(int argc, char* argv[])
{setlocale(0,"");
if (argc > 1)
{
int* forSorting = new int[argc - 1];
int method = atoi(argv[1]);
for (int i = 1; i < argc - 1; i++)
forSorting[i] = atoi(argv[i+1]);
bool sucsess = true;
switch (method)
{
case 1:
pyzir(forSorting, argc - 1); break;
case 2:
vstavk(forSorting, argc - 1); break;
case 3:
vibor(forSorting, argc - 1); break;
case 4:
qsort(forSorting, argc - 1, sizeof(int), compare); break;
default:
{
printf("%s", "Неверный номер метода сортировки\n");
sucsess = false;
}
}
if(sucsess)
{
printf("%s", "Сортированная строка: ");
for (int i = 1; i < argc - 1; i++)
printf("%d%s",forSorting[i], " ");
}
 
delete [] forSorting;
}
 
return 0;
}
sort.cpp
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
#include "stdafx.h"
#include<iostream>
#include<time.h>
 
#include <math.h>
 
#include <stdlib.h>
 
 
void pyzir(int *mas,const int prob)
{//сортировка пузырьком
    int x;
    for(int i=0;i<prob;i++)
     {            
         for(int j=prob-1;j>i;j--)
           {     
               if(mas[j-1]>mas[j])
                  {
                    x=mas[j-1];
                    mas[j-1]=mas[j];
                    mas[j]=x;
                  }
           }
     }
}
 
void vstavk(int *mas,const int prob)
{//сортировка вставками
int x,j,i;
  for (i=0; i < prob; i++) 
  {  // цикл проходов, i - номер прохода
    x = mas[i];   
        // поиск места элемента в готовой последовательности 
    for ( j=i-1; j>=0 && mas[j] > x; j--)
      mas[j+1] = mas[j];    // сдвигаем элемент направо, пока не дошли
        // место найдено, вставить элемент
    mas[j+1] = x;
  }
}
 
void vibor(int *mas,const int prob)
{//сортировка методом выбора
    for(int i=0;i<prob-1;i++)
{
int imin=i;
for(int j=i+1;j<prob;j++)
if(mas[j]<mas[imin]) imin=j;
int a=mas[i];
mas[i]=mas[imin];
mas[imin]=a;
}
}
 
 
 
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
sort.h
C++
1
2
3
4
void pyzir(int *mas,const int prob);
void vstavk(int *mas,const int prob);
void vibor(int *mas,const int prob);
int compare (const void * a, const void * b);
теперь нужно, чтобы числа он брал из файла, сортировал их и записывал в этот же файл. Аргументы командной строки: сначала номер способа, потом файл, в котором записаны числа.
Подскажите, пожалуйста, а то с файлами у меня беда.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
04.03.2011, 12:08     Чтение чисел из файла, сортировка и вывод #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
int main(int argc, char* argv[])
{
    setlocale(0,"");
 
    // Замечание:
    // argc - количество аргументов вместе с именем файла. Таким образом, если argc == 10,
    // то первый аргумент - путь и имя файла, второй - метод. Значит чисел всего 8 шт.
 
    // Здась нужно проверять argc > 2, иначе можно пропустить все числа (см. замечание)
    if (argc > 1) 
    {
        // Здесь вы выделяете память больше, чем требуется (см. замечание). Логичней
        // было бы int* forSorting = new int[argc - 2];
        int* forSorting = new int[argc - 1];  
        int method = atoi(argv[1]);
 
        // Только потому, что вы выделили памяти больше, чем требуется здась у вас не
        // возникает исключения. В С/С++ массивы индексируются с 0, т.е. нужно было бы так
        // for (int i = 0; i < argc - 2; i++)
        //     forSorting[i] = atoi(argv[i + 2]);
        for (int i = 1; i < argc - 1; i++)
        forSorting[i] = atoi(argv[i+1]);
    ...
IrineK
Заблокирован
04.03.2011, 17:39     Чтение чисел из файла, сортировка и вывод #3
Про файловый ввод/вывод: Файлы и потоки
Millen
 Аватар для Millen
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 17
11.03.2011, 19:58  [ТС]     Чтение чисел из файла, сортировка и вывод #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
77
78
79
80
int main(int argc, char* argv[])
{if (argc > 2)
 {
int method = atoi(argv[1]);
FILE *fp = fopen(argv[2],"rt");
int symbol_count=0;
 char c; 
int i=0,dlin=0,dlina=0; 
while((c=getc(fp))!=EOF) 
{ 
++dlin; 
}
char* chast=new char[dlin];
int* sorting = new int[dlin];
char* sortingChar =new char[dlin];
char* slov =new char[dlin];
char* bal =new char[dlin];
fgets(bal, dlin, fp);
int vhozhden=0,x=0,prob1=0,prob2=0,probel,probel2,chisl=0,a=1;
for(int k=0;k<dlin;k++)
{if(bal[k]==' ')
{vhozhden=k;
break;}
}
strncpy(slov,bal+0,vhozhden);
chisl=atoi(slov);
sorting[0]=chisl;
prob1=vhozhden;
for(int r=0;r<dlin;r++)
{slov[r]=NULL;}
for(int i=vhozhden+1;i<dlin+1;i++)
{if((bal[i]==' ')||(bal[i]==NULL))
{prob2=i;
if(bal[i]==NULL) {prob2=dlin;}
probel=prob1+1;
probel2=prob2-prob1-1;
strncpy(slov,bal+probel,probel2);
chisl=atoi(slov);
sorting[a]=chisl;
a=a+1;
chisl=0;
prob1=prob2;
for(int s=0;s<dlin;s++)
{slov[s]=NULL;}}
}
int b=0;
b=a+1;
switch (method)
{
case 1:
pyzir(sorting,b); break;
case 2:
vstavk(sorting, b); break;
case 3:
vibor(sorting, b); break;
case 4:
qsort(sorting, b, sizeof(int), compare); break;
}
for (int i=0; i<b; i++)
{
chast=(char*)sorting[i];
sortingChar=chast+' ';
for(int s=0;s<dlin;s++)
{chast[s]=NULL;}}
fclose(fp); 
fp = fopen(argv[2],"wt");
fputs(sortingChar,fp);
delete [] sorting;
delete [] bal;
delete [] sortingChar;
delete [] slov;
delete [] chast;
fclose(fp); 
 
}
else 
{ exit(1);
}
return 0;
}
Yandex
Объявления
11.03.2011, 19:58     Чтение чисел из файла, сортировка и вывод
Ответ Создать тему
Опции темы

Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru