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 - ERIK546

#1
Hola, necesito de la ayuda de los expertos. Resulta que ocupo ejecutar los siguientes archivos en una laptop de 64 bits (instalador y un controlador).

Se logran instalar en la computadora; sin embargo no es posible ejecutarlos (El programa no responde).

Mi pregunta es la siguiente: ¿Es posible que funcione un controlador y un programa para 32 bits en un computadora de 64 bits en Windows 8.1?

P.D: He ejecutado las soluciones de compatibilidad de Windows y aún así no ha funcionado.

Archivos: https://mega.co.nz/#F!jdkjHYDD!xBVPRS3ROmhyvljxR15tOA

El programa es para controlar un ultrasonido con la computadora.
#2
Hola a todos, hace un tiempo que no he escrito en el foro. Sin embargo requiero la ayuda de los expertos por la siguiente situación.
Resulta que me encuentro programando en C el método de la bisección, podría buscarlo en Internet, sin embargo se trata del método de la bisección para optimizar funciones matemáticas (máximo o mínimo), y no para encontrar raíces.
No explicaré por el momento el algoritmo; ya que podría ser un poco complicado y aburrido. Sin embargo me he atorado en el programa en mi intento de establecer un criterio.
En teoría el número de iteraciones del programa está dado por la expresión

n=[log(10^s)]/[log(2)]

Dado un "s" escogido por el usuario. Les dejo el código que llevo para mayor claridad:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
    int i;
    double p,n,l,s;
    float a,b,c,d,e;
    printf("Programa Metodo de Biseccion\n");
    printf("Define la funcion\n");
   
    printf("Define el primer limite del intervalo\n");
    scanf("%f",&a);
    printf("Define el segundo limite del intervalo\n");
    scanf("%f",&b);
    c=(a+b)/2;
    d=(c+b)/2;
    e=(c+a)/2;
    printf("Defina s\n");
    scanf("%d",s);
    p=Math.Pow(l,s);
    n=log10(p)/log10(2);
    printf("%d",n);
   
   
 
  system("PAUSE");
  return 0;
}

Como podrán haber notado no llevo ni el 50% del programa, sin embargo no he podido avanzar de dicho criterio. Muchísimas gracias de antemano.
#3
Gracias a todos por sus respuestas, he borrado la partición "/dev/sda3" y me ha aparecido como espacio libre para la instalación, de hecho estoy escribiendo este mensaje desde "Ubuntu 11.04".
#4
Hola a todos, les comento mi situación respecto al intento de instalar la versión de Ubuntu 11.04 en mi notebook. Tengo instalado el sistema operativo Windows 7, y he intentado instalar dicha distribución junto a éste sistema operativo, sin embargo cuando pretendo instalarlo Ubuntu 11.04 no me da esta opción. Les dejo una imagen de la situación que les comento; solo me da las opciones:
1) Reemplazar Windows 7 con Ubuntu.
2) Algo más.




Al no poder instalarlo según la configuración estándar de Ubuntu 11.04 para su instalación junto a Windows 7, en la opción "Algo más" me ha aparecido la tabla de particiones de mi disco duro, sin embargo tampoco me ha dejado modificar dichas particiones como es habitual para añadir a éstas los diferentes puntos de montaje "/" "home" e "intercambio". Les dejo una imagen de lo descrito anteriormente:



Les comento de la imagen anterior;
Tengo 4 particiones al parecer primarias:
1)SYSTEM (100 MB) (Supongo que es el sistema de arranque y ese tipo de cosas que no se deben de modificar).
2) (C:) (626.61 GB) (Posee los datos de mi sistema operativo Windows 7, así como mis documentos personales que tampoco se debe de modificar).
3) (L:) (50 GB) (En ella pensaba guardar todos los archivos correspondientes a Ubuntu 11.04, sin embargo en la tabla de particiones de Ubuntu 11.04 no la he podido identificar y mucho menos modificar, esperando que apareciera como "/espacio libre" en la tabla de particiones).
4) SAMSUNG RECOVERY (21.92 GB) (Supongo que tampoco se debería de modificar ya que la computadora la portaba de fábrica).




Espero que me puedan ayudar con esta problemática ya que no he podido instalar Ubuntu 11.04, y lo extraño es que ya había intentado instalar Ubuntu 11.04 en una ocasión anterior; Y me había dejado hacerlo, la única diferencia era que el disco principal (C:) no lo había modificado. Sin embargo con la partición que he creado en este disco duro ahora no me deja la opción de instalar junto a Windows 7.
He dejado el disco duro como estaba de fábrica, sin embargo la situación es la misma.
Gracias de antemano por toda la ayuda que me puedan proporcionar.
#5
Cita de: durasno en  2 Julio 2012, 06:44 AM
Hola! una pregunta, empezas los indices de las matrices en 1 por que te parece mas comodo??? o porque no sabes que empieza en cero??

El problema es que estas accediendo fuera de la memoria asignada por malloc. Supongamos que creas un arreglo dinamico de 5 elementos, y si vos haces i=1 y en la condicion del for pones i<=5; cuando ingresas datos se almacenan en las posiciones 1 2 3 4 5 del arreglo, PERO los arreglos empiezan desde el cero, posiciones: 0 1 2 3 4 (cinco posiciones), por lo tanto arr[5] no pertenece al arreglo.... y a esto se debe el error del programa(aplicado a las matrices)

Soluciones: si usas i=1, vas a teneer q reservar un elemento mas; ó usas i=0 y en la condicion i<n (lo cual es mas optima ya que no desperdicias un elemento)


Para liberar la memoria reservada, se hace el proceso inverso a como lo reservaste, ej:
for(i=0; i<m; i++)
   free(a[i]);
free(a);

y asi para las demas matrices.... Saludos
Muchísimas gracias durasno; efectivamente utilice los ciclos desde "i=1" debido a que me pareció más cómodo utilizarlos de esa forma para referirme a los espacio 1-1, etc. Y el problema residía en la dimensión de las filas, así como en la liberación de la memoria. Lo he corregido y le he agregado un ciclo que regresa la traza de la matriz resultante. Gracias a todos por su oportuna ayuda. Les dejo el código correspondiente:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int **a;
    int **b;
    int **c;
    int m,u,n,p,i,j,k,t;
    printf("Programa que multiplica dos matrices m * u y n * p y regresa la traza de la matriz resultante\n");
    printf("Introdue m\n");
    scanf("%d",&m);
    printf("Introduce u\n");
    scanf("%d",&u);
    printf("Introduce n\n");
    scanf("%d",&n);
    printf("Introduce p\n");
    scanf("%d",&p);
    a=(int**)malloc(sizeof(int*)*m);
    b=(int**)malloc(sizeof(int*)*n);
    c=(int**)malloc(sizeof(int*)*m);
   
    if(u==n){
             for(i=0;i<m;i++){
                               a[i]=(int*)malloc(sizeof(int)*u);
                               }
             for(i=0;i<n;i++){
                               b[i]=(int*)malloc(sizeof(int)*p);
                               }
             for(i=0;i<m;i++){
                               c[i]=(int*)malloc(sizeof(int)*p);
                               }
                               
             for(i=0;i<m;i++){
                      for(j=0;j<u;j++){
                                        printf("Introduce los valores %d-%d de la primera matriz\n",i+1,j+1);
                                        scanf("%d",&a[i][j]);
                                       }
                      }
             
             for(i=0;i<n;i++){
                               for(j=0;j<p;j++){
                                                 printf("Introduce los valores %d-%d de la segunda matriz\n",i+1,j+1);
                                                 scanf("%d",&b[i][j]);
                                                 }
                               }
             
                               for(i=0;i<m;i++){
                                                 for(j=0;j<p;j++){
                                                                   c[i][j]=0;
                                                                   for(k=0;k<n;k++){
                                                                                     c[i][j]+=a[i][k]*b[k][j];
                                                                                     }
                                                                   }
                                                 }
             printf("La matriz resultante es:\n");
                        for(i=0;i<m;i++){
                                          printf("\n");
                                          for(j=0;j<p;j++){
                                                            printf("%d   ",c[i][j]);
                                                            }
                                          }
                        }
             if(m==p){
                      t=0;
                      for(i=0;i<m;i++){
                                       for(j=0;j<p;j++){
                                                        if(i==j){
                                                                 t+=c[i][j];
                                                                 }
                                                        }
                                       }
             printf("\nLa traza es: %d\n",t);
                          }
                                                         
             for(i=0;i<m;i++){
                               free(a[i]);
                               free(a);
                               }
             for(i=0;i<n;i++){
                              free(b[i]);
                              free(b);
                              }
             for(i=0;i<m;i++){
                              free(c[i]);
                              free(c);
                              }

             
             
             
             
    system("PAUSE");
    return 0;
}
#6
Muchas gracias a todos por sus respuestas, gracias a ellas he podido completar mi programa que multiplica matrices de cualquier tamaño (siempre y cuando sea posible). Pero mi programa presenta un error en la ejecución ya que aunque devuelve el resultado esperado, al finalizar el programa marca un error ".exe" que lo hace finalizar casi de inmediato. Agradecería que me ayudaran a identificar el problema ya que yo no he podido.
Les dejo el código:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int **a;
    int **b;
    int **c;
    int m,u,n,p,i,j,k,t;
    printf("Programa que multiplica dos matrices m * u y n * p y regresa la traza de la matriz resultante\n");
    printf("Introdue m\n");
    scanf("%d",&m);
    printf("Introduce u\n");
    scanf("%d",&u);
    printf("Introduce n\n");
    scanf("%d",&n);
    printf("Introduce p\n");
    scanf("%d",&p);
    a=(int**)malloc(sizeof(int*)*m);
    b=(int**)malloc(sizeof(int*)*n);
    c=(int**)malloc(sizeof(int*)*m);
   
    if(u==n){
             for(i=1;i<=m;i++){
                               a[i]=(int*)malloc(sizeof(int)*u);
                               }
             for(i=1;i<=n;i++){
                               b[i]=(int*)malloc(sizeof(int)*p);
                               }
             for(i=1;i<=m;i++){
                               c[i]=(int*)malloc(sizeof(int)*p);
                               }
                               
             for(i=1;i<=m;i++){
                      for(j=1;j<=u;j++){
                                        printf("Introduce los valores %d-%d de la primera matriz\n",i,j);
                                        scanf("%d",&a[i][j]);
                                       }
                      }
             
             for(i=1;i<=n;i++){
                               for(j=1;j<=p;j++){
                                                 printf("Introduce los valores %d-%d de la segunda matriz\n",i,j);
                                                 scanf("%d",&b[i][j]);
                                                 }
                               }
             
                               for(i=1;i<=m;i++){
                                                 for(j=1;j<=p;j++){
                                                                   c[i][j]=0;
                                                                   for(k=1;k<=n;k++){
                                                                                     c[i][j]+=a[i][k]*b[k][j];
                                                                                     }
                                                                   }
                                                 }
             printf("La matriz resultante es:\n");
                        for(i=1;i<=m;i++){
                                          printf("\n");
                                          for(j=1;j<=p;j++){
                                                            printf("%d   ",c[i][j]);
                                                            }
                                          }
                        }

             free(a);
             free(b);
             free(c);
    system("PAUSE");
    return 0;
}
#7
Hola a todos los expertos en programación en C, esta vez me han surgido dudas al hacer un programa que multiplique dos matrices de tamaños "m x n" y "n x p". Sin embargo no subiré tanto código esta vez para explicarles mi duda, ya que la considero un error de concepto acerca de los dobles apuntadores.
Lo que se pretende es dimensionar un doble apuntador, ya que yo considero un doble apuntador como un arreglo de dos dimensiones, sin embargo estas se pueden dimensionar con la función "malloc".
Viéndolo de esta forma la primera matriz sería "a[m][n]", la segunda matriz "b[n][p]" y la matriz resultante "c[m][p]". Sin embargo el doble apuntador; "a", "b" y "c", deben dimensionarse según los diferentes valores de "m", "n" y "p". Agradecería que me explicaran la forma de hacerlo, les dejo la forma en que lo dimensioné el doble apuntador "a" pero solo lo hice para el valor de "m" y para el valor correspondiente a "n" en ese doble apuntador no sabría como hacerlo. De forma que me quede un doble apuntador "a[m][n]". Gracias de antemano.


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int **a;
    a=(int**)malloc(sizeof(int*)*m);


    system("PAUSE");
    return 0;


#8
Les dejo el código que resultante, además le he incluido una función que calcula las primeras "l" parejas de números amigos. Gracias por todo:

#include <stdio.h>
#include <stdlib.h>
int suma(int n);
void perfectos(int m);
void amigos(int l);
int main(int argc, char *argv[])
{
    int l;
    int n;
    int m;
    printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
    printf("Introduce el numero\n");
    scanf("%d",&n);
    printf("El resuldado es: %d\n",suma(n));
    printf("Programa que imprime los primeros m numeros perfectos\n");
    printf("Introduce m\n");
    scanf("%d",&m);
    printf("Los numeros perfectos son:\n");
    perfectos(m);
    printf("Programa que imprime los primeros pares l de numeros amigos\n");
    printf("Introduce l\n");
    scanf("%d",&l);
    printf("Los pares de numeros amigos son:\n");
    amigos(l);
   


    system("PAUSE");
    return 0;

   int suma(int n){
       int i;
       int d;
       int c;
       c=0;
       for(i=1;i<n;i++){
                        if(n%i==0){
                                   d=i;
                                   c+=d;
                                   }
                        }
                        return c;
       }
       void perfectos(int m){
           int i;
           for(i=1;i<=m;i++){
                             if(suma(i)==i){
                                            printf("%d\n",i);             
                                            }
                             }
           }
       void amigos(int l){
            int i;
            int j;
            for(i=1;i<l;i++){
                             for(j=i+1;j<l;j++){
                                                if(i==suma(j) && j==suma(i)){
                                                              printf("%d-%d\n",i,j);
                                                              }
                                                }
                             }
            }
#9
Cita de: durasno en 29 Junio 2012, 19:24 PM
Hola! el programa anda bien, el problema es esto:
scanf("%d\n",&m);
el \n esta demas, es por eso q no te funciona... Y en el for de la funcion perfectos() inicializa i=1


Saludos
Muchas gracias durasno, tienes toda la razón.
#10
Hola a todos, necesito su ayuda de nuevo; esta vez es un programa que imprime los primeros "m" números perfectos. Un número perfecto es aquél número "n" en el cual la suma de sus divisores (sin incluir a "n") es igual a ése número "n". Por ejemplo el 6; sus divisores sin incluirlo serían: 3, 2, 1 y su suma es igual a 6. En un mensaje anterior solicite su ayuda para realizar una función que me diera dicha suma de cualquier número, les dejo el código que lo hace:

#include <stdio.h>
#include <stdlib.h>
int suma(int n);
int main(int argc, char *argv[])
{
    int n;

    printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
    printf("Introduce el numero\n");
    scanf("%d",&n);
    printf("El resuldado es: %d\n",suma(n));

    system("PAUSE");
    return 0;

   int suma(int n){
       int i;
       int d;
       int c;
       c=0;
       for(i=1;i<n;i++){
                        if(n%i==0){
                                   d=i;
                                   c+=d;
                                   }
                        }
                        return c;
       }

Ahora utilizando esta función necesito hacer un programa que me registre los primeros "m" números perfectos, como se imaginarán tendré que llamar a dicha función dentro de la nueva función. Lo que busca este programa es que si por ejemplo yo ingreso "m" con el valor de 30; me imprima sólo los números perfectos menores o iguales a 30, serían: 6, 28. He avanzado un poco y aunque compila y ejecuta correctamente, no me da ningún resultado como debiera. Les dejo lo que tengo hasta ahora:

#include <stdio.h>
#include <stdlib.h>
int suma(int n);
void perfectos(int m);
int main(int argc, char *argv[])
{
    int n;
    int m;
    printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
    printf("Introduce el numero\n");
    scanf("%d",&n);
    printf("El resuldado es: %d\n",suma(n));
    printf("Programa que imprime los primeros m numeros perfectos\n");
    printf("Introduce m\n");
    scanf("%d\n",&m);
    printf("Los numeros perfectos son:\n");
    perfectos(m);
   
   
   
    system("PAUSE");
    return 0;

   int suma(int n){
       int i;
       int d;
       int c;
       c=0;
       for(i=1;i<n;i++){
                        if(n%i==0){
                                   d=i;
                                   c+=d;
                                   }
                        }
                        return c;
       }
       void perfectos(int m){
           int i;
           for(i=0;i<=m;i++){
                             if(suma(i)==i){
                                            printf("%d\n",i);             
                                            }
                             }
           }

Gracias a todos de antemano.