Dev - C++ - Problema con mi programa

 
Vista:
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con mi programa

Publicado por Saga (20 intervenciones) el 26/11/2019 06:14:08
Hola tengo un problema con mi cogido.
1)No me abre el archivo que le pongo, me dice que no existe cuando ya esta creado
2)Como podría implementar el segundo archivo al programa.
3)Como podría implementar el código de "ordenaCombina" según el código que dejo mas adelante

"En cada archivo la parte real es la que esta antes del '+' y después de el es la imaginaria"

Realizar un programa que a partir de los archivos de entrada proporcionados: cargue los archivos en dos arreglos diferentes (uno por archivo) que estarán llenos de una estructura Complejo formado por parte real (int) y parte imaginaria (int).

El programa deberá ordenar cada arreglo con el algoritmo de quicksort y posteriormente deberá mezclar ambos arreglos y dejarlos ordenados de menor a mayor considerando la parte REAL para la comparación. Como salida se mostrará en pantalla los elementos ya mezclados y ordenados.

-------------------------------------------------------------------------------------------------------------------------------------------------------
Archivo 1:
1+3
18+20
15+4
4+1
8+9
3+16
2+17
2+2
12+8
11+12
20+9
6+19
7+9
3+17
3+12
13+16
14+10
7+1
5+10
1+12
10+3
20+11
11+1
5+2
1+7
6+20
15+3
18+2
12+20
10+6
-------------------------------------------------------------------------------------------------------------------------------------------------------
Archivo 2:
17+18
17+4
1+6
10+12
12+4
3+5
20+13
1+6
14+6
3+18
17+13
4+10
12+1
4+16
10+1
1+6
10+10
2+2
15+11
13+6
6+15
2+5
19+3
3+13
8+5
2+4
9+5
5+12
17+9
20+6
-------------------------------------------------------------------------------------------------------------------------------------------------------

int [] ordenaCombina (int []a, int []b)

COMIENZA
resultado [a.longitud + b.longitud]
posA ← 0
posB ← 0
posRes ← 0
WHILE (posA < a.longitud AND posB < b.longitud)
COMIENZA
SI (a[posA] < a[posB])
COMIENZA
resultado[posRes] ← a[posA]
posRes++
posA++
TERMINA
OTRO
COMIENZA
resultado[posRes] ← a[posB]
posRes++
posB++
TERMINA
TERMINA
MIENTRAS (posA < a.longitud)
COMIENZA
resultado[posRes] ← a[posA]
posRes++
posA++
TERMINA
MIENTRAS (posB < b.longitud)
COMIENZA
resultado[posRes] ← b[posB]
posRes++
posB++
TERMINA

REGRESA resultado
TERMINA


Esto es lo que llevo por el momento:

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
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
 
using namespace std;
 
void qs(int [],int,int);
void quicksort(int [],int);
 
int main(){
 
	FILE *archivo=NULL;
	int real[60];
	int imaginaria[60];
	char nombreArchivo [15];
	int size = sizeof(real)/sizeof(int);
	int size2 = sizeof(imaginaria)/sizeof(int);
 
	cout<<"\nNombre de archivo: ";
	cin>>nombreArchivo;
	archivo = fopen(nombreArchivo,"r");
 
	while(archivo == NULL){
		cout<<"El archivo no pudo abrirse";
		cout<<"\n\nNombre de archivo: ";
		cin>>nombreArchivo;
		archivo = fopen(nombreArchivo,"r");
	}
 
	while(!feof(archivo)){
 
		fscanf(archivo,"%[^+],%[^\n]\n",&real,&imaginaria);
		cout<<"\nParte real:%s",real;
		cout<<"\nParte imaginaria:%s",imaginaria;
      	cout<<"\n----------------------------------\n";
	 }
 
	cout<<"Lista Desordenada \n";
 
	for (int i=0; i<size; i++){
		for (int j=0; j<size2; j++){
			cout<<real[i];
			cout<<imaginaria[j];
			if(i<size-1 && j<size2-1){
				cout<<"->";
			}
		}
	}
 
	cout<<"\n";
	quicksort(real,size);
	quicksort(imaginaria,size2);
	cout<<"Lista Ordenada \n";
	for (int i=0; i<size; i++){
		for (int j=0; j<size2; j++){
			cout<<real[i];
			cout<<imaginaria[j];
			if(i<size-1 && j<size2-1){
				cout<<"->";
			}
		}
	}
 
	return 0;
}
 
void qs(int lista[],int limite_izq,int limite_der){
	int izq,der,temporal,pivote;
 
    izq=limite_izq;
	der = limite_der;
	pivote = lista[(izq+der)/2];
 
	do{
	    while(lista[izq]<pivote && izq<limite_der)izq++;
	    while(pivote<lista[der] && der > limite_izq)der--;
 
	    if(izq <=der){
	        temporal= lista[izq];
	        lista[izq]=lista[der];
	        lista[der]=temporal;
	        izq++;
	        der--;
	    }
 
	}while(izq<=der);
 
		if(limite_izq<der){qs(lista,limite_izq,der);}
	    if(limite_der>izq){qs(lista,izq,limite_der);}
}
 
void quicksort(int lista[],int n){
	qs(lista,0,n-1);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder