Muchas gracias. Explicación de 10!
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ú
#include <iostream>
using namespace std;
typedef long int Tarray [100];
void generarConjunto(Tarray ar);
bool esta(Tarray ar, int long n, unsigned pos);
void ordenar(Tarray ar);
void mostrar(Tarray ar);
//---------------------------
int main(){
Tarray ar;
generarConjunto(ar);
cout<<"-----------------------------------"<<endl;
ordenar(ar);
mostrar(ar);
return 0;
}
//---------------------------
void generarConjunto(Tarray ar){ //EL FALLO CREO QUE LO DA ESTA FUNCION, QUE ES LA QUE GENERA LOS VALORES DEL CONJUNTO
unsigned valor=0;
ar[valor]=1;
long int x=ar[valor];
for(unsigned pos=1; pos<100; pos++){
if(!esta(ar, 2*x+1, pos)){
ar[pos]=2*x+1;
cout<<ar[pos]<<endl;
} //end if
++pos;
if(!esta(ar, 3*x+1, pos)){
ar[pos]=3*x+1;
cout<<ar[pos]<<endl;
}//end if
++valor;
x=ar[valor];
}//end for
}
bool esta(Tarray ar, int long n, unsigned pos){
unsigned i=0;
bool e =false;
while(!e and i<pos){
if(ar[i]==n) e=true;
++i;
}//end while
return e;
}
void ordenar(Tarray ar){
int long aux=0;
unsigned comp=0;
do{
for(unsigned pos=0; pos<99; pos++){
if(ar[pos]>ar[pos+1]){
aux=ar[pos];
ar[pos]=ar[pos+1];
ar[pos+1]=aux;
}//end if
}//end for
++comp;
}while(comp<=1000); //podria sustituir esto por una funcion auxiliar que dijera si el array esta ordenado o no.
}
void mostrar(Tarray ar){
for(unsigned pos=0; pos<100; ++pos){
cout<<"->"<<ar[pos]<<endl;
}//end for
}
typedef int Tarray [];
void generarConjunto(Tarray ar); //esta función genera los 100 primeros nºs de un conjunto y los mete en un array.
//Por lo que no se si debería haber definido la dimensión de Tarray como [100]
//-----------------
int main(){
Tarray ar; //¿Cuándo pongo los corchetes? En caso de tener que ponerlos,
//¿debo definir su tamaño, o el tamaño viene dado al inicializar el tipo Tarray?
//He probado a poner corchetes con y sin dimensión y me sale " declaration of 'ar' as multidimensional array must have bounds for all dimensions except the first"
generarConjunto(ar);
return 0;
}
/*
11) Diseñar un programa en C++ para determinar la disponibilidad de una serie de personas
para reunirse algún día de un cierto mes. Para esto, el programa deberá preguntar el
número de días del mes (28, 29, 20 0 31) y el número de personas que deben reunirse; con
estos datos, pedirá, una a una, a cada persona cuáles son los días (de 1 al número de días
del mes) que tiene disponibles y con ayuda de un único array deberá presentar en
pantalla los días disponibles en que coinciden todas las personas.*/
#include <iostream>
using namespace std;
typedef int Tarray [];
void eliminarDia (int noPuede,int dias, Tarray ar);
void siPuede (Tarray ar);
int main(){
Tarray ar={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};
int dias=0, personas=0, noPuede=0;
do{
cout<<"Introduzca el numero de dias del mes: ";
cin>>dias;
}while(dias<28 or dias>31);
if(dias==28){
ar[30]=0;
ar[29]=0;
ar[28]=0;
}
else if (dias==29){
ar[30]=0;
ar[29]=0;
}
else if(dias==30){
ar[30]=0;
}
else;
cout<<"Cuantas personas desea que se reunan?: ";
cin>>personas;
for(unsigned contador=1; contador<=personas; contador++){
while(noPuede!=-1){ //Para pasar a la siguiente persona
cout<<"Persona "<<contador<<" ,dia que no puede reunirse: ";
cin>>noPuede;
eliminarDia(noPuede, dias, ar);
}
noPuede=0;
}
siPuede(ar);
return 0;
}
void eliminarDia (int noPuede,int dias, Tarray ar){
if(noPuede!=-1){
for(unsigned i=0; i<dias; i++){
if(ar[i]==noPuede) ar[i]=0;
}
}
}
void siPuede (Tarray ar){
cout<<"Todos pueden: "<<endl;
for(unsigned i=0; i<31; i++){
if(ar[i]!=0) cout<<ar[i]<<endl;
}
}
void invertir(Tvector vec, unsigned dim){
for(unsigned i=0; i<dim; ++i){
vec[i]=vec[dim-i];
}
}
int mesAdias(int mes, int anno){
int dias=0;
for(unsigned contador=1; contador<=mes; contador++){
if([b]contador[/b]%2==0){
if([b]contador[/b]==2){
if(esbisiesto(anno))dias+=29;
else dias+=28;
}else if (mes==8) dias+=31;
else dias+=30;
}else dias+=31;
}
return dias;
}
int ultimodelmes (int mes, int anno){
if (mes==2){
if(esbisiesto(anno)) return 29;
else return 28;
}else if (mes!=2 and mes%2==0){
if(mes==8) return 31;
else return 30;
}
else return 31;
}
int mesAdias(int mes, int anno){
int dias=0;
for(unsigned contador=1; contador<=mes; contador++){
if(mes%2==0){
if(mes==2){
if(esbisiesto(anno))dias+=29;
else dias+=28;
}else if (mes==8) dias+=31;
else dias+=30;
}else dias+=31;
}
return dias;
}
#include <iostream>
using namespace std;
bool esbisiesto(int anno);
int ultimodelmes (int mes, int anno);
bool fechacorrecta(int dia, int mes, int anno);
void avanzar(int& d, int& m, int& a);
void retroceder(int& d, int& m, int& a);
bool esAnterior(int d1,int m1,int a1,int d2,int m2,int a2);
int diferencia(int d1,int m1,int a1,int d2,int m2,int a2);
int mesAdias (int mes, int anno);
int annoAdias (int anno);
//-------------------
int main(){
int dia, mes, anno;
int dia2, mes2, anno2;
do{
cout<<"Introduce una fecha para saber si es correcta (dia, mes, año): "<<endl;
cout<<"Dia: ";
cin>>dia;
cout<<"Mes: ";
cin>>mes;
cout<<"año: ";
cin>>anno;
if (fechacorrecta(dia, mes, anno)) cout<<"Ha introducido una fecha correcta."<<endl;
else cout<<"Fecha incorrecta."<<endl;
}while(!fechacorrecta(dia, mes, anno));
int menu=999;
while(menu!=0){
cout<<endl
<<"###########################################################"<<endl
<<"1.Avanzar un dia la fecha."<<endl
<<"2.Retroceder un dia la fecha."<<endl
<<"3.Comparar fecha introducida con otra a introducir."<<endl
<<"4.Calcular la diferencia en dias de la fechas introducidas."<<endl
<<"0.Salir"<<endl
<<"-----------------------------------------------------------"<<endl
<<endl;
cout<<"Introduzca una opcion valida: ";
cin>>menu;
switch (menu){
case 0:
break;
case 1:
avanzar(dia, mes, anno);
cout<<dia<<"/"<<mes<<"/"<<anno<<endl;
break;
case 2:
retroceder(dia, mes, anno);
cout<<dia<<"/"<<mes<<"/"<<anno<<endl;
break;
case 3:
do{
cout<<"Introduce otra fecha para comparar: "<<endl;
cout<<"Dia: ";
cin>>dia2;
cout<<"Mes: ";
cin>>mes2;
cout<<"año: ";
cin>>anno2;
}while(!fechacorrecta(dia2, mes2, anno2));
if(esAnterior(dia, mes, anno, dia2, mes2, anno2)) cout<<dia<<"/"<<mes<<"/"<<anno<<" es anterior a "<<dia2<<"/"<<mes2<<"/"<<anno2<<endl;
else cout<<dia<<"/"<<mes<<"/"<<anno<<" NO ES anterior a "<<dia2<<"/"<<mes2<<"/"<<anno2<<endl;
break;
case 4:
do{
cout<<"Introduce otra fecha para comparar: "<<endl;
cout<<"Dia: ";
cin>>dia2;
cout<<"Mes: ";
cin>>mes2;
cout<<"año: ";
cin>>anno2;
}while(!fechacorrecta(dia2, mes2, anno2));
cout<<diferencia(dia, mes, anno, dia2, mes2, anno2);
break;
}
}
return 0;
}
//-------------------
bool esbisiesto(int anno){
if(anno>1583){
if(anno%4==0){
if((anno%100==0) and (anno%400==0)){
return true;
}else return true;
}else return false;
}else return false;
}
int ultimodelmes (int mes, int anno){
if (mes==2){
if(esbisiesto(anno)) return 29;
else return 28;
}else if (mes!=2 and mes%2==0) return 30;
else return 31;
}
bool fechacorrecta(int dia, int mes, int anno){
if(dia>31 or mes>12 or anno<1583){
return false;
}else{
if(dia>ultimodelmes(mes, anno)) return false;
else return true;
}
}
void avanzar(int& d, int& m, int& a){
++d;
if(d>ultimodelmes(m,a)) ++m;
if(m>12){
++a;
m=1;
d=1;
}
}
void retroceder(int& d, int& m, int& a){
--d;
if(d<1){
if(m>1){
--m;
d=ultimodelmes(m, a);
}else{
m=12;
--a;
d=ultimodelmes(m, a);
}
}
}
bool esAnterior(int d1,int m1,int a1,int d2,int m2,int a2){
if(a1>a2) return false;
else if (a1<a2) return true;
else{
if(m1>m2) return false;
else if(m1<m2) return true;
else {
if(d1>d2) return false;
else if(d1<d2) return true;
else cout<<"LAS DOS FECHAS SON LA MISMA"<<endl;
}
}
}
int mesAdias(int mes, int anno){
int dias=0;
for(unsigned contador=1; contador<=mes; contador++){
if(mes%2==0){
if(mes==2){
if(esbisiesto(anno))dias+=29;
else dias+=28;
}else dias+=30;
}else dias+=31;
}
return dias;
}
int annoAdias(int anno){
int dias=0;
for(unsigned contador=1; contador<= anno; contador++){
if(esbisiesto(anno)) dias+=366;
else dias+=365;
}
return dias;
}
int diferencia(int d1,int m1,int a1,int d2,int m2,int a2){
int suma1=0, suma2=0;
suma1=d1+mesAdias(m1, a1)+annoAdias(a1);
suma2=d2+mesAdias(m2, a2)+annoAdias(a2);
if (suma1<=suma2) return suma2-suma1;
else return suma1-suma2;
}