Menú

Mostrar Mensajes

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ú

Mensajes - leosansan

#741
Creo que el mensaje " undefined reference to `NombreFuncion()'" hace referencia a que dicha función no está, no existe, no la has puesto aún.

Con el "trozo" de código que has puesto a m´me sale el error:


CitarC:\Users\Administrador\Documents\C\Nueva carpeta\Untitled23.o:Untitled23.c|| undefined reference to `Bajas'|
C:\Users\Administrador\Documents\C\Nueva carpeta\Untitled23.o:Untitled23.c|| undefined reference to `Consultas'|
C:\Users\Administrador\Documents\C\Nueva carpeta\Untitled23.o:Untitled23.c|| undefined reference to `Modificaciones'|
C:\Users\Administrador\Documents\C\Nueva carpeta\Untitled23.o:Untitled23.c|| undefined reference to `Reporte'|
........................................................


ya que no están en el código, cosa que no sucede con Altas, que sí está y no sale en el error.

Saluditos!. .... ...
#742
Programación C/C++ / Re: Derivadas en c++
29 Mayo 2013, 08:07 AM
Cita de: socram7 en 28 Mayo 2013, 20:24 PM
Tengo una duda . como le hago para que acepte numeros fraccionarios ya que esta opción si no la puedo agregar... Me podrian ayudar o decirme como hacerle para que acepte numeros fraccionarios tanto en el exponente como en el coeficiente numerico?? Desde ya muchas gracias

Para empezar no plantees sólo la duda de como ingresar los números fraccionarios. No te costaba nada comentar  que el código sencillamente no compilaba, debido  a tener mal escrita una librería y no poder usar las instrucciones cout y cin, mira por qué y por otra te sobra la librería math, además de lo indicado por pacoperico.

Aunque funciona bien te aconsejaría echarle un vistazo a cómo usar números fraccionarios a partir de una estructura, en el buscador del foro puedes encontrar referencias a ello y si no a usar una Clase Fracción. Te dejo eso como tarea, aunque para un código tan cortito como el que planteas me conformaría con lo siguiente;

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#define N   5
using namespace std;

int main(){
   int i;
   float total[N],numero1[N],numero2[N],exp1[N],exp2[N];
   char sign[N],c;
   for(i=0;i<N;i++)
   {
       do{
           cout<<"Ingrese el signo del "<<" x"<<"^"<<i<<": ";
           cin>>sign[i];
       }while((sign[i]!='+')&&(sign[i]!='-'));
              cout<<"Ingrese el NUMERADOR del coeficiente de: "<<" x"<<"^"<<i<<": ";
       cin>>numero1[i];
       cout<<"Ingrese el DENOMINADOR del coeficiente de: "<<" x"<<"^"<<i<<": ";
       cin>>numero2[i];
       cout<<"Ingrese el NUMERADOR del EXPONENTE del coeficiente de: "<<" x"<<"^"<<i<<": ";
       cin>>exp1[i];
       cout<<"Ingrese el DENOMINADOR del EXPONENTE del coeficiente de: "<<" x"<<"^"<<i<<": ";
       cin>>exp2[i];
       system("cls");
   }
   for(i=0;i<N;i++)
       total[i]=numero1[i]/numero2[i]*(exp1[i]/exp2[i]);
   cout<<"los numeros son;"<<endl;
   for(i=0;i<=N-1;i++)
       cout<<total[i]<<"x^"<<(exp1[i]/exp2[i])-1<<"+";
   for(i=N-1;i<N;i++)
     cout<<total[i]<<"x^"<<(exp1[i]/exp2[i])-1;
   cout<<endl;
   system("pause");
}


Y si no quieres tanto cout y cin tienes esta otra forma, donde se ingresan uno y luego el otro:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#define N   5
using namespace std;

int main(){
   int i;
   float total[N],numero1[N],numero2[N],exp1[N],exp2[N];
   char sign[N],c;
   for(i=0;i<N;i++)
   {
       do{
           cout<<"Ingrese el signo del "<<" x"<<"^"<<i<<": ";
           cin>>sign[i];
       }while((sign[i]!='+')&&(sign[i]!='-'));
       cout<<"Ingrese el numerador Y denominador del coeficiente de: "<<" x"<<"^"<<i<<": ";
       cin>>numero1[i]>>numero2[i];
       cout<<"Ingrese el numerador Y denominador del exponente de: "<<" x"<<"^"<<i<<": ";
       cin>>exp1[i]>>exp2[i];
       system("cls");
   }
   for(i=0;i<N;i++)
       total[i]=numero1[i]/numero2[i]*(exp1[i]/exp2[i]);
   cout<<"los numeros son;"<<endl;
   for(i=0;i<=N-1;i++)
       cout<<total[i]<<"x^"<<(exp1[i]/exp2[i])-1<<"+";
   for(i=N-1;i<N;i++)
     cout<<total[i]<<"x^"<<(exp1[i]/exp2[i])-1;
   cout<<endl;
   system("pause");
}



Saluditos! ... ...
#743
Cita de: Belial & Grimoire en 22 Mayo 2013, 23:08 PM

alguien sabria otra forma de hacer esto, o como podria mejorarlo?


Creo  que simplemente es esto:

Código (cpp) [Seleccionar]

3,9 MB* 1024 KB/MB = 3993,6 KB

3993,6 KB * 8 kb/kB = 31948,8 kb en total

31948,8 kb / 128 kb/s = 249,6 segundos / 60 S= 4,16 MIN = 4 MIN 9,6 SEG


O sea los 4.10, redondeando, que te marcaba.

Saluditos!. .... ..
#744
Cita de: edr89 en 27 Mayo 2013, 19:43 PM
Entendido, para imprimir numeros consecutivos, del 1 al 5 etc, debo usar
for (i=0;i<5;i++)
printf("%d.\n",++j);

donde j vale 0 y se imprime 1,2,3,4,5.

Pero no te compliques la vida, si sólo se trata de imprimir, otra cosa sería que estuviésemos rellenando un array, puedes hacer:

Código (cpp) [Seleccionar]
for (i=1;i<6;i++)
.......


Citar

Para que imprima el incremento en la misma instruccion uso ++j, para imprimir en el incremento en la siguiente instruccion uso j++.


O:K

Citar
hay algo que no entiendo, en el ejemplo trivial se imprime:al principio pense que se iba a imprimir 15 veces(5 del bucle por 3printfs), pero los incrementos en printf se guardan en la variable, entonces el bucle no corre 5 veces porque el valor de 5 se alcanza antes.

Tu mismo lo has dicho, al incrementar la i se acaba el bucle aparentemente antes de tiempo, porque en realidad no es que el bucle "tenga" que repetirse cinco veces, sino que se repite hasta que se cumple la condición de lo que viene después del primer punto y coma.

Citar
Si regresamos al codigo de notas el incremento en j trabaja diferente, lo trato de asociar asi:
for(j=0;j<5;j++) //Bucle para las 5 calificaciones
      {
          printf("Teclea la nota %d del alumno %d:",j+1,i+1);
          do{
              scanf(" %f",&nota);
              if(nota>10 || nota<0)
              {
                  printf("La nota ha de ser entre 0 y 10.\n");
                  printf("Vuelva a teclear la nota %d  del alumno %d:",j+1,i+1);
                  scanf(" %f,",&nota);
              }
          }while(nota>10 || nota<0);
          sum_notas+=nota;
      }

1. Valor inicial de j = 0
2. en el primer printf j=1
3. tercer printf j = 2?

Fíijate que no he usado ni pre ni post incremento, sino el valor de la variable más uno y como los dos printf están en el cuerpo del for j no varía su valor, es decir:

1. Valor inicial de j = 0
2. en el primer printf:  j+1=1
3. en el segundo : j +1=1

Citar

Respecto a definir el tipo de funcion, mi duda es si da error cuando main() no es de algun tipo, en este caso el programa corre, da los promedios por alumno, el general, no parece haber fallas, si defino int main() y termino con return 0;

Qué sucede con el programa?
En general como puedo saber que tal o cual funcion debe ser de algun tipo y regresar algun valor.

Respecto al tipo de función de main es que está establecido, por lo que yo tengo entendido, como int, lo cual no quiere decir que si no pones int ni return 0 te pueda compilar bien. Pero eso ya dependerá del compilador, puedes encontrarte con alguno que no te permita compilar sin esas condiciones.

Y respecto al tipo de función es el programador el que al construir la función sabe si va a devolver un int un float,.... o nada, y en función de ello le pone el tipo. Es decir tú cuando construyes la función debes saber de antemano qué va a hacer y que va a devolver y en función de eso pones el tipo a la función.


Saluditos. .... ...
#745
Cita de: edr89 en 27 Mayo 2013, 00:40 AM
Eso me queda claro pero cuando utilizo printf y hago referencia a la variable como i++, no imprime el incremento, por eso utilice i+1, a veces en los bucles tampoco me respetaba i++ y no incrementaba. También utilizo i+=1 porque no me da problemas al correr el programa

Porqué? :huh:


La explicación es sencilla .La forma i++ es un incremento a posteriori, es decir se incrementará el valor de la variable en la siguiente instrucción donde aparezca i
Entiendo que si divido el código en distintas funciones, el bloque de promedio individual, por ejemplo,  debe regresar el valor de las operaciones realizadas, entonces se regresa el valor de X para que en la función main() se haga uso del dato. Lo mismo le sucede a ++i, que representa un incremento de una unidad a anterior'.

Para que lo veas con un ejemplo.El siguiente código:


Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{

   int i;
   for (i=0;i<5;i++)
   {
       printf ("i = %d   ",i);
       printf ("i++= %d   ",i++);
       printf ("++i= %d   ",++i);
   }
   return 0;
}


tiene como salida:

Código (cpp) [Seleccionar]

i = 0   i++= 0   ++i= 2   i = 3   i++= 3   ++i= 5


¿Qué ha pasado?:
* en el for toma el valor inicial cero y empiezan actuar las instrucciones del cuerpo

* El primer printf imprime i, que es cero.

* El segundo printf se encuentra con i++ por lo que no incrementa i en ese momento, imprime por lo tanto el valor de i que sigue siendo cero, pero ya para la siguiente instrucción se incrementará i en una unidad.

* El tercer printf se encuentra con ++i, por lo que imprimirá 2, una unidad de incremento que viene del anterior printf debido al i++ y otra unidad debida al pre incremento del ++i de ese tercer printf.

* Como se acabaron las instrucciones actúa el for incrementando la i, que pasará de 2 a 3.

* Vuelve a entrar en el cuerpo del if y el primer printf imprime i que será 3.

* Actúa el segundo printf, que como post incrementa, en ese momento no varía el valor de i e imprime 3.

*Y por último actúa el tercer printf que con el incremento del anterior printf y el pre incremento del suyo hace que i valga 5, que es lo que imprime.


Cita de: edr89 en 27 Mayo 2013, 00:40 AM]
promedioind(int x)
{
return x;
}


Como la función retorna un valor int debe ser también de tipo int, es decir lo correcto es poner:


int promedioind(int x)
{
   return x;
}

Cita de: edr89 en 27 Mayo 2013, 00:40 AM]
En el caso de mi código, qué pasa si no regreso valor?,


En el caso de que no retorna nada es de tipo void, Por ejemplo, la siguiente función se limita a imprimir sin retornar ningún valor, por eso se declara como tipo void:

Código (cpp) [Seleccionar]

void imprimir (int x)
{
   printf ("%d",x);
}


Espero haberme explicado con meridiana claridad al menos. :-)

Saluditos!. ... ..
#746
Cita de: CCross en 26 Mayo 2013, 18:56 PM
leosansan me gusto el metodo que usas para pasar de binario a decimal pero no
comprendo en que consiste esta operación.

Código (cpp) [Seleccionar]
(numero[j]-'0')

Que hace esto exactamente ya que si multiplicas un número por cero el resultado es
cero
por que no directamente pero luego me di cuenta que al quitarle eso obtengo
resultados incoherentes.


La explicación es que numero[j] está declarado como char y para pasarlo a entero le tengo que restar su valor en ascii, que sería restarle 48 o su equivalente que es '0'. Ese es  todo el misterio que encierra esa operación, convertir un caracter ascii a int. Si lo que hubiese necesitado hubiera sido convertir el array numero, declarado como char, a int hubiese podido utilizar una función como atoi u otra de la clase string, que habría sido otra forma de haber declarado a la variable numero en lugar de char, y posiblemente más cómoda. En realidad salió el código que salió porque no me dí cuenta y lo hice en C, pero al ir a postearlo me fijé que estaba en C++ e hice una conversión "rápida", de ahí mi comentario de que es muy mejorable.

Espero haberme explicado meridianamente bien, si no es que fui torpe  ;)

Saluditos!. ... .
#747
Cita de: Don Olivera en 26 Mayo 2013, 03:25 AM
Hola amigos, bueno el titulo lo dice todo, hice un programa que puede leer un numero binario de hasta 10 caracteres y  los pasa a base 10.

Suponiendo que no vamos a hacer uso de funciones ya implementadas en C/C++ que lo harían de forma automática, no sé dónde me he perdido, pero pedazo de código para hacer eso me parece, cuanto menos, excesivo. No he pillado el por qué de hacer un proyecto con tres ficheros que te cambas. Creo que sinceramente me he perdido algo en la explicación o en el objetivo.

Porque si lo que vamos a hacer es un código que pase a decimal números en binario de no más de diez caracteres, a mí con lo que sigue me sobra, y aún así sé que es muy mejorable (por ejemplo, se podría calcular sin usar strlen la longitud de la cadena, pero estoy un poco vago hoy):


Código (cpp) [Seleccionar]

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

int main()
{
   int i,n=0,longi,potencias_dos[]={1024,512,256,128,64,32,16,8,4,2,1};
   char Numero[10]={0};
   cout << "Escriba en numero en binario: ";
   cin >> Numero;
   longi=strlen (Numero);
   for (i=0;i<Numero[i]!='\0';i++)
       n+=(Numero[i]-'0')*potencias_dos[11-longi+i];
   cout << endl<<n;
   return 0;
}


Sí, ya sé que debí usar fgets, lo usaré en el próximo código.

Y respecto a  lo comentado por satu:


Cita de: satu en 26 Mayo 2013, 14:23 PM
Buenas!!

Acabo de hacer esta versión que acepta cualquier longitud y es mucho más corto.

lamento recordarle que no es así, pues estas limitado al número de dígitos capaz de calcular/manejar en C/C++, que anda por las quince cifras si mal no recuerdo, toda vez  que estas haciendo uso de la función ""pow" en una parte del código. Y las primeras potencias de 2 son:

Citar
0                                                                                1
 1                                                                                2
 2                                                                                4
 3                                                                                8
 4                                                                               16
 5                                                                               32
 6                                                                               64
 7                                                                              128
 8                                                                              256
 9                                                                              512
10                                                                            1,024
11                                                                            2,048
12                                                                            4,096
13                                                                            8,192
14                                                                           16,384
15                                                                           32,768
16                                                                           65,536
17                                                                          131,072
18                                                                          262,144
19                                                                          524,288
20                                                                        1,048,576
21                                                                        2,097,152
22                                                                        4,194,304
23                                                                        8,388,608
24                                                                       16,777,216
25                                                                       33,554,432
26                                                                       67,108,864
27                                                                      134,217,728
28                                                                      268,435,456
29                                                                      536,870,912
30                                                                    1,073,741,824
31                                                                    2,147,483,648
32                                                                    4,294,967,296
33                                                                    8,589,934,592
34                                                                   17,179,869,184
35                                                                   34,359,738,368
36                                                                   68,719,476,736
37                                                                  137,438,953,472
38                                                                  274,877,906,944
39                                                                  549,755,813,888
40                                                                1,099,511,627,776
41                                                                2,199,023,255,552
42                                                                4,398,046,511,104
43                                                                8,796,093,022,208
44                                                               17,592,186,044,416
45                                                               35,184,372,088,832
46                                                               70,368,744,177,664
47                                                              140,737,488,355,328
48                                                              281,474,976,710,656
49                                                              562,949,953,421,312
50                                                            1,125,899,906,842,624
51                                                            2,251,799,813,685,248
52                                                            4,503,599,627,370,496
53                                                            9,007,199,254,740,992
54                                                           18,014,398,509,481,984
55                                                           36,028,797,018,963,968
56                                                           72,057,594,037,927,936
57                                                          144,115,188,075,855,872
58                                                          288,230,376,151,711,744
59                                                          576,460,752,303,423,488
60                                                        1,152,921,504,606,846,976
61                                                        2,305,843,009,213,693,952
62                                                        4,611,686,018,427,387,904
63                                                        9,223,372,036,854,775,808

64                                                       18,446,744,073,709,551,616
65                                                       36,893,488,147,419,103,232
66                                                       73,786,976,294,838,206,464
67                                                      147,573,952,589,676,412,928
68                                                      295,147,905,179,352,825,856
69                                                      590,295,810,358,705,651,712
70                                                    1,180,591,620,717,411,303,424
71                                                    2,361,183,241,434,822,606,848
72                                                    4,722,366,482,869,645,213,696
73                                                    9,444,732,965,739,290,427,392
74                                                   18,889,465,931,478,580,854,784
75                                                   37,778,931,862,957,161,709,568
76                                                   75,557,863,725,914,323,419,136
77                                                  151,115,727,451,828,646,838,272
78                                                  302,231,454,903,657,293,676,544
79                                                  604,462,909,807,314,587,353,088
80                                                1,208,925,819,614,629,174,706,176
81                                                2,417,851,639,229,258,349,412,352
82                                                4,835,703,278,458,516,698,824,704
83                                                9,671,406,556,917,033,397,649,408
84                                               19,342,813,113,834,066,795,298,816
85                                               38,685,626,227,668,133,590,597,632
86                                               77,371,252,455,336,267,181,195,264
87                                              154,742,504,910,672,534,362,390,528
88                                              309,485,009,821,345,068,724,781,056
89                                              618,970,019,642,690,137,449,562,112
90                                            1,237,940,039,285,380,274,899,124,224
91                                            2,475,880,078,570,760,549,798,248,448
92                                            4,951,760,157,141,521,099,596,496,896
93                                            9,903,520,314,283,042,199,192,993,792
94                                           19,807,040,628,566,084,398,385,987,584
95                                           39,614,081,257,132,168,796,771,975,168
96                                           79,228,162,514,264,337,593,543,950,336
97                                          158,456,325,028,528,675,187,087,900,672
98                                          316,912,650,057,057,350,374,175,801,344
99                                          633,825,300,114,114,700,748,351,602,688
¡Cuidado, que te caes!

He marcado en rojo hasta dónde creo se podría calcular sin usar librerías externas,  si hacemos uso de la propia librería de números más grandes del C/C++, la inttypes

Y un código como el que plantea satu, pero recordando que el número de dígitos del número binario a introducir está limitado por lo antes expuesto, sería:


Código (cpp) [Seleccionar]

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cinttypes>
#include <cmath>
using namespace std;

int  main()
{
   uint64_t n=0;
   register int i,j,longi;
   char numero[71={0};
   cout <<  "Entre numero entero en base 2:\t";
   fgets (numero, 20, stdin);
   longi=strlen (numero);
   for (j=0;j<longi-1;j++)
       n+=(numero[j]-'0')*pow(2,longi-2-j);
   cout <<"En decimal es "<< n;
   return 0;
}


Hecho a toda pastilla y, por tanto a mejorar todavía.

Y vuelvo al comienzo, no sé dónde me perdí para que salieran esos códigos tan, como decirlo, tan complejos a simple vista.

Saluditos!. .... ..
#748

Con la emoción de los resultados obtenidos me olvidé poner el código  >:D , ahí va:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <inttypes.h>
int main()
{
  uint64_t n,a,b,c,aux;
  do
  {
      printf("\nDame un numero :");
      scanf("%llu",&n);
      puts("");
  }
  while(n<=0);
  a=1;b=0;
  for(c=1;c<=n;c++)
  {
    printf("%llu\t",a);
    aux=a;
    a+=b;
    b=aux;
  }
  return 0;
}


Saluditos!. .... ..
#749
Cita de: mr.blood en 26 Mayo 2013, 11:25 AM
La idea es interesante, pero hay números que pueden salir repetidos. Donde haces i+=rand()%19; puede salir 0 i+=0 es i y se repetiría un número. Mi código no necesita IF's pero esos if le ahorran muchas iteraciones.

Gracias por la observación, se me fue ese gazapo que rectifico con

Código (cpp) [Seleccionar]
i+=rand()%18+1;

Me reconocerás que el trozo de mi código que hace el cálculo de los elementos de la matriz:

Código (cpp) [Seleccionar]
do{

x=rand()%10;
y=rand()%10;
if(matriz[x][y]==0 ){
           matriz[x][y]=i;
         i+=rand()%18+1;
           j++;
       }
}while (j<100);


es cuando menos más "cortito" o fácil que el tuyo,al menos a simple vista y no entro ya en la eficiencia:

Código (cpp) [Seleccionar]
for(i=0;i<(MAX_X*MAX_Y);)
{
x=rand()%MAX_X;
y=rand()%MAX_Y;
if(matriz[x][y]==-1)
{
matriz[x][y]=i;
i++;
}
else
{
for(k=-1;k<=1;k++)
{
for(j=-1;j<=1;j++)
{
if(matriz[x+k][y+j]==-1 && (x+k>=0 && x+k<MAX_X) && (y+j>=0 && y+j<MAX_Y))
{
matriz[x+k][y+j]=i;
i++;
}
}
}
}

}


Cita de: mr.blood en 26 Mayo 2013, 11:25 AM

así me aseguro siempre un incremento de al menos uno y me mantengo entre mil.


No me he fijado bien pero la salida del código que acabas de poner sólo da números entre 1 y 100 en lugar de entre 1 y 1000. Una salida de muestra del código que acabas de poner:

Código (cpp) [Seleccionar]

77      78      74      35      75      65      50      44      60      85

49      79      76      47      71      66      15      41      61      94

80      81      5       45      43      46      62      63      64      88

27      28      29      16      19      20      21      72      73      17

30      6       7       8       22      0       23      83      33      84

31      9       2       10      24      25      26      14      95      96

42      11      12      13      39      40      52      4       34      18

82      36      37      38      51      67      53      3       54      86

98      97      89      32      70      68      55      56      1       87

93      99      90      48      91      69      57      58      59      92

Process returned 0 (0x0)   execution time : 0.023 s
Press any key to continue.


Por cierto, ya me dirás que "oscuros motivos"   ;)  te llevan a usar:

Código (cpp) [Seleccionar]
memset(matriz, -1, sizeof(int)*(MAX_X*MAX_Y));


para inicializar la matriz, en lugar de usar:

Código (cpp) [Seleccionar]
int n,matriz[10][10]={0};

Conste que todo esto lo he tomado como un simple ejercicio de ingenio, sin piques ni maldades de por medio. ;-) ;-) ;-)

¡Un fuerte saludo mr.blood! .... ...
#750
Cita de: hxcbps en 26 Mayo 2013, 01:59 AM

ammm hay otra cosa leosansan no se porque me jenerra error en la funcion color(n); me dice en mi compilador dev c++
42 C:\Users\BPS\Desktop\matriz1.cpp `color' undeclared (first use this function)

y el otro error es
56 C:\Users\BPS\Desktop\matriz1.cpp `int color(int)' used prior to declaration


Dichosa manía de usar Dev-C++,¡ pásate a Code::Blocks!.

El error es porque hay que incluir justo después de los include la declaración de la función, esta línea en concreto:


Código (cpp) [Seleccionar]
int color (int n);

Saluditos!. ... ..