Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Hyde

Páginas: [1]
1
Hola.

Bueno un amigo que estudia en una universidad diferente a la mía, me paso este programa para resolverlo en Legunaje C, me llamo la atención y de verdad quisiera hacerlo, pero necesitaría alguna orientación para ver si me pueden ayudar en algo.

ALGORITMO DE TRANSPORTE

Los pasos básicos del algoritmo de transporte son exactamente iguales a los del método simplex Sin embargo, en lugar de utilizar la tabla simplex regular, aprovechamos la estructura especial del modelo de transporte para organizar los cálculos en una forma más conveniente.

Paso 1. Determine una solución factible básica inicial y vaya al paso 2.

Paso 2. Use la condición de optimalidad del método simplex para determinar la variable de entrada de entre todas las variables no básicas. Si se satisfacen las
condiciones de optimalidad, deténgase. De lo contrario, avance al paso 3.

Paso 3. Use la condición de factibilidad del método simplex para determinar la variable de entrada de entre todas las variables básicas actuales, y halle la nueva solución básica. Regrese al paso 2.

Ejemplo:

Solución inicial:
En caso de no ser igual la oferta y la demanda se crea una fila o una columna con la diferencia.
Ejemplo si tenemos 3 orígenes y 3 destinos de la siguiente forma:


El resultado es que la oferta suma 1500 y la demanda 3000 por lo que será necesario crear una columna de oferta ficticia para balancear el problema


Y ahora se resuelve como exactamente igual que la forma anterior.

En base a la información anterior, desarrolle un programa en Lenguaje C que permita lo siguiente:

a) Cargar la matriz de costos.

b) Cargar el vector de ofertas y demandas.

c) Obtener una solución Inicial por el método de ruta noroeste mostrar la matriz resultante.

d) Obtener el valor de la solución que es la sumatoria de cada costo* cantidad enviada

e) La matriz debe soportar un máximo de 5 orígenes y 5 destinos.
Mi opinión:

la forma de que pensé para hacerlo fue la siguiente:

Crear una matriz que se llene de los costos ingresados por el usuario, con respecto a esta matriz no le veo mucho sentido... porque en si lo que necesito hacer es el camino que se muestra en el ejemplo.

Crear un vector de demandas y otro de ofertas ubicandolos con gotoxy que utiliza la librería #include "myconio.h".

Crear otra matriz donde voy a hacer la operación, y crear el camino que se muestra en el ejemplo, aplique la siguiente lógica:

Código: [Seleccionar]
for(x=0;x<f;x++){
                      printf("\n");
                     
            for(y=0; y<c; y++){
                     
                     m[x][y]=0; 
 
                     if(ofertas[x]>demandas[x]){
                     m[x][x]=demandas[x];//ubicarlo en la cosilla ("noroeste")
                     m[x][x+1]=ofertas[x]-demandas[x]; // la diferencia de ambos para cuando               se sumen de bien
                     }else
                     if(ofertas[y]<demandas[y]){
                     m[y][y]=ofertas[y];
                     m[y+1][y]=demandas[y]-ofertas[y];
                     }

                           printf(" %d ",m[x][y]);
                      }
                    }

el problema es: que no esta dando correcto con las columnas, la suma siempre se pasa y no da el numero que deberia dar en la misma posicion de demandas, otra cosa es que nose porque si yo en demandas meto los numero 5, 15, 15, 15 me sale a la ora de imprimirse 5, 15, 5, 15

dejo todo el código hecho hasta ahora:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include "myconio.h"
#define f 3
#define c 4

void costos_matriz(int costos[][c]);
void funcionof(int ofertas[f], int demandas[c], int m[][c]);

int main(){
    int costos[f][c], ofertas[f], demandas[c],m[f][c];
   
    funcionof(ofertas,demandas,m);
 
  system("PAUSE>NULL");
  return 0;
}

void costos_matriz(int costos[][c]){
     
     int x, y;
     
     
     for(x=0;x<f;x++){
            for(y=0; y<c; y++){
                               
                           printf("Ingrese costos: ");
                           scanf("%d",&costos[x][y]);

                    }                               
            }
     }//costos
     
void funcionof(int ofertas[f], int demandas[c], int m[f][c]){
     
     int i,x,y,k;
       
     for(i=0; i<f; i++){
     
     printf("ingrese la oferta: ");
     fflush(stdin);
     scanf("%d",&ofertas[i]);
     }
     for(i=0; i<c; i++){
     printf("ingrese la demandas: ");
     fflush(stdin);
     scanf("%d",&demandas[i]);
     
        }
        system("cls");
       
     for(x=0;x<f;x++){
                      printf("\n");
                     
            for(y=0; y<c; y++){
                     
                     m[x][y]=0; 
 
                     if(ofertas[x]>demandas[x]){
                     m[x][x]=demandas[x];
                     m[x][x+1]=ofertas[x]-demandas[x];
                     }else
                     if(ofertas[y]<demandas[y]){
                     m[y][y]=ofertas[y];
                     m[y+1][y]=demandas[y]-ofertas[y];
                     }
                     
                     
                           printf(" %d ",m[x][y]);
                      }
                    }         
                                       

   
    printf("\n");
        for(x=0; x<f; x++){
        gotoxy(16,x+1);
        printf(" %d ", ofertas[x]);
        }
       
        for(x=0; x<c; x++){
        gotoxy(x*3+1,7);
        printf( "%d ", demandas[x]);
        }
 
     }//ofertas_demandas 
   

Solo me gustaría recibir una pequeña orientación con respecto a esto, ya que no tengo a quien preguntarle y me frustra no poder hacerlo!. Agradecería de verdad su ayuda.

2
Muchas gracias por tu respuesta Mastermind, duda aclarada! ;D

3
Bueno, la pregunta que haré tal vez les parezca algo tonta, pero como apenas estoy empezando con la programación, no me gusta que me queden dudas:

Bueno daré un ejemplo para que me puedan entender mejor:

Pido los nombres de los estudiantes de un salón de clase de la siguiente manera:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

main()
{
    char nom[20];
    int x;
 
 
for(x=0;x<10;x++){
                     
    printf("Ingrese nombre: ");
    scanf("%s",&nom);

}           
  system("PAUSE");
  return 0;
}

lo que quiero es que al terminar de ingresar los nombres, estos se impriman en un vector (o matriz), como en forma de lista, desde el primero que se ingreso, hasta el ultimo, es decir dentro de un array de 10 espacios, habrán 10 nombres.

4
Claro! tienes toda la razón, bueno, muchas gracias por la ayuda! ;D

5
Si te digo la verdad he leído el enunciado y no lo entiendo bien. Necesitaría un ejemplo para poder entender cosas a las que se refiere, por ejemplo habla de un número central, pero que yo sepa una matriz no tiene un número central, no sé bien a qué se refiere.

bueno te daré una pequeña interpretación de lo que yo pienso:

por ejemplo una matriz 6 x 6 con numeros a la zar, donde tendrá dentro de ella una pequeña matriz 3x3 (8 valores adyacentes) y el centro sera la posición numero 1 1 de la matriz 3x3 donde se pondrá el asterisco ( que será el cursor), bueno al mover tal asterisco, que se vaya con todo y matriz(Izq, derec, arib, abaj), y que los valores que "tapó" queden algo así como en un vector temporal, para cuando quitemos la matriz los números aparezcan de nuevo, dejo algunas imágenes que hice para explicarme mejor:

por ejemplo supongamos que la posición inicial es esta:

cuando la corremos a la derecha:

cuando la corremos para abajo:

y así sucesivamente.

bueno y me gustaría llevar eso a código!.

Dejo claro que esta es mi interpretación personal, no se si mi lógica estará bien.

6
Aquí esta el código como lo tengo ahora:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

int contar_vocales(char *);

int main(){   
char cad[500],*p;
int longi,i,x,P,R,V,longinP,len,NumeroAleatorio;
int porc=0;

printf("Ingrese un texto: ");
gets(cad);
longi = strlen(cad);


//-------------------------------Contador palabras------------------------------
P=0;
for(x=0;x<500;x++){
 if(cad[x]==' ' && x!=499 && cad[x+1]!= ' ')
  P++;
}
printf("\nCantidad de Palabras: %d",P+1);

//--------------------------------Porcentaje------------------------------------

printf("\nCantidad de Vocales: %d",contar_vocales(cad));
V = contar_vocales(cad);
printf("\nCantidad de caracteres: %d",longi-P);
longinP= longi-P;
porc= (V*100)/longinP;
printf("\nPorcentaje de vocales: %d Por ciento",porc);

//---------------------------------- Al reves-----------------------------------
len = strlen(cad);
printf("\nTexto al reves: ");
i=0;
for(i=len;i>=0;i--){
     printf("%c",cad[i]);         
 }
printf("\n");

//--------------------------------------Piso------------------------------------
p=cad;
while(*p!='\0'){
if(*p==' ')
        *p='_';
p++;
}
printf( "Con piso: %s \n",cad);

getch();
}//Main -CuerpoPrincipal-

//--------------------------------Funcion---------------------------------------
       
int contar_vocales(char *cad){
   
int cont=0;
char *aux=cad;
 
while(*aux){
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;               
   }//funcion
   
return cont;

}//contar_vocales

7
Hola
bueno, ahora estoy practicando bastante con vectores y matrices, he logrado hacer una gran variedad de cosas y he logrado mejorar mi lógica, pero conseguí un enunciado que me pareció algo curioso y difícil, me gustaría que me ayudaran a ver como realizar este programa, y como no, que me dieran una breve explicación (lo básico de matrices lo sé) si no es mucha molestia, ya que me encantaría entenderlo.

Bueno dejo el "pequeño" enunciado:

Dada una matriz G de tamaño MxM con M par; desarrollar una función que permita seleccionar(mediante desplazamientos del cursor y al presionar una tecla) un numero cualquiera de la matriz, que contenga ocho valores adyacentes, sustituir el numero seleccionado por* (numero central), y luego utilizando las flechas direccionales, poder mover esa sub-matriz a través de la matriz original, de forma tal que todos los números se desplacen y sustituyan de forma temporal los números por los que va pasando. Al presionar otra tecla se debe eliminar la selección y la matriz debe volver a su estado original, y permitir realizar una nueva selección.


espero su ayuda.

8
Bueno probé cambiando la condición, pero no funciono, al introducir espacios, me sale que hay un numero determinado de palabras cosa que no es cierta, el programa funciona como debe ser cuando no hay espacios de màs, pongo "hola hola", y me cuenta como dos palabras gracias a la P+1, pero al introducir muchos espacios, me cuenta palabras inexistentes.

Al igual cuando pongo "hola hola           "(con espacios a la derecha) me cuenta palabras que no existen, cosa que pasa por la lógica que le aplique para contar las palabras, pero no se de que forma evitar este error del programa.

9
ya pude resolver la A , B y D, la B la hice de esta manera:

Código: [Seleccionar]
P=0;
for(x=0;x<500;x++){
 if(cad[x]==' ')
  P++;
}
printf("\nCantidad de Palabras: %d",P+1);

para que me cuentelas palabras, pero hay un problema, porque si yo undo varias veces el espacio seguido, me contara palabras, como resuelvo eso? grcias.

10
Buenas, estoy practicando con cadenas pero me tranqué en esto:

Dado un texto de hasta 300 caracteres, desarrollar lo siguiente

a) Calcular el porcentaje de vocales presentes en el texto
b) Contar cantidad de palabras en el texto
c) Verificar el porcentaje de dígitos y de letras que existen en el texto
d) Eliminar todos los espacios y sustituirlos por "_"
e) Imprimir el texto al revés

Bueno, lo único que he logrado hacer es lo siguiente:

- contar las vocales
- contar los caracteres

PERO necesito es el porcentaje de vocales, se supondría que seria (Numerodevocales *100) /TotalCaracteres si no me equivoco.
El problema que tengo es el siguiente: cuando cuento el numero de caracteres, me cuenta también los espacios (utilizando el strlen ), cosa que no quiero para poder sacar bien el porcentaje, dejo el código que he hecho:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <string.h>

int contar_vocales(char *);


int main(){
     
char cad[300];
int longi;
float porc;

printf("Ingrese el texto a contar vocales : ");
gets(cad);
longi = strlen(cad);
printf("La cantidad de Vocales: %d",contar_vocales(cad));
printf("\nCantidad de caracteres: %d",longi);
getch();


}

//-- Funcion:
       
int contar_vocales(char *cad){
   
int cont=0;
char *aux=cad; 
 
 while(*aux){     
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;               
   }//función
   

return cont;

}//contar_vocales

me gustaría que me ayuden con lo demás también que no tengo idea de como hacerlo (ya lo he pensado bastante, pero no he dado con eso :/), un saludo y muchas gracias.

11
Ahora tengo todo mas claro, gracias por la ayuda Cesar, me ha servido de mucho, Disculpa las molestias! Un Saludo.

12
Conseguí esto por Internet pero de todas maneras no lo entiendo. y tampoco se si esta es la respuesta para generar el numero sin que se repita?

Código: [Seleccionar]
n=0;
while (n<25){
a=round(100*rand)
i=0;
existe=0;
while (i<n & existe=0){
i=i + 1;
}
if (m(1,i)=a){
existe=1;
}//if
}//while i

if existe=0{
n = n + 1; 
m(1,n)=a; 
}//if
}//While n

13
Hola me gustaría que me ayuden a generar un vector de 10 números con números a la zar de 0 a 29 pero que los números NO se repitan.

por ejemplo para generar los numero a la zar hice lo siguiente:

Código: [Seleccionar]
//--Cargar un vector con números aleatorios
    srand(time(0)); //se establece el número semilla
    for(x=0;x<10;x++){
      A[x]=(rand()%9)+10;//se genera el número aleatorio  entre 0 y 29
    }//for
   
    printf("\n Vector A cargado con números aleatorios entre 0 y 29 \n\n");   
    for(x=0;x<10;x++){
      printf("\n\t%d\t",A[x]);
    }

¿Como hago que no se repitan?, por ahí leí que con un While se podía, pero ¿me podrían explicar como?, Un saludo y Disculpen las molestias como verán soy novata en esto y se me hace algo difícil esto.

14
Hola César, gracias por responder , pero eso no es precisamente lo que me piden.

En el segundo código que inserte, esta el vector que me suma cada fila y cada columna, entonces si la suma de esa fila da Par, mostrar los valores por ejemplo:

La suma de los valores d la fila 1, dio par, entonces mostrar los valores:
por ejemplo esta matriz 4x4:

2  4  8  6
6  3  7  3
5  6  8  7
2  1  4  8
--------------------------------
la suma de cada fila es:

2+4+8+6=20
6+3+7+3=19
5+6+8+7=26
2+1+4+8=15
--------------------------------
entonces las que la suma dio par, que me imprima solo esas filas de esta manera:

"Las filas donde su suma de sus valores es par son:"

2  4  8  6
5  6  8  7

Espero a verme explicado!

EDITO:: la respuesta que me diste es la correcta, solo lo vi por otro punto de vista!! Gracias!, de todas maneras según como me lo imagine yo, seria buena practica también.

15
Me están pidiendo que de un matriz 10 x 10 , donde los números sean al azar, Mostrar solo los valores de la matriz, donde la suma de su fila y columna sea par.

La matriz:

Código: [Seleccionar]
//matriz cargada con numeros aleatorios entre 10 y 99
  srand(time(0));
  acum=0;
  for(x=0;x<10;x++){
    for(y=0;y<10;y++){
      M[x][y]=rand()%90+10;   
      acum=acum+ M[x][y];

    }   
  }//for x
 
  //imprimir matriz
 
  printf("\t\tMatriz Original\n\n");
  for(x=0;x<10;x++){
    printf("\n");
    for(y=0;y<10;y++){
      printf(" %d ",M[x][y]);
    }   
  }//for x
//---------------------------------------------------------------------
//--- Matriz traspuesta -----
  for(x=0;x<10;x++){
    for(y=0;y<10;y++){
      M2[x][y]=M[y][x];   
    }   
  }//for x
  printf("\n\n\t\tMatriz Traspuesta\n\n");
  for(x=0;x<10;x++){
    printf("\n");
    for(y=0;y<10;y++){
      printf(" %d ",M2[x][y] );
    }   
  }//for x

//----------------------------------------------------
puedo sacar la suma de cada fila y la de cada columna de esta manera:
Código: [Seleccionar]
for(x=0;x<10;x++){
sumafilas=0;
     for(y=0;y<10;y++){
  sumafilas=sumafilas+M[x][y];
  vecF[x]=sumafilas;
    }//for x
  }//for y
printf("\n\nLa suma de cada fila es:\n\n");
 for(x=0;x<10;x++){
printf("\n %d", vecF[x]);
}
  for(x=0;x<10;x++){
sumacolum=0;
     for(y=0;y<10;y++){
  sumacolum=sumacolum+M[y][x];
  vecC[x]=sumacolum;
    }//for x
  }//for y
printf("\n\nLa suma de cada columna es:\n\n");
 for(x=0;x<10;x++){
printf("\n %d", vecC[x]);
}

pero como hago para Mostrar solo los valores de la matriz, donde la suma de su fila y columna sea par, no mostrar la suma, sino la fila y las columnas donde la suma sea par. Un saludo!

16
Aprender a programar desde cero / ¿Como empezar a programar?
« en: 04 de Febrero 2014, 01:08 »
Hola, bueno, estoy estudiando Informática, y de verdad que me gusta, pero me está costando mucho, ya fue dado el primer parcial que fue sobre pseudocodigo, examen el cual saque muy mala nota, con respecto a eso, me gustaría que me den algunas recomendaciones/consejos para desarrollar mas lógica, mas habilidad mental que eso es lo que me cuesta, y si es posible me gustaría que me den algunos conceptos básicos de lo que es el for, do, while, osea los ciclos.

Ahora estamos viendo vectores, cosa que entiendo pero a la vez no, ya que al ver esto necesito tener claro el examen anterior que fue lo que anteriormente nombre. Un Saludo.

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".