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".
#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
Comentblogs:1.-
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
¡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 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
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 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
!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 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
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 wrote:
Y lo mas importante, que tal estan las chamacas por alla? estan chulas?
Fotos, fotos, fotos...
2007-11-13 18:06:32-06
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 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
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 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
#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










