“Mi estilo, es el arte de luchar sin luchar”

Aprendiendo C (5ta Parte)

2007-11-09 10:59:25-06

Software

veremos un nuevo ejemplo para introducirnos

#include<stdio.h>
#define NUM 10

int main()// Inicio del programa
{
int A[NUM], i; /*Vector,arreglo de enteros y un indice*/

printf("Introduce 10 numeros\n");

for(i=0;i<10;i++)
    scanf("%d", &A[i]);
 
printf("Tus numeros son:\n");
for(i=9;i>=0;i--)
    printf("%d ",A[i]);

printf("\n");

return 0;
}//fin del programa


En la primera linea del main() declaramos un Arreglo (int A[NUM]) la declaracion del arreglo se hace asignadole un nombre (A) y un tamaño (NUM), asi como un tipo (int). Un arreglo es una estructura de datos que asigna espacios consecutivos en memoria del tamaño del tipo declarado.

Para "movernos" dentro del arreglo ocupamos los subindices, cada subindice indica un valor dentro del arreglo, en C los subindices comienzan en 0, la asignacion de un valor se hace a cada elemento, nota que usamos un ciclo for para llenar el arreglo, aunque se puede usar otro ciclo o asignar individualmente una valor a cada elemento. tambiense pueden asignar los valores en la declaracion, veamos el siguiente ejemplo:

#include<stdio.h>
#define TAM 10

int main()//Inicio de la funcion principal
{
int Arreglo[]={1,2,3,4,5,6,7,8,9,0};//declaracion del arreglo
int i,j;

for(i=0;i<TAM;i++)//imprime un histograma de frecuencias
    {
    for(j=1;j<=Arreglo[i];j++)
        printf("*");
    printf("\n");
    }    

printf("Cambia los valores: ");

for(i=0;i<TAM;i++)
    scanf("%d",&Arreglo[i]); //Modificalos valores iniciales

for(i=0;i<TAM;i++)//imprime un nuevo histograma
    {
    for(j=1;j<=Arreglo[i];j++)
        printf("*");
    printf("\n");
    }

return 0;
}//Fin funcion principal

Nota que esta vez declaramos el arreglo con la lista de sus elementos,no declaramos el numero de elementos que tenia,pero si el tipo y el nombre. un arreglo se puede ver como un conjunto de variables del mismo tipo,eso nos evita declarar muchas variables individuales y ademas facilita la programacion gracias a los subindices.

El tipo del arreglo puede ser cualquiera, ademas un arreglo tiene una fuerte conexion con los apuntadores, que es una de las caracteristicas mas poderosas del lenguaje. dada esta conexion nota que si asignas un valor a Arreglo, es lo mismo que si asignaras un valor a Arreglo[0].

Es importante saber que los subindices son siempre valores enteros, no tiene sentido una posicion no entera,bueno dada esta propiedad de los subindices juguemos y vamos unas posibilidades en el siguiente ejemplo:

#include<stdio.h>

int main()/*Inicio funcion principal*/
{
int i,j,tam;
float temp;

printf("Introduce el tamanio del arreglo: ");
scanf("%d", &tam);

float A[tam];//declaracion del arreglo

printf("Introduce los valores flotantes");
for(i=0;i<tam;i++)
    scanf("%f", &A[i]);

for(i=1;i<tam;i++)//Ordenamiento metodo de la burbuja
    for(j=0;j<tam-1;j++)
        if(A[j]>A[j+1])
            {
            temp=A[j];
            A[j]=A[j+1];
            A[j+1]=temp;
            }
           
printf("Arreglo ordenado\n");
for(i=0;i<tam;i++)
    printf("%f ", A[i]);

printf("\n");

return 0;
}//Fin Funcion principal


Nota como podemos hacer operaciones en los subindices, esto siempre y cuando regresen valores enteros

Solo una nota breve sobre el ordenamiento, El ordenamiento es una de las aplicaciones computacionales mas  importantes, el metodo de ordenamiento de la burbuja (Bubble Sort) es muy facil de programar y entender, sin embargo, es la PEOR forma de ordenar un conjunto de datos, existen alrededor de unos 300 metodos de ordenamiento, yo sinceramente conozco como quince, sea cual sea el caso, Nunca ordenen por este metodo cuando la cantidad de datos sea grande, para aprender esta bien ;).

Hoy vimos

1.-Declaracion de arreglos
2.-Manejo de subindices
3:-Asignaciones de valor a elementos del arreglo.

Les dejo un pequeño problema: Imagina un ordenamiento en zic zac, es el metodo de la burbuja, pero pasa hacia delante y luego hacia atras, esto quiere decir que en una pasada  (ida y vuelta) el valor mas grande y mas pequeño quedan acomodados y asi sucesivamente, notaras que no requiere todas las iteraciones del metodo de la burbuja tradicional.

Programalo y optimizalo. Si puedes ponlo en los comentarios,recuerda "Muestra tu Codigo".

Permalink: http://www.mononeurona.org/users/entry/vendaval/937


Comments Comentblogs:
1.- asarch asarch wrote:

¡Profeeeeeeeee!

¿Cómo podemos leer los datos de la entrada estándar (stdin)?:

% cat file | mi_programa

o tambien

% cat file | mi_programa -

En este caso procesar los datos que cat le envia al programa.

2007-11-10 08:35:54-06
2.- vendaval vendaval wrote:

Facilillo, Los programas en C toman sus datos de la entrada y salida estándar que en unix son archivos entonces no hay problema con pasar su entrada o salida por una pipe (|) o mandarlas o recibirlas de un archivo (<,>,>>,<<). El programa no distingue la diferencia

Como todo tienes que cuidar que internamente tu programa pueda aguantar el "Llegue" de información, te dejo un ejemplo sencillo:

/*Convierte su entrada en mayúsculas*/
#include<stdio.h>
#include<ctype.h>

int main()//Programa UPPER
{
int c;/*char es un entero muy corto
por eso uso int despues de todo no se
que quieras pasarle al programa*/

while((c=getchar())!=EOF)
putchar(toupper(c));

return 0;
}

%gcc -o upper upper.c
%cat File | ./upper

funciona tambien si deseas pasar argumentos por medio de "argv", si tienes todavía dudas estoy a tus ordenes asarch.

2007-11-11 22:16:59-06
3.- asarch asarch wrote:

!Orale! !Que facil!

Funciona de ambas formas:

dmesg | ./to_upper

y

dmesg | ./to_upper -

Yo pense que tenias que abrir un descriptor de archivo (file descriptor) especial para poder leer desde la entrada estandar (stdin).

No pues, ahora comprendo el poder del Unix al decir que *TODO* es un archivo.

Muchas gracias Vendaval. Duda resulta. Dios te lo de en hijos.

2007-11-12 06:14:37-06
4.- debianx debianx wrote:

Oye vendaval una pregunta, ¿la UAM da cursos de programacion? y si los da , pueden entrar externos o solo alumnos.

2007-11-13 09:24:23-06
5.- asarch asarch wrote:

Y lo mas importante, que tal estan las chamacas por alla? estan chulas?

Fotos, fotos, fotos...

2007-11-13 18:06:32-06
6.- vendaval vendaval wrote:

Si estan chulas las chamacas, por la programacion creo que no hay mas que de VB, pero hombre es una universidad publica, puedes entrar cuando quieras, hay maestros que son de verdad muy buenos. yo te meto a los laboratorios.

2007-11-14 22:11:31-06
7.- Wilmar Wilmar wrote:

#include<stdio.h>
#include<conio.h>

void main (void)
{
clrscr();
int primo,i,cont=0;
printf("ingrese el numero que desea averiguar si es primo:\t");
scanf("%d",& primo);

for(i=2;i<primo;i++)
{
if(primo%i==0){
cont++;
}
}
if(cont==0){
printf("el numero %d es primo",primo);
getch();
}
else{
printf("el numero %d no es primo",primo);
getch();
}
}

2008-02-22 09:03:14-06

New Comentblog

Captcha



Login



Remember me:
vendaval
Alberto Rodriguez Sanchez Estudiante de Ingenieria en Computacion en la UAM-A, programo en C, C#, Python y Haskell. Uso Debian GNU/Linux, Mac-OS X, OpenSolaris, NetBSD y Win2. Pienso especializarme en computo cientifico y criptografia que son mis grandes pasiones.

Tambien pienso que la programacion computacional es un Arte y que un programa de computadora puede llegar a ser realmente bello si cumple con algunas caracteristicas, prefiero la Sintaxis Avanzada en los programas por que muestra un dominio del lenguaje y un buen grado de abstraccion.

NetBSD, C, Enlightenment y VI(M) son mis SO, Lenguaje de programación, manejador de ventanas y editor favoritos.

Practico Limalama y JKD (soy seguidor de la filosofía de Bruce Lee) y tambien escribo con cierta regularidad en este blog.

"Se como el agua, pero piensa como el fuego"
alchemy corn pop cryptography dark side education hacking humor ladies mathematics music my life nanoblogging no more triviality programming martial arts
Powered by:
Despabilando la MonoNeurona.org
Livechat

<-Nombre
vendaval wrote:
Con una mentira suele irse muy lejos, pero sin esperanzas de volver
on 24/7/08

asarch wrote:
Simon. De preferencia ponle una nalga pa' que llame la atencion
on 25/6/08

vendaval wrote:
hola roberto, lo mejor seria poner lo que quieres comunicarnos como una noticia en portada
on 28/3/08

roberto wrote:
como envio un email a todos los miembros de mononeurona
on 26/3/08

vendaval wrote:
pienso que debria crear una version viva para ms necesidades
on 28/1/08

asarch wrote:
O tambien en: http://www.openbsd.org/ en la forma más pura que puedas encontrar en la red
on 26/1/08

¿Qué estuve haciendo?
=( Se em barrio y estoy en un curso de GNU/linux para usuarios Noveles
2 days, 15 hours ago
Tambien escribo recetas de cocina y chistes =P
3 days, 5 hours ago
@Tuanis: En tu Blog pones sobre lo que te interesa, yo hablo de computacion, aunque
3 days, 5 hours ago
Manda mas o menos la receta Saidjose, asi pruebo a ver si sale
4 days, 21 hours ago
cuando se haga la monochelada estaria chido para acompañar.
5 days, 3 hours ago
yo estoy probando cocinar costillas a la BBQ en Carbon, si me salen bien
5 days, 3 hours ago
Estudio a fondo un asunto sobre la nueva red de la uam
6 days, 4 hours ago
@asarch: hablales bonito de mi. que voy a oaxaca en enero.
1 week, 3 days ago
Pero en la biblioteca Central no estaban, aunque tienen sus tesoros =)
1 week, 6 days ago
Me di una vuelta a CU a ver si tenian algunos libros que ocupo.
1 week, 6 days ago
Galerias
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2008.