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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
student101
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
24.11.2010, 23:15     сортировка слиянием #1
программа должна выполнять сортировку строк слиянием с использованием указателей.

#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, приведение в стиле С или приведение в стиле функции.
как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2010, 23:15     сортировка слиянием
Посмотрите здесь:

Сортировка слиянием C++
C++ сортировка слиянием
Сортировка слиянием c++ C++
C++ Сортировка слиянием
шейкерная сортировка + сортировка слиянием C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
24.11.2010, 23:21     сортировка слиянием #2
Попробуй так:

#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;}
student101
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
26.11.2010, 22:41  [ТС]     сортировка слиянием #3
теперь пишет
error C2440: =: невозможно преобразовать 'char' в 'char *'
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
а как сделать это приведение, я не знаю
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.11.2010, 22:46     сортировка слиянием #4
http://www.algolist.manual.ru/sort/merge_sort.php
student101
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
27.11.2010, 00:04  [ТС]     сортировка слиянием #5
Если массив числовой, то там все проще, ибо нет преобразований типов. А проблема именно в этом.

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

Добавлено через 4 минуты
П.С. структуры и классы не предлагать
Yandex
Объявления
29.11.2010, 00:28     сортировка слиянием
Ответ Создать тему
Опции темы

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