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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Библиотека pxc.h http://www.cyberforum.ru/cpp-beginners/thread197027.html
C++ Строки! Для задач a), b), 1) и 2) исходные данные (текст) – строка символов. Ввод и вывод текста реализовать с помощью функций ввода-вывода строк: gets(char* S) и puts(char* S). Реализовать задачи обработки строк в виде отдельных функций. Функции работы со строками для задач 1) и 2) реализовать в двух вариантах: без использования библиотеки <string.h> (использовать свои функции обработки строк как... http://www.cyberforum.ru/cpp-beginners/thread197023.html
C++ Динамический массив
Используя указатели на тип для объявления массивов, определить количество столбцов в матрице, не содержащих ни одного нулевого элемента.
операторы и циклы C++
Разработать алгоритм и написать программу, определяющую многократно по желанию пользователя: попадает ли точка, заданная координатами (х, у) в указанную область на плоскости, находится на границе области или находится вне области. В программе необходимо просмотреть изменение параметров, задающих область. :-[ P.S если что блок схему сделала могу показать
C++ Указатели и обработка строк http://www.cyberforum.ru/cpp-beginners/thread197018.html
1) Написать программу которая проверяет находиться ли введенное с клавиатуры число в массиве. Массив должен вводиться во время работы программы. 2) Вставить в строку пробел после каждого знака препинания. (подскажите еще каким образом вывести все предложения в тексте в обратном порядке) Заранее очень благодарен в помощи. Первую в Паскале когда то решал а вот в СИ как записать что то не...
C++ преобразование массива Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке. подробнее

Показать сообщение отдельно
student101
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17

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

24.11.2010, 23:15. Просмотров 1439. Ответов 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, приведение в стиле С или приведение в стиле функции.
как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru