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ú

Mensajes - gomezjuan

#1
He eliminado lo del signo ^ y ahora despues de la x tendria que ir un numero directamente o nada si el exponente es 1.
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
#include <iostream>

typedef struct{
int coeficiente;
int potencia;
}monomio;

int main(){
  std::string ecuacion = "+3x2-2x1+9x5-4+5x3+1";
 
  for(int i = 0; i < ecuacion.size(); i++){
    //std::cout << ecuacion[i];
    if(ecuacion[i] == '+' || ecuacion[i] == '-'){
         
}
  }
  int exponente = 0; //Exponente por defecto
  int j = 1; //La posicion 0 ya sabemos que es + o -
  // Longitud del coeficiente:
  while(j < monomio.size() && isdigit(monomio[j]){
  j = j + 1;
  }
  if(j = 1){//No hay numeros despues del signo
  std::cout << "La estructura no es correcta, no hay numeros despues del signo " << std::endl;
  return 1;
  }
  coeficiente = monomio.substring(0,j); //Ya tenemos el coeficiente con el signo
 
  //Comprobar si es el termino independiente
  if( i < monomio.size()){
  if(monomio[i] != 'x'){
  std::cout << "La estructura no es correcta, falta una x" << std::endl;
  return 1;
  }
coeficiente = 1; //El coeficiente por defecto sera 1
int j = j + 1;
//Si no acaba en la x tiene que seguir con el exponente
int inicio = 1;
while( j < monomio.size() && isdigit(monomio[j])){
j = j + 1;
}
// Si no hay digitos despues de la x o hay algo mas devuelve error.
if(j = inicio || j < monomio.size()){
std::cout << "Error" << std::endl;
return 1;
}
exponente = monomio.substring(inicio,j));
  }

 
return 0;
}
#2
Muchas gracias, no entiendo muy bien a que te refieres con la primera linea la de validar monomio.
La estructura del monomio seria así?
struct monomio {
int coeficiente;
int exponente;
};

Y como puedo guardar los monomios en la estructura?
#3
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
#4
Vale, muchas gracias.
La cadena la introduce el usuario por consola y he controlado la entrada para que siempre empiece por a, si el usuario introduce la cadena que tu has dado me daría error y finalizaría problema.
#5
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
#6
.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");
            }
        }
    }
#7
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;

}
#8
Programación C/C++ / Re: AYUDA EJERCICIO C++
13 Mayo 2020, 18:55 PM
MUCHAS GRACIAS!!
Ya he conseguido que me imprima todos los puntos, pero que puedo hacer para que los puntos repetidos solo aparezcan una vez?
Por ejemplo, el punto (3,6) está dos veces en el fichero y solo quiero que se muestre una vez por pantalla.
He quitado el .clear() como me has dicho y he añadido

for(int i = 0; i < x0.size(); i++){
std::cout << "La solucion maxima es " << op_max << " y se consigue en los puntos (" << x0[i] << "," << y0[i] << ")" << std::endl;
}

#9
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;
}

#10
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!