martes, 13 de agosto de 2013

Bucles encajados


Aquí ponemos un programa para presentar en pantalla una tabla, en este caso de multiplicar, pero podría ser de cualquier otra cosa. Se hace mediante lo que se llama un par de bucles encajados. Es un problema clásico.

/*El uso de While. Tabla de multiplicar. Contiene 2 bucles anidados */
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
  int i=2,j,k,m,R;
  cout<<endl;
  //**Impresión de cada línea de la tabla**
  while (i<=9){
    j=2;
    while (j<=9){
      cout<<i<<"*"<<j<<" ="<<setw(3)<<right<<i*j<<" | ";
      j++;
    }
    cout<<endl;
    //**Renglón**
    m=0;
    while (m<=7){
      if (m==0) R=8; else R=9;
      for(k=0;k<=R;k++) cout<<"-";
      cout<<"|";
      m++;
    }
    //-----------
    i++;
    cout<<endl;
  }
  //**Termina bucle principal**
  cout<<endl;
  return 0;
}

jueves, 8 de agosto de 2013

Fracción propia y decimal


Este programa convierte una fracción propia - aquella cuyo numerador es menor que el denominador - en una fracción decimal. El sistema no es directo, dividiendo un número por otro como números reales. Ahí está la gracia, sino que se tratan los dos números en todo momento como números enteros. En realidad es lo mismo que haríamos con lápiz y papel y un poco de paciencia, porque saca 20 decimales.

#include<iostream>
#define N 20
using namespace std;
int main()
{
long int dv,ds,q=1,Q,R;
int i,d[N];
for(i=0;i<N;i++) d[i]=0;
cout<<"\tVamos a transformar una fracción propia,\n"
<<"\ten la que el numerador es menor que el denominador,\n"
<<"\ten una decimal\n";
ini:
cout<<"Dame el numerador N de la fracción: ";
cin>>dv;
cout<<"Dame en denominador D de la fracción: ";
cin>>ds;
if(dv>=ds) {cout<<"¡Error, repita, por favor!\n";goto ini;}
//----
while(q*ds<=dv)
q++;
Q=q-1;
R=dv;
for(i=0;i<N;i++){
if(R==0) break; 
else {
dv=R*10;q=1;
while(q*ds<=dv)
q++;Q=q-1;
R=dv-Q*ds;
d[i]=Q;
}
}
cout<<"La fracción decimal es: 0,";
for(i=0;i<N;i++) cout<<d[i];
cout<<endl;
return 0;
}