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

С++ для начинающих

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

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

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

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

#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++
Даны два текстовых файла f1.txt и f2.txt, состоящие из целых чисел, которые упорядочены по неубыванию. Числа лежат в диапозоне от 0 до 9....

Сортировка двупутевым слиянием - C++
Помогите исправить функцию сортировки двухпутевого слияния... Функция корректно работает и выдает результат только лишь если она работает...

Обменная сортировка со слиянием - C++
Помогите! Нужна рабочая программа для Visual C++ с обменной сортировкой и слиянием. Например 2 массивов.

Сортировка естественным слиянием - C++
Не могу понять в чем ошибка и как до реализовать саму сортировку если возможно объясните где ошибка и помогите доделать код. Задача...

Сортировка простым слиянием - C++
Написала прогу, а не сортирует( #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;windows.h&quot; #include &quot;math.h&quot; using namespace...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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 минуты
К тому же по данной ссылке программа с классами, а мне надо без них.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 00:28     сортировка слиянием
Еще ссылки по теме:

Сортировка простым слиянием - C++
Нужно считать числа из двух документов, сделать слияние и сортировку и вывести результат в консоли. Искала нечто похожее, не нашла.

Не работает сортировка слиянием - C++
#include&lt;stdio.h&gt; #include&lt;iostream&gt; #define zn 7 int*sort(int array, int min, int max); int*sort1(int array, int min, int middle,...

Сортировка естественным слиянием - C++
Нету не у кого на примете решенной задачки? Отсортировать бинарный файл, содержащий целые числа, в порядке убывания методом естественного...

Сортировка слиянием вылетает - C++
Добрый вечер. Попробовал написать сортировку слиянием, а виндовс прекращает работу программы. Пишу в билдере, он ошибок не выдаёт, всё...

Сортировка слиянием С++ объясните - C++
Помогите, пожалуйте, мне нужно объяснить эту программу примитивным языком, нужно для защиты курсовой работы #include&lt;stdio.h&gt; ...

Сортировка естественным слиянием по убыванию - C++
Задача : Отсортировать текстовый файл, содержащий вещественные числа, в порядке убывания методом естественного слияния.


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

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

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

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