Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - gomezjuan

#1
Necesito hacer un programa que dado un polinomio lo guarde en un string, lo divida en monomios y se asegure de que la estructura es correcta y devuelva error si no tiene esa estructura.
La estructura que debe tener el monomio es:
```
1. Signo + o -
2. COEFICIENTE: uno o mas dígitos enteros (0,...,9)
3. x
4. signo ^
5. EXPONENTE: uno o mas dígitos enteros (0,...,9)
```
He pensado en dividir el polinomio en monomios cada vez que lea un signo y guardarlo en un vector, pero no se como asegurarme de que cumple la estructura:
Tengo:

Código (cpp) [Seleccionar]
int main(){
 std::string ecuacion = "+3x^2-2x^1+9x^5-4+5x^3+1";
 
 for(int i = 1; i <= ecuacion.size(); i++){
   std::cout << ecuacion[i-1];
   if(ecuacion[i] == '+' || ecuacion[i] == '-'){
     std::cout << std::endl;
   }
 }  
return 0;
}


Por consola imprime:

+3x^2
-2x^1
+9x^5
-4
+5x^3
+1
#2
Si tengo un string =ajndfvaorncak89s'', ¿como puedo dividir la cadena en subcadenas cada vez que llege a una a?
Es decir, dividir esa cadena en:
ajndfv
aornc
ak89s
#3
.NET (C#, VB.NET, ASP) / AYUDA ERROR C#
17 Mayo 2020, 13:14 PM
Hola, tengo el siguiente código que lo que debería hacer es calcular los coeficientes que forman un polinomio, alguien me puede decir donde estan los errores?

public static void Main(){
        string ecuacion = "x^4 - x^3 - 5x^2 - x - 6";

        ecuacion = ecuacion.Replace(" ", string.Empty);
        char[] delimitadores = new char[] { '-', '+', '*', '/' };

        List<string> subEcuaciones = new List<string>();
        string subEcuacion = string.Empty;

        foreach (char caracter in ecuacion)
        {
            if (delimitadores.Contains(caracter))
            {
                subEcuaciones.Add(subEcuacion);
                subEcuacion = string.Empty;
            }
            subEcuacion += caracter;
        }

        subEcuaciones.Add(subEcuacion);
        foreach (string ecuaciones in subEcuaciones)
        {
            Console.Write(ecuaciones + ": ");

            if (ecuaciones[0] == '-' && char.IsDigit(ecuaciones[1]))
            {
                Console.WriteLine(ecuaciones[0].ToString() + ecuaciones[1].ToString());
            }
            else if (ecuaciones[0] == '+' && char.IsDigit(ecuaciones[1]))
            {
                Console.WriteLine(ecuaciones[0].ToString() + ecuaciones[1].ToString());
            }
            else if (ecuaciones[0] == '-' && !char.IsDigit(ecuaciones[1]))
            {
                Console.WriteLine(ecuaciones[0].ToString() + "1");
            }
            else if (ecuaciones[0] == '+' && !char.IsDigit(ecuaciones[1]))
            {
                Console.WriteLine(ecuaciones[0].ToString() + "1");
            }
            else if (char.IsDigit(ecuaciones[0]))
            {
                Console.WriteLine("+" + ecuaciones[0].ToString());
            }
            else if (ecuaciones[0]=='x')
            {
                Console.WriteLine("+ 1");
            }
        }
    }
#4
Tengo que crear un fichero llamado matriz.txt en el que se imprima una matriz de 7x7 formada por números con dos decimales. Llamo i al número de columnas y k al número de filas.
    -   La matriz tiene que cumplir las siguientes condiciones:
    -   La primera y ultima columna (i[0], i[6]) tienen que ser 0.00
    -   La primera fila k[0] (obviando las columnas i[0], i[6]) tiene que cumplir la ecuacion
         x(i,0)=pi * i
    -   La segunda fila k[1] (obviando las columnas i[0], i[6]) debe cumplir x(i,1) =
        2*x(i,0)+3x(i+1,0)
    -   Las demás filas deben cumplir x(i,k) = 2*x(i,k-2)+5*x(i+1,k-1)
Consigo imprimir la matriz por consola pero no soy capaz de crear el fichero:

#include <iostream>
#include <iomanip>
#include <fstream>

int main()
{
    const double pi = 3.14159;
    double matriz[7][7];

   
    for(unsigned k = 0; k<7 ; k++){
        matriz[k][0] = 0.00 ;
        matriz[k][6] = 0.00 ;
    }
   
    for(unsigned i = 0; i<6 ; i++){
        matriz[0][i] = pi*i;
        std::cout << matriz[0][i] << "\t" << std::endl;
    }
   
    for (int i = 1; i< 6 ; i++){
        matriz[1][i] = 2*matriz[0][i]+3*matriz[0][i+1];
    }
   
    for(int k = 2; k < 7; k++){
        for (int i =1; i < 6; i++){
            matriz[k][i] = 2  * matriz[k-2][i] + 5 * matriz[k-1][i+1];
        }
    }   
    std::cout << matriz << std::endl;

}
#5
Programación C/C++ / AYUDA EJERCICIO C++
13 Mayo 2020, 18:06 PM
Hola, a ver si alguien puede ayudarme con este ejercicio.
Hay que leer los datos de un fichero de dos columnas coordenadas.txt, pedir por consola que el usuario introduzca un numero (n) y debe hacer la siguiente operación n*(x+y).
Por consola debe imprimir el resultado máximo que se obtiene al hacer esa operación con todas las coordenadas del fichero y los puntos en los que se obtiene ese resultado, si hay puntos repetidos solo tiene que salir una vez por consola.
Un ejemplo:
Si n = 1 y el fichero es:
1 1
2 1
4 5
3 6
6 3
8 1
0 0
3 6
4 3
Por consola debería aparecer: " La solucion maxima es 9 y se obtiene en los puntos (4,5), (3,6), (6,3), (8,1)"
Tengo hecho el código pero no consigo que salga por pantalla todos los puntos en los que se consigue ese resultado, solo me sale el ultimo punto en el que se obtiene 9.
Mi codigo es:

#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

int main()
{
double n;
std::cout << "Valor de n ";
std::cin >> n;

std::ifstream in("coordenadas.txt",std::ios::in);
double operacion, op_max, x_max, y_max;
std::vector<double> x0,y0;
while(!in.eof()){
double X,Y;
in >> X >> Y;
operacion = n*(X+Y);
if(operacion > op_max){
op_max = operacion;
x_max = X;
y_max = Y;
x0.clear();
y0.clear();
x0.push_back(X);
y0.push_back(Y);
}
else if(operacion == op_max){
op_max = operacion;
x_max = X;
y_max = Y;
x0.clear();
y0.clear();
x0.push_back(X);
y0.push_back(Y);
}
}
in.close();
std::cout << "La solucion maxima es " << op_max << " y se consigue en los puntos (" << x_max << "," << y_max << ")" << std::endl;
}

#6
Hola,
alguien me puede decir como puedo crear un struct con los datos de un fichero mas otro que introduce el usuario por consola?
Primero el usuario introduce un numero por consola, luego hay que leer un fichero .txt que esta formado por dos columnas con un numero de filas desconocido.
A la primera columna del fichero la llamo x y a la segunda y. El valor introducido por consola será n.
Lo que tiene que hacer el programa es hacer la operación n · (x + y) e imprimir por consola el valor máximo que se alcanza al hacer esta operación en todas las filas del fichero.
También tiene que salir por consola la x y la y en la que se ha obtenido esté numero máximo.
Por ejemplo: Si el usuario pone por consola n = 2 y el fichero es el siguiente:
1 2
0 0
2 1
0 -1
-1 0
1 2
En programa debería imprimir:
"El valor máximo de la operación es 6. Y se alcanza en los puntos (1,2) y (2,1)"
Otra cosa, si hay algún par de puntos repetidos solo debe aparecer una  vez por consola.
Yo lo que había hecho es mientras voy leyendo el archivo, voy haciendo la operación n(x+y) y consigo que me imprima el valor máximo pero creo que un struct sería mas sencillo.
Gracias!
#7
Buenas, tengo que hacer un ejercicio que haga lo siguiente:
1º Leer un fichero que esta formado por dos columnas (desconocemos el numero de filas), asegurarse de que los datos del fichero son numeros reales y de que en la columna 1 y en la 2 hay la misma cantidad de numeros.
2º Sumar los elementos de las filas, por ejemplo:
2 3 --> 2+3=5
1 2 --> 1+2=3
4 1 --> 4 +1 = 5
2 3 -->2 + 3 =5
3º Mostrar por consola el numero mas grande que se obtiene al sumar las columnas y los numeros que se han sumado para alcanzar ese numero, pero si en el fichero hay una fila con los mismos numeros solo debe salir una vez por consola.
Segun el ejemplo anterior en la consola deberia aparecer:
"El número mayor que se obtiene es 5 que se obtiene al sumar: 2 y 3, 4 y 1.

Yo he pensado ir añadiendo a un vector los resultados de las sumas y luego imprimir por consola el mayor, pero no se como puedo hacer esto.
Esto es lo que tengo hecho:
Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <cmath>

const char sumasFich[] = "puntos.txt";

int main()
{
std::ifstream in(sumasFich, std::ios::in);
//SI EL FICHERO NO SE PUEDE ABRIR DA ERROR Y FINALIZA
if(!in){
std::cout << "ERROR  " << sumasFich;
return 1;
}

std::vector<double> columna1,columna2;
while(!in.eof()){
double col1, col2;
in >> col1;
if(in.eof())break;
if(in.fail()){
std::cout << "ERROR " << sumasFich << std::endl;
return 1;
}

inFich >> col2;

if(in.eof()){
std::cout << "ERROR " ;
return 1;
}
if(in.fail()){
std::cout << "ERROR" << std::endl;
return 1;
}

columna1.push_back(col1);
columna2.push_back(col2);
}

in.close();
if(columna1.size() == 0){
std::cout << "El fichero " << sumasFich << " esta vacio. ";
return 1;
}

       double Sumas;

for(unsigned int i = 0; i < columna1.size(); i++){
Sumas = columna1[i]+columna2[i]
std::cout << "El resultado mayor es " << Sumas << " se obtiene al sumar "<< columna1[i] << " y " <<
                columna2[i] << std::endl;
}
return 0;
}