Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: iAmChapin_ en 23 Agosto 2015, 20:10 PM

Título: Ejercicios
Publicado por: iAmChapin_ en 23 Agosto 2015, 20:10 PM
Hola! He estado navegando por este foro y pues yo estoy iniciando con lo de la programación en C y pues apenas se del tema. Pasa que me encargaron hacer unos ejercicios de programacion pero no se me ocurre una forma de hacerlos debido a como está descrito, aunque creo que las funciones para estos ejercicios que tengo que usar son for o quizas while por como están descritos, se los menciono a continuación:

(http://i57.tinypic.com/6rlpxk.png)

Me doy cuenta que son casi los mismos, solo que al parecer tienen otras operaciones y creo que estan algo asi como a la inversa al parecer. Si sirve de algo, los ejercicios tengo que realizarlos en Borland (porque estoy empezando).
Espero puedan darme una mano o una pista de cómo realizarlo, se los agradecería mucho!!
Título: Re: Ejercicios
Publicado por: engel lex en 23 Agosto 2015, 20:15 PM
el primero sería en pseudo codigo algo como

resultado = 0
mientras(n mayor que 0){
  resultado = resultado mas (1 entre n)
  disminuir n
}


el segundo como dices, es prácticamente idéntico, solo que n no se resta, sino que usas otro numero

si puedes en lo que avances muestra tus progresos a ver que tal vas ;)

Saludos!
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 23 Agosto 2015, 21:34 PM
Incluire el codigo que tengo programando, mas o menos le entendí y esto hice con la formación y conocimientos de C++ que poseo, lo hice utilizando Borland
#include<conio.h>
#include <iostream.h>

int N;
float resultado = 0;

void main(){

   cout << "Ingrese un valor para N: ";
   cin >> N;
   cout << endl << endl;

   //proceso
   while (N>0)
   {
    resultado = resultado+(1/N);
      N = N--;
      cout << "Resultado: " << resultado;
   }

   getch();

}


Lo ejecute pero me salieron varios mensajes en pantala de Resultado con el numero cero, como unos 20 Resultados y todos con numero 0, pero al final me tiro un numero 1  :(
Título: Re: Ejercicios
Publicado por: engel lex en 23 Agosto 2015, 21:47 PM
vamos por partes

1)

esto es un error

N = N--;

N-- va a tomar N y despues de lo que haga le restará 1... allí creas un bug, ya que N es igual a viejo N, a N le restas 1, luego le asignas el viejo N a N... y bueno N termina sin cambiar...

2)
procura no usar conio...
lee esto
https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)


3)
Citar#include <iostream.h>

ls librerías standard C++ no llevan .h
es simplemente
Citar#include <iostream>

4)
usas las funciones de iostream fuera de su espacio de trabajo, antes de main debes agregar la linea
using namespace std;

5)
no declares variables globales (fuera del main) sin necesidad

6)
C++ cuando hace operaciones retorna el resultado del mismo tipo de los operadores, es decir 1 es entero, 1/2, es un entero entre un entero, así que el resultado será 0 (no hay redondeo, sino truncamiento), debes hacer (1.0/N), ya que 1.0 es float y el resultado será retornado como tal

7)
"main" siempre debe ser tipo int y debe tener al final siempre un return, normalmente 0

Código (cpp) [Seleccionar]
int main(){
//todo lo que se haga

return 0;
}



es increible que con todo eso te haya compilado... D:
Título: Re: Ejercicios
Publicado por: Mientras en 23 Agosto 2015, 22:34 PM
En el caso del denominador verás que si es par se resta la fracción, y si es impar se suma. Entonces puedes usar % para sacar el resto y poder determinar si es par o impar.
Por ejemplo:

si n%2==1 entonces es impar
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 23 Agosto 2015, 22:44 PM
Te comparto el código cambiado con todo lo que me dijiste:

#include <iostream>
#include <conio>
using namespace std;

int main(){

cout << "Ingrese un valor para N: ";
   cin >> N;
   cout << endl << endl;

   int contador;
   int N;
   float resultado = 0;

   //proceso
   while (N>0)
   {

    resultado = resultado+(1.0/N);
      contador = N--;
      cout << "Resultado: " << resultado;
   }

   getch();
   return 0;

}


A la hora de compilarlo me indica el error Namespace name expected, indicando la linea de error de using namespace std, y pues utilizo el conio porque se supone que esa libreria me enseñaron para utilizar getch(), que es un teclazo para que se termine el programa, podrias enseñarme otra forma de utilizar getch() o una funcion parecida porfavor?
Título: Re: Ejercicios
Publicado por: iUDEX en 23 Agosto 2015, 22:53 PM
Puedes probar con:

Código (cpp) [Seleccionar]
cin.get();
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 23 Agosto 2015, 23:11 PM
Ensamblando todas las respuestas, el código me queda así:

#include <iostream>
using namespace std;


int main(){

int N;

cout << "Ingrese un valor para N: ";
        cin >> N;
        cout << endl << endl;

   int contador;
   float resultado = 0;
   //proceso
   while (N>0)
   {
      if (N%1==1)
      {
    resultado = resultado+(1.0/N);
      contador = N--;
      cout << "Resultado: " << resultado;
      }
      else
      {
      resultado = resultado-(1.0/N);
      contador = N--;
      cout << "Resultado: " << resultado;
      }
   }

   cin.get();
   return 0;

}


Y me da con los siguientes errores o avisos:

(http://i62.tinypic.com/m9y3cy.png)

Lamento que lidien con esto, y la verdad es tengo muchas ganas de entrarle al tema porque me interesa!  :-\
Título: Re: Ejercicios
Publicado por: engel lex en 23 Agosto 2015, 23:46 PM
que rayos es N%1==1? eso está mal para cualquier caso

N-- no necesita comparación es simplemente N-- y listo...
Título: Re: Ejercicios
Publicado por: Mientras en 24 Agosto 2015, 00:14 AM
Dice que la condición siempre es falsa " N%1==1 "y tiene razón. Me había equivocado, es N%2==1  

Si quieres hacer N = N - 1  lo otra forma es  N--

Si vas a poner
N--;
cout << "Resultado: " << resultado;

dentro del IF en caso sea cierto y dentro del caso sea falso, lo más adecuado es que lo pongas fuera del IF.
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 24 Agosto 2015, 00:34 AM
Excelente, gracias a los dos! Ya lo único que encuentra mal el compilador es que sigo usando "using namespace std", y el error que indica es: "Namespace name expected"

Tengo que remover esa función para que siga funcionando, y si me ejecuta el programa cuando lo remuevo, no habrá ningun problema? Ya que el moderador me indicó eso mismo de que tengo que insertar esa función pero me indica el error que ya mencioné y que aparece en la imagen de antes que subí. También debo dar las gracias por tomarse el tiempo para contestar, enserio se los agradezco!  :xD
Título: Re: Ejercicios
Publicado por: Mientras en 24 Agosto 2015, 01:02 AM
Bueno la verdad nunca he utilizado borland. Yo tengo Codeblocks + mingw.
Sabes, hay otra forma de hacerlo.

Código (cpp) [Seleccionar]
int n;
   int i = 1;
   double suma = 0;
   const double numerador = 1.0;
   bool band = false;

   cout<<"Ingresa N: ";
   cin>>n;

   while(i <= n){
       if( band == false){
           suma = suma + (numerador/i);
           band = true;
       }
       else{
           suma = suma - (numerador/i);
           band = false;
       }
       i++;
   }

   cout<<"Suma: "<< suma <<endl;


En orden de izquierda a derecha ( 1 - + - ) sabemos que siempre va a iniciar por sumar 1, luego resta, luego suma, luego resta y así sucesivamente. Entonces declaramos un boleano band = false, luego cuando haga la primera comprobación será false == false , esto dará true, entonces entra y suma, luego cambia el valor de bandera a true, para que en la siguiente comprobación valla por el "else" y así sucesivamente.
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 24 Agosto 2015, 02:47 AM
No había pensado incluir el if dentro del while y no sabia que se podía  ;-)

Estoy un poco confundido, en si veo que es un código muchísimo mejor que el mío jeje, pero tengo una duda, ese código que colocaste es para el ejercicio a o es para el ejercicio b? Ya que son casi iguales como lo mencionó el moderador!

De paso, también te agradezco bastante por la ayuda!  ;-)
Título: Re: Ejercicios
Publicado por: Mientras en 24 Agosto 2015, 04:01 AM
Es también para la primera. Los dos formas funcionan.
La segunda puedes ir viendo de esta forma:

n=1   1/(1-0)

n=2   1/(2-0) - 2/(2-1)

n=3   1/(3-0) - 2/(3-1) + 3/(3-2)

por ejemplo en caso n=3
tiene una forma de i=1 hasta i=n en el numerador, y en el denominador van n-0, n-1, n-2, y justo estos numeros (0,1,2) son los numeradores decrementados en 1, por que lo que si en el numerador va X, abajo va 3-(X-1). Es una ídea, no lo he probado.  ;)
Título: Re: Ejercicios
Publicado por: iAmChapin_ en 24 Agosto 2015, 22:08 PM
Excelente, gracias por la ayuda!  ;-)
Ahora mismo estoy lidiando con otro ejercicio, no se si puedo compartir mis dudas con ustedes o debo de crear otro tema para eso?

Perdonen la ignorancia  :xD