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

#1
Programación C/C++ / Ayuda perfeccionar programa
15 Diciembre 2014, 19:02 PM
Buenas necesito un empujón para perfeccionar programa, saco las letras en horizontal y vertical en la matriz pero lo tengo un poco guarrete, necesito que no me pise las palabras mostradas y que muestre todas bien mezcladas en horizontal y vertical.
Gracias de antemano, saludos!!
Código (cpp) [Seleccionar]
#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <random>

using namespace std;

string filename = "words.txt";
ifstream ifile {filename};
void error(const string&);

vector<string> load_vector(const string& filename) {
   
   vector<string> vi;
   
   if (!ifile)
       error("load_vector cannot open the file " + filename);
   copy(istream_iterator<string>(ifile), istream_iterator<string>(), back_inserter(vi));
   
   return vi;
}

void error(const string& s) {
   cerr << "Error: " << s << endl;
   exit(EXIT_FAILURE);
}

void aleatorio () {
   int HEIGHT = 15; //Numero de filas
   int WIDTH = 15; //Numero de columnas
   int wordsize = 0;
   int wordPos = 0;
   char puzzle[HEIGHT][WIDTH]; //Matriz de caracteres
   bool okWord;
   bool horizontal;
   int randColumn;
   
   srand(time(NULL)); //inicializamos semilla
   
   char random; //Carácter aleatorio
   int filarand = 0; //Variable para escoger una fila aleatoria
   
   vector<string> load_vector(const string&);
   vector<string> words = load_vector(filename);
   vector<string> auxWords;
   string enteredWord;
   string aux;
   
   //Inicializamos matriz
   for (int i = 0; i < HEIGHT; i++) {
       for (int j = 0; j < WIDTH; j++) {
           puzzle[i][j] = ' '; //Al inicializar la matriz la rellenamos con espacios
       }
   }
   
   for (int i = 0; i < words.size(); i++) {
       switch (rand() % 2) {
       case 1:
           filarand = rand() % 15; //Escogemos una fila aleatoria
           wordsize = WIDTH - words[i].size() - 1; //Posiciones que nos quedan para escoger columna aleatoria
           wordPos = rand() % wordsize; //Escogemos columna aleatoria para empezar a escribir la palabra
           for (int j = 0; j < words[i].size(); j++) {
               if (words[i].size() < 10) { //Si la palabra es menor de 10 caracteres
                   aux = ""; // Inicializamos la variable con ningún caracter
                   aux = words[i].substr(j,1); //Sustraemos una letra cada vez de la palabra
                   puzzle[filarand][wordPos + j] = aux[0]; //Rellenamos la fila de la matriz con la palabra
               }
           }
           break;
       case 0:
           randColumn = rand() % 15;
           wordsize = HEIGHT - words[i].size() - 1;
           wordPos = rand() % wordsize;
           for (int j = 0; j < words[i].size(); j++) {
               if (words[i].size() < 10) {
                   aux = "";
                   aux = words[i].substr(j,1);
                   puzzle[wordPos + j][randColumn] = aux[0];
               }
           }
           break;
       }
   }
   
   auxWords = words;

   for (int i = 0; i < HEIGHT; i++) {          //la llenamos aleatoriamente de letras
       for (int j = 0; j < WIDTH; j++) {
           if (puzzle[i][j] == ' ') {
               random = 'A' + (rand() % 26); //Escogemos un carácter aleatorio
               puzzle[i][j] = random; //Rellenamos la posición con un carácter aleatorio
           }
       }
   }
   
   
   for (int i = 0; i < HEIGHT; i++) { //Mostramos la matriz final
       for (int j = 0; j < WIDTH; j++) {
           cout << puzzle[i][j] ;
           cout << "  ";
       }
       cout << endl;
   }
   
   do {
       cout << "Introduce una palabra: ";
       cin >> enteredWord;
       
       for (int i = 0; i < auxWords.size(); i++) {
           if (enteredWord == auxWords[i]) { //Miramos si la palabra introducida existe en el vector de palabras
               okWord = true;                  // SI LA PALABRA existe borrarla del vector, cuando la borre sale
               auxWords.erase(auxWords.begin() + i);
               break;
           }
           else {                          // si no la encuentra sigue buscando
               okWord = false;
           }
       }
       
       if (okWord == true) {                  // si la a encontrado te dice la palabra
           cout << "Palabra " << enteredWord << " correcta" << endl;
       }
       else if (enteredWord != "FIN") {        //si no la encuetra te dice incorrecta
           cout << "Palabra " << enteredWord << " incorrecta" << endl;
       }
   } while (enteredWord != "FIN");             //Mientras que no escribas FIN no termina programa
}



int main() {
   
   int HEIGHT = 10;
   int WIDTH = 10;
   
   char puzzle[HEIGHT][WIDTH];
   
   srand(time(NULL));
   aleatorio();
   //wordToMatrix(10, 10, puzzle[HEIGHT][WIDTH]);
   
   /*for (int i = 0; i < HEIGHT; i++) {
    for (int j = 0; j < WIDTH; j++) {
    cout << puzzle[i][j] << endl;
    }
    }*/
   
   
   
   return 0;
}

#2
Programación C/C++ / Problema con matriz char
12 Diciembre 2014, 21:51 PM
Muy buenas no consigo acabar este programa:
que me saque la matriz de 10*10 con palabras de un archivo y en los espacios me ponga una letra aleatoria me saca las palabras tal cual, llevo un rato volviéndome loco y no doy con el problema.

Código (cpp) [Seleccionar]

#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <random>

using namespace std;

string filename = "words.txt";
void error(const string&);

vector<string> load_vector(const string& filename) {
   
    vector<string> vi;
   
    ifstream ifile {filename};
    if (!ifile)
        error("load_vector cannot open the file " + filename);
    copy(istream_iterator<string>(ifile), istream_iterator<string>(), back_inserter(vi));
   
    return vi;
}

void error(const string& s) {
    cerr << "Error: " << s << endl;
    exit(EXIT_FAILURE);
}

void aleatorio (int HEIGHT, int WIDTH,const char* puzzle[HEIGHT][WIDTH]) {
   
    srand(time(NULL)); //inicializamos semilla
    string random;
    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            random = 'A' + (rand() % 26);
            if (puzzle[i][j] == " ") {
                puzzle[i][j] = random.c_str();
            }
        }
       
    }
}

char wordToMatrix(int HEIGHT, int WIDTH) {
   
    char puzzle[HEIGHT][WIDTH];
    int filarand = 0;
    vector<string> load_vector(const string&);
    vector<string> words = load_vector(filename);
    string aux;
    char empty = ' ';
    const char* aux2;
    char random;
    char espacio = ' ';
   
    //Inicializamos matriz
    for (int i = 0; i < HEIGHT; i++) {
        cout << endl;
        for (int j = 0; j < WIDTH; j++) {
            puzzle[i][j] = '1';
            cout << puzzle[i][j];
        }
    }

   
    filarand = rand() % 10;
    //cout << filarand << endl;
   
    for (int i = 0; i < 10; i++) {
        filarand = rand() % 10;
        cout << "" << endl;
        for (int j = 0; j < words[i].size(); j++) {
            if (words[i].size() < 10) {
                    //aux2 = words[i].substr(j,1);
                    aux = words[i].substr(j,1);
                    puzzle[i][j] = aux[0];
                    cout << puzzle[i][j];
            }
        }
    }
   
    for (int i = 0; i < 10; i++) {
        //cout << endl;
        for (int j = 0; j < 10; j++ ) {
            if (puzzle[i][j] == '1') {
                random = 'A' + (rand() % 26);
                puzzle[i][j] = random;
                //cout << puzzle[i][j];
            }
        }
    }
   
    /*for (int i = 0; i < HEIGHT; i++) {
        cout << endl;
        for (int j = 0; j < WIDTH; j++) {
            random = 'A' + (rand() % 26);
            if (puzzle[i][j] == espacio) {
                puzzle[i][j] = random;
                cout << puzzle[i][j];
            }
        }
       
    }*/
   
    return puzzle[HEIGHT][WIDTH];

   
}


int main() {
   
    int HEIGHT = 10;
    int WIDTH = 10;
   
    char puzzle[HEIGHT][WIDTH];
   
    srand(time(NULL));
    wordToMatrix(10,10);
   
    /*for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            cout << puzzle[i][j] << endl;
        }
    }*/
   
   
   
    return 0;
}
#3
Programación C/C++ / Ayuda tolower & overwrite c++
2 Diciembre 2014, 19:17 PM
Buenas tengo casi terminado el programa aunque me falta rematarlo. Necesito que el usuario decida por teclado si quiere sobrescribir el data2.txt que ya existe creado o no , esta parte la tengo casi casi. Por otra parte no consigo hacer funcionar la función tolower en un vector string ahi tengo varias pruebas que no consigo que funcionen muchas gracias de antemano.
Código (cpp) [Seleccionar]
#include<string>    // std::string
#include<vector>    // std::vector<>
#include<iostream>  // std::cout | std::cin | std::cerr
#include<fstream>   // std::ifstream | std::ofstream
#include<cstdlib>   // std::exit()
#include<algorithm>  // std:: sort()
#include <locale>  // std::tolower | st::locale
#include <cctype>   //tolower

using namespace std;

vector<string> load_vector(const string&);
void save_vector(const vector<string>&, const string&);
void error(const string&);

int main() {
   
   string filename = "data.txt";
   vector<string> text = load_vector(filename);
   
   string filename2 = "data2.txt";
   
   fstream file;    // start to see if we want to overwrite the file if the file already exist
   file.open("data2.txt", ios_base::out | ios_base::in);  // will not create file
   if (file.is_open())
   {
       cout << "Warning, file already exists, proceed?";
       if (!file.is_open())
       {
           file.close();
           
       }
   }
   else
   {
       file.clear();
       file.open("data2.txt", ios_base::out);  // will create if necessary
   }
   
   
   
   sort(text.begin(), text.end());
   text.erase(unique(text.begin(), text.end()), text.end());
   
   
   /*for (unsigned int i=0; i<text.size(); i++) {
     text[i] = tolower ();
   }
   
  // for (auto word : text) {
    //   string lowcase;
      // for (auto ch : word)
        //   if (ch>='A' and ch<='Z') lowcase += ch +'a'-'A' ; else lowcase = ch;
      // word = lowcase;
 } */
 
   save_vector(text, filename2);
   return 0;
   
   
   
}

vector<string> load_vector(const string& filename) {
   vector<string> vi;
   
   ifstream ifile {filename};
   if (!ifile)
       error("load_vector cannot open the file " + filename);
   copy(istream_iterator<string>(ifile), istream_iterator<string>(), back_inserter(vi));
   
   return vi;
}


void save_vector(const vector<string>& vi, const string& filename2) {
   
   ofstream ofile ("data2.txt", ofstream::out);
   if (!ofile)
       error("save_vector cannot open the file " + filename2);
   for (auto n : vi)
       ofile << n << ' ';
   ofile.close();
   cout << "\nVector written in file \"" << filename2 << "\"" << endl;
}
/* return true if two vector<string> contain exactly the same members
bool compare(const vector<string>& v1, const vector<string>& v2) {
   if (v1.size()!=v2.size())
       return false;       // vectors have different sizes
   
   for (int i=0; i<v1.size(); ++i)
       if (v1[i]!=v2[i])
           return false;   // i-th members of v1 and v2 are different
   
   return true;
}
*/
void error(const string& s) {
   cerr << "Error: " << s << endl;
   exit(EXIT_FAILURE);
}
#4
Programación C/C++ / Ayuda guardado de archivo
27 Noviembre 2014, 13:25 PM
No consigo que me cree el data2.txt.

Código (cpp) [Seleccionar]
#include<string>    // std::string
#include<vector>    // std::vector<>
#include<iostream>  // std::cout | std::cin | std::cerr
#include<fstream>   // std::ifstream | std::ofstream
#include<cstdlib>   // std::exit()
#include<algorithm>  // std:: sort()
#include <locale>
#include <cctype>
using namespace std;

vector<string> load_vector(const string&);
void save_vector(const vector<string>&, const string&);
void error(const string&);

int main() {
   string filename2 = "data2.txt";
   //locale loc;
   string filename = "data.txt";
   vector<string> text = load_vector(filename);
   
   sort(text.begin(), text.end());
   text.erase(unique(text.begin(), text.end()), text.end());
   
   //for (unsigned int i=0; i<text.size(); i++) {
     // text [i] = tolower (text[i], loc);
  // }
   
   save_vector(text, filename2);
   return 0;
   
   
   
}

vector<string> load_vector(const string& filename) {
   vector<string> vi;
   
   ifstream ifile {filename};  
                               
   if (!ifile)
       error("load_vector cannot open the file " + filename);
   copy(istream_iterator<string>(ifile), istream_iterator<string>(), back_inserter(vi));
   
   return vi;
}



void save_vector(const vector<string>& vi, const string& filename2) {
   
   ofstream ofile ("data2.txt");  
                               
   if (!ofile)
       error("save_vector cannot open the file " + filename2);
   for (auto n : vi)
       ofile << n << ' ';
   ofile.close();
   cout << "\nVector written in file \"" << filename2 << "\"" << endl;
}
void error(const string& s) {
   cerr << "Error: " << s << endl;
   exit(EXIT_FAILURE);
}
#5
Programación C/C++ / problemillas varios
26 Noviembre 2014, 18:22 PM
resuelto
#6
Programación C/C++ / Dudas varias programa
24 Noviembre 2014, 19:20 PM
Muy buenas estoy haciendo una practica de fibonacci tengo lo siguiente después de mucha comedura de cerebro...
Código (cpp) [Seleccionar]
#include <vector>
#include <math.h>
#include <iostream>
using namespace std;


void fibonacci (int x, int y , vector<int>& v, int n){
    int num1 = x;
    int num2 = y;
    int aux;
    v.push_back(x);
    v.push_back(y);
    for (int d = n-2; d > 0; --d){
        aux = num1 + num2;
        num1 = num2;
        num2 = aux;
        v.push_back(aux);
    }
}

int main(){
    int x;
    int y;
    int n;
    cout << "Enter the first term: \n";
    cin >> x;
    cout << "Enter the second term: \n";
    cin >> y;
    cout << "Enter the number of terms: \n";
    cin >> n;
    vector<int> v;
    fibonacci(x, y, v , n);
    cout << endl << "The numbers for the sequence asked are: " << endl;
    for (int i = 0; i <v.size(); ++i){
        cout << v[i] << endl;
    }
}


¿como puedo sacar del main la lectura de los datos?
¿como hacer que no se pueda introducir letras, que solo lea datos?
en fin mejorarlo que llevo tiempo con ello y no me apaño no hacen mas que salirme errores, Gracias de antemano, saludos
#7
Programación C/C++ / consejos sobre programa
26 Octubre 2014, 13:31 PM
buenas tengo realizado este programa:

Código (cpp) [Seleccionar]
#include <iostream>
#include <math.h>
using namespace std;
int main(){
   double a,b,c;
   cout<<"Ingresa a"<<endl;
   cin>>a;
   cout<<"Ingresa b"<<endl;
   cin>>b;
   cout<<"Ingresa c"<<endl;
   cin>>c;
   double disc=pow(b,2)-4*a*c;
   if(a!=0){
       if(disc<0){
           cout<<"Tiene raices imaginarias";
       }else{
           double x1=(-b+sqrt(disc))/(2*a);
           double x2=(-b-sqrt(disc))/(2*a);
           cout<<"X1 = "<<x1<<" X2 = "<<x2;
       }
   }else{
       cout<<"El coeficiente a debe ser diferente a 0";
   }
   return 0;
}


Mis preguntitas son las siguientes:
Como hacer un infinite main loop para que al acabar pregunte al usuario si quiere hacer mas ecuaciones o salir?
Y como puedo conseguir que el usuario no pueda meter letras para que de un error, gracias de antemano saludos
#8
Buenas solo llevo 2 días con c ++ y necesito consejos ya que estoy un poco bloqueado, tengo lo siguiente:
#include <iostream>

using namespace std;

int main() {
    double firstnum; double seconnum; double thirnum; double fournum;
    string operation; string operation2;
    double plus ;double minus; double mul; double div;
   
   
    cout << "Please enter 2 operations: ";
    cin >> firstnum >> operation >> seconnum; // numbers for first operation
    cin >> thirnum >> operation2 >> fournum; // numbers for second numbers
   
    if (operation=="+" || operation=="plus" ) {
        plus = firstnum + seconnum;
        cout << "The first sum is: " << plus << endl;}
   
    if  (operation=="-" || operation=="minus") {
        minus = firstnum - seconnum;
        cout << "The first minus is: " << minus << endl;}
   
    if (operation=="*" || operation=="mul") {
        mul = firstnum * seconnum;
        cout << "The first multiplication is: " << mul << endl;}
    if (operation=="/" || operation=="div"){
        if (seconnum==0) {
            cout << "cero is impossible to operate" << endl;  }
       
        div = firstnum / seconnum ;
        cout << "The first div is: " << div << endl; }
   
   
    if (operation2=="+" || operation2=="plus" ) {
        plus = thirnum + fournum;
        cout << "The second sum is: " << plus << endl;}
   
    if  (operation2=="-" || operation2=="minus") {
        minus = thirnum - fournum;
        cout << "The second minus is: " << minus << endl;}
   
    if (operation2=="*" || operation2=="mul") {
        mul = thirnum * fournum;
        cout << "The second multiplication is: " << mul << endl;}
    if (operation2=="/" || operation2=="div"){
        if (fournum==0) {
            cout << "cero is impossible to operate" << endl; }
       
        div = thirnum / fournum;
        cout << "The second div is: " << div << endl; ;
    }
}

El problema que meto la primera operación al poner una division entre 0 quiero que siga con la segunda operación y no que me diga que es infinito, esta un poco guarrete pero para 2 días que llevo me doy por satisfecho al día de hoy, consejos ayudas? gracias de antemano