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)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


0