elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6
11  Programación / Programación C/C++ / Re: Ayuda en funciones en estructuras en: 5 Enero 2019, 02:13 am
Creo que pregunta por los métodos.

Puede ser, pero el código que puso de ejemplo me hizo pensar que se refería a funciones  :xD
12  Programación / Programación C/C++ / Problema en creación de varios arch. de texto simultaneos en: 5 Enero 2019, 02:11 am
Buenas gente, aquí el resumen de para qué codifique el siguiente código.
Necesitaba hacer "x" cantidades de comisiones dependiendo de la cantidad de alumnos que tengo donde el máximo es de 30 alumnos x comisión.
Mi problema, sólo me crea la primera comisión y luego, la siguiente información se pierde...
El error se debe encontrar en la función <Crear_lista> a mi parecer, pero no lo veo, debe ser de tipo lógico, llegué a esa conclusión.
Respondanme por favor.

Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4. #include <fstream>
  5. using namespace std;
  6. struct Alumno{
  7. string nom_ape;
  8. };
  9. istream& operator>>(istream &, Alumno&);
  10. ostream& operator<<(ostream &, Alumno&);
  11. int Cantidad_comisiones(const int _maximo,size_t _cantidad_alum);
  12. void Crear_listas(int, vector<Alumno>, int, int);
  13. int Ver_cociente(int _comision, size_t _cantidad_alum); //Medio redundante...
  14. int Alumnos_sobrantes(int _comision, size_t _cantidad_alum);
  15. int main(int argc, char *argv[]) {
  16. const int maximo=30;
  17. vector<Alumno> V; Alumno aux;
  18. ifstream lectura;
  19. lectura.open("Unidad 5 - Nro 3 - Inscriptos.txt");
  20. if(!lectura.is_open()){
  21. cerr<<"Archivo no abierto"<<endl;
  22. exit(-1);
  23. }
  24. while(lectura>>aux){
  25. V.push_back(aux);
  26. }
  27. int comisiones=Cantidad_comisiones(maximo,V.size());
  28. int cociente=Ver_cociente(comisiones,V.size());
  29. int alumnos_sobrantes=Alumnos_sobrantes(comisiones,V.size());
  30. cout<<"Total de alumnos: "<<V.size()<<endl;
  31. cout<<"Cantidad de comisiones: "<<comisiones;
  32. Crear_listas(comisiones,V,cociente,alumnos_sobrantes);
  33. return 0;
  34. }
  35. istream& operator>>(istream &i, Alumno &A){
  36. getline(i,A.nom_ape);
  37. return i;
  38. }
  39. ostream& operator<<(ostream &o, Alumno &_A){
  40. o<<_A.nom_ape<<endl;
  41. return o;
  42. }
  43. int Cantidad_comisiones(const int _maximo,size_t _cantidad_alum){
  44. int cociente=0,resto=0;
  45. cociente=_cantidad_alum/_maximo;
  46. resto=_cantidad_alum%_maximo;
  47. if(resto!=0){
  48. return cociente+1;
  49. }
  50. return cociente;
  51. }
  52. int Ver_cociente(int _comision, size_t _cantidad_alum){ //Que podria hacer para no pasar todo nuevamente?
  53. int alumno_x_comision=_cantidad_alum/_comision;
  54. return alumno_x_comision;
  55. }
  56. int Alumnos_sobrantes(int _comision, size_t _cantidad_alum){
  57. float resto=_cantidad_alum%_comision;
  58. if(resto!=0){
  59. return resto*_comision;
  60. }
  61. return resto;
  62. }
  63. void Crear_listas(int _comisiones, vector<Alumno> _V, int _cociente,int _alum_sobrantes){
  64. string nom_lista="Unidad 5 - Nro 3 - Comision"; stringstream ss;
  65. ofstream salida;
  66. for(int i=0;i<_comisiones;i++) {
  67. ss<<nom_lista<<i<<".txt";
  68. salida.open(ss.str());
  69. if(_alum_sobrantes!=0){
  70. for(int i=0;i<_cociente+1;i++) {
  71. salida<<_V[i];
  72. }
  73. }else{
  74. for(int i=0;i<_cociente;i++) {
  75. salida<<_V[i];
  76. }
  77. }
  78. }
  79. salida.close();
  80. }
13  Programación / Programación C/C++ / Re: Ayuda en funciones en estructuras en: 4 Enero 2019, 14:02 pm
Las funciones se declaran fuera del main y se usan dentro de este
Código
  1.  
  2. struct Complejo{
  3.    double real;
  4.    double imaginario;
  5. };
  6.  
  7. Complejo sumar(Complejo, Complejo);
  8.  
  9. int main(){
  10.    Complejo num1, num2; // mejor declararlos locales, no globales
  11.    num1.real = 2;
  12.    num1.imaginario = 1;
  13.    num2.real = 3;
  14.    num2.imaginario = 2;
  15.  
  16.    Complejo suma = sumar(num1, num2);
  17. }
  18.  
  19. Complejo sumar(Complejo a, Complejo b){
  20.    Complejo suma;
  21.    suma.real = a.real + b.real;
  22.    suma.imaginario = a.imaginario + b.imaginario;
  23.    return suma;
  24. }

Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X
A pues, es como dijo el profe  ;D
14  Programación / Programación C/C++ / Re: Ayuda en funciones en estructuras en: 4 Enero 2019, 14:00 pm
Bueno pues yo programaba lo básico en c, y decidí pasarme a c++,pues me compré un libro que parecía ser el ideal.
Ahora este en un ejercicio supone que yo ya se hacer funciones en estructuras, pero por alguna razón, las hago como si fueran las normales y no compila el visual studio:
Código:
#include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;

struct complejo {
float real, imaginario;
}num1, num2;
int main()
{
complejo sumar(complejo a,complejo b) {
complejo suma;
suma.real= a.real += b.real;
suma.imaginario=a.imaginario += b.imaginario;
return suma;
}

}
He buscado bastante en google, pero tampoco me deja las cosas claras.

A ver, si no mal entiendo, por lo que veo (corrígeme si me equivoco) has programado la función dentro del main verdad?
Las funciones siempre se programan por fuera del main, de este modo:
Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. struct complejo {
  5. float real, imaginario;
  6. }num1, num2;
  7. complejo sumar(complejo a,complejo b) {
  8. complejo suma;
  9. suma.real= a.real += b.real;
  10. suma.imaginario=a.imaginario += b.imaginario;
  11. return suma;
  12. }
  13. int main(int argc, char *argv[]) {
  14.  
  15.  
  16.  
  17. return 0;
  18. }
  19.  
  20.  


O podes hacer prototipo antes del main y luego seguir programandola luego del main, así:
Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. struct complejo {
  5. float real, imaginario;
  6. }num1, num2;
  7.  
  8. complejo sumar(complejo a,complejo b);
  9.  
  10. int main(int argc, char *argv[]) {
  11.  
  12. return 0;
  13. }
  14. complejo sumar(complejo a,complejo b) {
  15. complejo suma;
  16. suma.real= a.real += b.real;
  17. suma.imaginario=a.imaginario += b.imaginario;
  18. return suma;
  19. }

Así pues, ya no deberías tener ningún problema de sintaxis.  ;D
15  Programación / Programación C/C++ / Re: recorrer una cadena de caracteres en: 4 Enero 2019, 13:42 pm
Aquí tenéis otra solución:
Código
  1. int contarVocales(const string &frase){
  2.    int contador = 0;
  3.    for(size_t i = 0; i < frase.size(); i++){
  4.        switch(tolower(frase[i])){
  5.            case 'a': case 'e': case 'i': case 'o': case 'u':
  6.                contador++;
  7.        }
  8.    return contador;
  9. }

O sin usar el switch:
Código
  1. int contarVocales(const string &frase){
  2.    int contador = 0;
  3.    char actual;
  4.    for(size_t i = 0; i < frase.size(); i++){
  5.        actual = tolower(frase[i]);
  6.        if(actual == 'a' || actual == 'e' || actual == 'i' || actual == 'o' || actual == 'u')
  7.            contador++;
  8.    }
  9.    return contador;
  10. }

Me gusta ese código, se ve simple  y fácil de recordar ;D Te evitas el uso de los manipuladores :P
Te lo voy a robar  :xD
16  Programación / Programación C/C++ / Re: recorrer una cadena de caracteres en: 4 Enero 2019, 13:36 pm
Pues ya que publicaste una solución, voy a poner yo la mía en C, creo que es mas rápida que la tuya Cero++  :P

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int NumeroVocales(char * Cadena);
  5.  
  6. int main()
  7. {
  8.    char * cadena = "Elhacker.net, la mejor web!";
  9.  
  10.    printf("La cadena tiene %i vocales\n", NumeroVocales(cadena));
  11.    return 0;
  12. }
  13.  
  14. int NumeroVocales(char * Cadena)
  15. {
  16.    char Vocales[9] = {'a','e','i','o','u','A','E','I','O','U'};
  17.    int Contador = 0;
  18.    int Desplazamiento = 0;
  19.    int i;
  20.  
  21.    while (Cadena[Desplazamiento] != '\0')
  22.    {
  23.        for(i=0;i<=9;i++)
  24.        {
  25.            if (Cadena[Desplazamiento] == Vocales[i])
  26.            {
  27.                Contador++;
  28.                break;
  29.            }
  30.        }
  31.        Desplazamiento++;
  32.    }
  33.    return Contador;
  34. }
  35.  

saludos.

Pero no es más fácil el convertir toda la oración a minúscula o mayúscula? Y así te evitas el hecho de pasar las mismas vocales pero en Mayus. o viceversa.
En fin, hace lo mismo jaja Pero me pregunto cuál forma sería más rápida de compilar, si estuviéramos buscando alguna palabra en un archivo de texto
17  Programación / Programación C/C++ / Re: Puntero a clases en: 4 Enero 2019, 04:00 am
Necesito saber si acaso puedo declarar un arreglo de punteros donde cada elemento permita apuntar a un objeto.

Supongo que mientras sea lineal no hay problema, ya que hacer esto:

Código
  1. Alumno *p=Persona j

Se puede hacer, ya que un puntero es eso, una dirección que sólo apunta a "algo", podrías poner el problema y el código que hiciste para tener una mejor idea?
18  Programación / Programación C/C++ / Re: recorrer una cadena de caracteres en: 4 Enero 2019, 03:56 am
Buenas, tengo que hacer un ejercicio que pida una frase, muestre el numero de vocales que tiene y las muestre por pantalla.
Se que es nivel muy básico pero no se por donde empezar.. Gracias

Podrías mostrar tu código base?

Mira, aquí te adjunto el código que hice, espero sea de ayuda  ;D

Código
  1. #include <iostream>
  2. #include <cctype>
  3. using namespace std;
  4. void Todo_minuscula(string s);
  5. int main(int argc, char *argv[]) {
  6. string frase="En el dia mas brillante, en la noche mas obscura,
  7. ningun mal escapara de mi, La luz del linterna verde!",vocal;
  8. /*Ahora voy a pasar todo a minuscula para que se encuentre la vocal
  9. sin importar si es mayuscula o minuscula*/
  10. Todo_minuscula(frase);
  11. int contador_de_vocales=0;
  12. cout<<"Que vocal desea ver cuantas veces aparece? "; cin>>vocal;
  13. /*Paso a minuscula la vocal, ya que todo esta en minuscula*/
  14. vocal=tolower(vocal[0]);
  15. //creo un auxiliar
  16. size_t p=frase.find(vocal,0);
  17. while(p!=string::npos){ //string::npos es un valor especial del metodo find...
  18. contador_de_vocales++;
  19. p=frase.find(vocal,p+vocal.size());
  20. }
  21. cout<<"Cantidad de veces que aparece la vocal "<<vocal<<": "<<contador_de_vocales;
  22. return 0;
  23. }
  24.  
  25. void Todo_minuscula(string s){
  26. if(!s.empty()){
  27. for(size_t i=0;i<s.size();i++) {
  28. s[i]=tolower(s[i]);
  29. }
  30. }
  31. }
  32.  

Para la próxima trata de hacerlo y déjalo donde no sepas cómo proseguir, sino, nunca vas a aprender.
Chao.
19  Programación / Programación C/C++ / Re: ¿Cómo leo datos de un fichero para guardarlos en un vector? en: 4 Enero 2019, 03:19 am
Buenas, tengo un vector de tipo "struct", y necesito leer un fichero y que me guarde los datos en un vector. Asumo que tiene que ser algo de este estilo:

Código:
        Libro libro; //es mi struct
string nom_fichero = PracticaFinal_opcion1.libros.dat;

ifstream f;

f.open(nom_fichero);

if (f)
{
while (f >> ??) // el "??" indica que no sé que poner para que lea hasta el fin del fichero. NO PUEDO USAR .eof //
{
//aquí irían la propia lectura
}
}

Gracias :D

Buenas, espero te sea de ayuda, yo estoy aprendiendo actualmente, así que, tenlo en cuenta.

Para leer un archivo, eso depende del tipo que sea, si se trabaja con un archivo de texto o binario.
Suponiendo que es de texto, la sintaxis sería así:
Código
  1. struct Libro{
  2. /*Algun string...*/
  3. };
  4. int main(int argc, char *argv[]) {
  5. vector<Libro> V; Libro aux;
  6. ifstream entrada;
  7. entrada.open(/*Nombre del archivo*/);
  8. if(!entrada.is_open()){
  9. cerr<<"Archivo no encontrado"<<endl;
  10. exit(-1);
  11. }
  12. while(entrada>>aux;){
  13. V.push_back(aux);
  14. }
  15. entrada.close();
  16. return 0;
  17. }
  18.  
Para leer, el archivo el cual vas a modificar, debes crear un auxiliar del mismo tipo que vas a leer (así me enseñaron) y utilizar el identificador de tu archivo, en este caso "entrada" para leer ese auxiliar y guardar ese mismo auxiliar en tu vector, el cual puedes modificar a tu antojo y ya luego cargar el archivo modificado o ver lo que contiene, que se yo   :xD
Obviamente el operador >> lo tengo sobrecargado.
PD: siempre que leas string con archivos, usa getline y el ignore(). Si no se borra el archivo, muy bien entendido no lo tengo todavía a ésta parte, tengo que indagar más sobre el funcionamiento de getline, lo digo por experiencia jaja
20  Programación / Programación C/C++ / Problema con manejo de archivo de texto - Consulta en: 4 Enero 2019, 02:26 am
Buenas gente, tengo un pequeño inconveniente, el problema es este, en el main cuando leo el string "nom_ape" usando el getline, no continua el programa y se cierra, sin permitirme la lectura de "nota1" y "nota2" y produciendo un mal funcionamiento de las funciones.
Les adjunto el código para ver si pueden ver el por qué sucede esto.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <vector>
  5. using namespace std;
  6. struct Alumno{
  7. string nom_ape;
  8. float nota1,nota2;
  9. };
  10. istream& operator>>(istream &i, Alumno &A){
  11. getline(i,A.nom_ape);
  12. i>>A.nota1>>A.nota2;
  13. i.ignore();
  14. return i;
  15. }
  16. ostream& operator<<(ostream &o, Alumno &A){
  17. o<<left<<A.nom_ape<<endl;
  18. o<<left<<A.nota1<<setfill(' ')<<setw(2)<<A.nota2<<endl;
  19. return o;
  20. }
  21. //A
  22. void Modificar_archi(Alumno A, vector <Alumno> &D);
  23. //B
  24. void Promedio_archi(vector <Alumno> &D);
  25. int main(int argc, char *argv[]) {
  26. vector<Alumno> V; Alumno A;
  27. ifstream lectura;
  28. lectura.open("Unidad 5 - Nro 2 - Lista.txt");
  29. if(!lectura.is_open()){
  30. cerr<<"Archivo no abierto";
  31. exit(-1);
  32. }
  33. while(lectura>>A){
  34. V.push_back(A);
  35. }
  36. lectura.close();
  37. //A
  38. cout<<"Ingrese el nombre del alumno y su apellido"<<endl;
  39. getline(cin,A.nom_ape);
  40. cin.ignore();
  41. cout<<"Ahora ingrese sus dos notas"<<endl;
  42. cout<<"Nota 1: "; cin>>A.nota1;
  43. cout<<"Nota 2: "; cin>>A.nota2;
  44. Modificar_archi(A,V);
  45. //B
  46. Promedio_archi(V);
  47. return 0;
  48. }
  49. //A
  50. void Modificar_archi(Alumno A, vector <Alumno> &D){
  51. for(size_t i=0;i<D.size();i++) {
  52. if(A.nom_ape==D[i].nom_ape){
  53. D[i].nota1=A.nota1;
  54. D[i].nota2=A.nota2;
  55. }
  56. }
  57. ofstream escritura;
  58. escritura.open("Unidad 5 - Nro 2 - Lista.txt",ios::trunc);
  59. for(size_t i=0;i<D.size();i++) {
  60. escritura<<D[i];
  61. }
  62. escritura.close();
  63. }
  64. //B
  65. void Promedio_archi(vector <Alumno> &D){
  66. float condicion_final; Alumno aux;
  67. ofstream escritura;
  68. escritura.open("Unidad 5 - Nro 2 - Promedio.txt");
  69. if(!escritura.is_open()){
  70. cerr<<"Archivo no abierto"<<endl;
  71. exit (-1);
  72. }
  73. for(size_t i=0;i<D.size();i++) {
  74. condicion_final=(D[i].nota1+D[i].nota2)/2;
  75. escritura<<D[i];
  76. if(condicion_final>=60){
  77. escritura<<"Condicion final: "<<"Aprobado"<<endl;
  78. }else{
  79. escritura<<"Condicion final: "<<"Desaprobado"<<endl;
  80. }
  81. }
  82. escritura.close();
  83. }
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines