0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
1

сортировка слиянием

24.11.2010, 23:15. Показов 1836. Ответов 5
Метки нет (Все метки)

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

#include<iostream>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
FILE*out1,*out2,*out3;
void main()
{out1=fopen("text1.txt","r");
out2=fopen("text2.txt","r");
out3=fopen("text3.txt","w");
int i,j,m,kolstrA,kolstrB;
char in[80];
char an[80];
char*pa[100];
char*pb[100];
char*pc[100];
char a[100][80];
char b[100][80];
char c[200][80];

for (kolstrA=0;kolstrA<100;kolstrA++)
{if(fgets(in,81,out1)==NULL)
{break;};
in[80]='\0';
strncpy(a[kolstrA],in,80);};
fclose(out1);
for(kolstrB=0;kolstrB<100;kolstrB++)
{if(fgets(an,81,out2)==NULL)
{break;};
an[80]='\0';
strncpy(b[kolstrB],an,80);};
fclose(out2);


for(i=0;i<kolstrA;i++)
{pa[i]=a[i];};
for(j=0;j<kolstrB;j++)
{pb[j]=b[j];};

i=0;
j=0;
m=0;
do
{if(strncmp(pa[i],pb[j],80)<0)
{pc[m]=pa[i];
i=i+1;
m=m+1;}
else
{pc[m]=pb[j];
j=j+1;
m=m+1;};}
while(i<kolstrA||j<kolstrB);

while(j<kolstrB)
{pc[m]=pb[j];
j=j+1;
m=m+1;};
while(i<kolstrA)
{pc[m]=pa[i];
i=i+1;
m=m+1;};
cout<<"rezultat"<<"\n";
for(m=0;m<(kolstrA+kolstrB);m++)
{printf("%s\n",pc[m]);};
return;
}компилятор все выдает нормально, но запускаться прога не желает. В отладке выходит :
Необработанное исключение в "0x10264e35" в "sortstrsl.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
что это и как с этим бороться?

Добавлено через 1 час 23 минуты
хотя, кажется, это будет несколько иначе:
#include<iostream>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
FILE*out1,*out2,*out3;
typedef char *pChar;
typedef char **ppChar;

void main()
{out1=fopen("text1.txt","r");
out2=fopen("text2.txt","r");
out3=fopen("text3.txt","w");
int i,j,m,kolstrA,kolstrB;
char in[80];
char an[80];
char*pa[100];
char*pb[100];
char*pc[100];
char a[100][80];
char b[100][80];
char c[200][80];

for (kolstrA=0;kolstrA<100;kolstrA++)
{if(fgets(in,81,out1)==NULL)
{break;};
in[80]='\0';
strncpy(a[kolstrA],in,80);};
fclose(out1);
for(kolstrB=0;kolstrB<100;kolstrB++)
{if(fgets(an,81,out2)==NULL)
{break;};
an[80]='\0';
strncpy(b[kolstrB],an,80);};
fclose(out2);


for(i=0;i<kolstrA;i++)
{pa[i]=in[i];};
for(j=0;j<kolstrB;j++)
{pb[j]=an[j];};

i=0;
j=0;
m=0;
do
{if(strncmp(pa[i],pb[j],80)<0)
{pc[m]=pa[i];
i=i+1;
m=m+1;}
else
{pc[m]=pb[j];
j=j+1;
m=m+1;};}
while(i<kolstrA||j<kolstrB);

while(j<kolstrB)
{pc[m]=pb[j];
j=j+1;
m=m+1;};
while(i<kolstrA)
{pc[m]=pa[i];
i=i+1;
m=m+1;};
cout<<"rezultat"<<"\n";
for(m=0;m<(kolstrA+kolstrB);m++)
{printf("%s\n",pc[m]);};
return;
}


но тогда error C2440: =: невозможно преобразовать 'char' в 'char *'
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции.
как это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2010, 23:15
Ответы с готовыми решениями:

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким...

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая...

2 сортировки: пирамидальная сортировка и сортировка слиянием
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель...

Шейкерная сортировка + сортировка слиянием
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива ....

5
84 / 57 / 8
Регистрация: 07.08.2010
Сообщений: 185
24.11.2010, 23:21 2
Попробуй так:

#include<iostream>#include<string.h>#include<conio.h>#include<stdio.h>#include<s tdlib.h>using namespace std;FILE*out1,*out2,*out3;typedef char *pChar;typedef char **ppChar;void main(){out1=fopen("text1.txt","r");out2=fopen("text2.txt","r");out3=fopen("text3 .txt","w");int i,j,m,kolstrA,kolstrB;char in[80];char an[80];char*pa[100];char*pb[100];char*pc[100];char a[100][80];char b[100][80];char c[200][80];for (kolstrA=0;kolstrA<100;kolstrA++){if(fgets(in,81,out1)==NULL){break;};in[80]='\0';strncpy(a[kolstrA],in,80);};fclose(out1);for(kolstrB=0;kolstrB<100;kolstrB++){if(fgets(an,81,out2) ==NULL){break;};an[80]='\0';strncpy(b[kolstrB],an,80);};fclose(out2);for(i=0;i<kolstrA;i++){pa[i]=in[i];};for(j=0;j<kolstrB;j++){pb[j]=an[j];};i=0;j=0;m=0;do{if(strncmp(pa[i],pb[j],80)<0){pc[m]=pa[i];i=i+1;m=m+1;}else{pc[m]=pb[j];j=j+1;m=m+1;};}while(i<kolstrA||j<kolstrB);while(j<kolstrB){pc[m]=pb[j];j=j+1;m=m+1;};while(i<kolstrA){pc[m]=pa[i];i=i+1;m=m+1;};cout<<"rezultat"<<"\n";for(m=0;m<(kolstrA+kolstrB);m++){printf("% s\n",pc[m]);};return;}
0
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
26.11.2010, 22:41  [ТС] 3
теперь пишет
error C2440: =: невозможно преобразовать 'char' в 'char *'
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
а как сделать это приведение, я не знаю
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
26.11.2010, 22:46 4
http://www.algolist.manual.ru/sort/merge_sort.php
0
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
27.11.2010, 00:04  [ТС] 5
Если массив числовой, то там все проще, ибо нет преобразований типов. А проблема именно в этом.

Добавлено через 2 минуты
К тому же по данной ссылке программа с классами, а мне надо без них.
0
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
29.11.2010, 00:28  [ТС] 6
Никто не может помочь? проблема, судя по всему, в указателях.

Добавлено через 4 минуты
П.С. структуры и классы не предлагать
0
29.11.2010, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2010, 00:28
Помогаю со студенческими работами здесь

Сортировка слиянием
Нужен самый примитивный рабочий код желательно с комментарием. Спасибо

Сортировка слиянием c++
Необходимо слить 2 упорядоченных по не возрастанию списка в один, так же упорядоченный по не...

Сортировка слиянием
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void Merge_Sort(int * a,int...

Сортировка слиянием
Всем доброго время суток, дана задача: Требуется упорядочить элементы некоторого массива целых...


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

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

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