Dev - C++ - ayuda con ejercicio

 
Vista:

ayuda con ejercicio

Publicado por roberto (4 intervenciones) el 13/01/2015 04:02:43
Hola buenas, soy principiante y tengo un lio bastente importante en la cabeza.
tengo en un header un tipo estructurado.
1
2
3
4
typedef struct {
       char tipoapuesta;
       int numeroapuesta;
       int cantidadapuesta;}Apuesta;

y en el ejercicion no pide que en el programa compruebe si lo que introducimos es par o impar, y tengo mil errores, este seria mi codigo.
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
#include <iostream>
#include<string.h>
#include "apuesta.h"
using namespace std;
 
int Compruebaapuesta(){
    Apuesta opcion1, opcion2, opcionfinal;
   opcion1.tipoapuesta= "par";
   opcion2.tipoapuesta="impar";
   opcionfinal.tipoapuesta;
   cout<<"opcion?"
    cin >>opcionfinal;
    if(strcmp(opcion1, opcionfinal)==0){
    cout <<"par";
 }
 else{
  if(strcmp(opcion2, opcionfinal)==0){
   cout <<"impar";
  }
  else{
   cout <<"no corresponde a ninguna opcion";
  }
 }
 
 system("PAUSe");
 return 0;
}
    system ("PAUSE");
    };

los errores al compilar son:

Compilador: Default compiler
Building Makefile: "C:\Users\programador\Desktop\ultimo\Makefile.win"
Ejecutando make...
make.exe -f "C:\Users\programador\Desktop\ultimo\Makefile.win" all
g++.exe -c apuesta.cpp -o apuesta.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -ansi -traditional-cpp

apuesta.cpp: In function `int Compruebaapuesta()':
apuesta.cpp:8: error: invalid conversion from `const char*' to `char'

apuesta.cpp:9: error: invalid conversion from `const char*' to `char'

apuesta.cpp:13: error: cannot convert `Apuesta' to `const char*' for argument `1' to `int strcmp(const char*, const char*)'

apuesta.cpp:17: error: cannot convert `Apuesta' to `const char*' for argument `1' to `int strcmp(const char*, const char*)'

apuesta.cpp: At global scope:
apuesta.cpp:28: error: expected constructor, destructor, or type conversion before '(' token

apuesta.cpp:28: error: expected `,' or `;' before '(' token

apuesta.cpp:29: error: expected declaration before '}' token

make.exe: *** [apuesta.o] Error 1

Ejecución Terminada
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con ejercicio

Publicado por vangodp (287 intervenciones) el 13/01/2015 06:20:35
En la estructura:
typedef struct {
char tipoapuesta;
int numeroapuesta;
int cantidadapuesta;}Apuesta;

tienes a char tipoapuesta declarado sin embargo char tipoapuesta es para guardar un simples char y no un string.

Para poder guardar un texto lo correcto es que tipoapuesta sea declarado como char tipoapuesta[100] que quiere decir que tienes espacio para 100 letras.

También puedes usar string si es en C++.

Entonces la estructura seria:
typedef struct {
char tipoapuesta[100];
int numeroapuesta;
int cantidadapuesta;}Apuesta;

Como se trata de C string para inicializar usas la función strcpy() luego después de declarar el objeto.
Estos datos los puede trabajar así:
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
#include <iostream>
#include <cstring>  //necesario para usar strcpy() y strcmp() entre otras mas funciones para C_strings
using namespace std;
 
struct Apuesta{
char tipoapuesta[100];  //esto reserva espacio para 100 chars.
int numeroapuesta;
int cantidadapuesta;
};
 
int main (){
    //Al inicializar el objeto a la misma hora de crear se puede hacer esto:
    Apuesta opcion1 = { {"Se puede inicializar asi"}, 0, 0 };
 
    //después de creado el objeto debes usar strcpy de esta forma ya que no puedes hacer esto: opcion1.tipoapuesta = "IMPOSIBLE!";
    strcpy(opcion1.tipoapuesta, "Pero fuera de la inicializacion se usa strcpy()" );
 
    //otra forma es hacer esto:
    string frase = "Forma de copiar Cpp strings a C_string";
 
    //como ves al ser frase un string que a la vez es una clase, dicha clase string tiene una funcion llamada c_str() que convierte un string de C++ en C_string. 
    strcpy(opcion1.tipoapuesta, frase.c_str() );
 
 
    //formas de comparar:
 
    if ( opcion1.tipoapuesta == frase.c_str() ){}
    if ( opcion1.tipoapuesta == opcion1.tipoapuesta ){} //si son ambas c_string   
    if ( opcion1.tipoapuesta == frase ){}
    if ( strcpy( opcion1.tipoapuesta, frase.c_str() ) ){}  // strcpy solo compara c_strings y no strings de C++. Necesitas poner c_str() si vas a vomparar un string de C++ con un C_string.
 
    //Seguro hay mas formas pero no se me viene ahora mismo a la cabeza jaja
    cin.ignore();
    return 0;
}

También puedes hacer un puntero apuntar a una cadena literal constante:

const char *constanteLiteral = "Esto es una cadena constante literal constante"; http://msdn.microsoft.com/es-es/library/69ze775t.aspx
Esto es una mala practica en C++, se desaconseja su uso ya que al usar literales no especificas a el tamaño de la memoria a reservar, no puedes hacer algo como esto constanteLiteral[0] = 'r'; Eso emitirá error ya que es constante.
Otra cosa a destacar es que si guarda esa estructura en un archivo la literal no se guardaria ya que dentro de la estructura lo que tienes es un puntero y no memoria reservada. El puntero apunta a otra dirección de la memoria que no se incluiría en la estructura, lo mejor para las estructuras es C-String.

Si aun tienes dudas sigue preguntando XD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con ejercicio

Publicado por roberto (4 intervenciones) el 13/01/2015 21:51:17
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
#include <iostream>
#include<string.h>
#include "apuesta.h"
using namespace std;
 
char compruebapuesta(){
   cout <<"hola";
   system("PAUSE");
   // Apuesta opcion1, opcion2, opcionfinal;
 
char opcionpar[4]="par";
char opcionimpar[6]="impar";
char opcionfinal[6];
cout<<"opcion?";
cin >>opcionfinal;
    if(strcmp(opcionpar, opcionfinal)==0){
    cout <<"par";
                                          }
                                          else{
                                          if(strcmp(opcionimpar, opcionfinal)==0){
                                          cout <<"impar";
                                          }
    else{
   cout <<"no corresponde a ninguna opcion";
  }
 }
 
 system("PAUSE");
 return 0;
}}

he cambiado el codigo sin el header.

y tengo un nuevo error expected declaration before } al final del codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con ejercicio

Publicado por vangodp (287 intervenciones) el 14/01/2015 01:00:10
Te sobar una '}' al final, el problema es que si abres una llave debes cerrar y por eso chilla.
El otro error es que el nombre de la función principal siempre debe llamase main. Eso es así por que es la primera en ser invocada automáticamente por el sistema, entonces siempre debe llamar igual, o del contrario el sistema no sabría cual llamar primero. Las demás pueden llamarse como quieras, ya que serás tú quien se encargue de llamarlas por sus nombres correctos. Piensa...¿Si tu fuera el sistema, como llamarías a una función, si no sabes cual es la que tiene que debe llamarse primero? Simplemente, la primera es main(), el sistema se encarga de llamarla por ti, luego las demás las llamas desde main, pero como a esas le diste tú el nombre, se supone que sabes a cual debes llamar en cada momento, tome como si el sistema fuera una función existente antes de main, y que a su vez esta invoca a main (Principal), luego desde main se encargas tú de llamar a las demás, en el orden que quieras, y por los nombres que te apetezca.
De eso se trata la programación, funciones que llaman a funciones, no se hacen a casualidad sino a consecuencia. Para que te quede claro, una función es un programa. En C/C++ se dice que main es un programa, y que las demás funciones son "subprogramas", ya que se encuentran por debajo de main. Una función o programa es un conjunto de sentencias que resuelven un problema dado.

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
#include <iostream>
#include <ctring>
using namespace std;
 
int main() {  //main es la primera ...Siempre debe existir
    cout << "hola" << endl;
    system ( "PAUSE>nul" );
    // Apuesta opcion1, opcion2, opcionfinal;
 
    char opcionpar[4] = "par";
    char opcionimpar[6] = "impar";
    char opcionfinal[6];
    cout << "opcion?: ";
    cin >> opcionfinal;
 
    if ( strcmp ( opcionpar, opcionfinal ) == 0 ) {
 
        cout << "Es: par\n" << endl;
 
    } else {
 
        if ( strcmp ( opcionimpar, opcionfinal ) == 0 ) {
            cout << "Es: impar\n"<<endl;
        } else {
            cout << "No corresponde a ninguna opcion\n" << endl;
        }
 
    }
 
    system ( "PAUSE" );
    return 0;
} //} <-Te sobra

suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con ejercicio

Publicado por PEDRO (1 intervención) el 01/05/2019 03:26:59
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
#include <iostream>
int c,l,a,b,h,op;
using namespace std;
main(){
	cout<<"\t\t\t\******CALCULADOR DE AREAS PLANAS*****\n ";
	cout<<"\n\t\t\t<1> CALCULAR EL AREA DEL CUADRADO\n";
	cout<<"\n\t\t\t<2> CALCULAR EL AREA DEL RECTANGULO\n";
	cout<<"\n\t\t\t<3> CALCULAR EL AREA DEL TRIANGULO\n";
	cout<<"\n\t\t\t<4> CALCULAR EL AREA DEL PARALELOGRAMO\n";
	cout<<"\n\t\t\t<5> CALCULAR EL AREA DEL TRAPECIO\n";
	cout<<"\n\t\t\t<6> CALCULAR EL AREA DE UN POLIGONO REGULAR\n";
		cout<<"DIGITE LA OPCION:";cin>>a;
	switch (op){
		case 1: cout<<"digite lado del cuadrado"; cin>>l;
		         a=l*l;
				cout<<"EL AREA DEL CUADRADO ES:"<<a;
		         break;
		case 2: cout<<"digite la base";cin>>b
		    cout<<"digite la altura";cin>>h
		          a=b*h;
		cout<<"EL AREA DEL RECTANGULO ES:"<<a;
		        break;
		case 3: cout<<"digite la base";cin>>b
		         cout<<"digite la altura";cin>>h
		          a=b*h/2;
		cout<<"EL AREA DEL TRIANGULO ES:"<<a;
		        break;
		case 4: cout<<"digite la base"; cin>>b
		        cout<<"digite la altura";cin>>a
		        a=b*h;
		cout<<"EL AREA DEL PARALELOGRAMO ES:"<<a;
		        break;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar