Pasar arreglos a una función en C Por default, los arrreglos en C se pasan a una función como referencia y no como valor. Esto significa que todas las modificaciones que hagamos dentro de la función en C al arreglo que recibimos como parámetro, realmente se realizan en el arreglo original que se utilizó como argumento al momento de llamar a la función. Al escribir una función en C, la forma de indicar que uno de los parámetros que se va a recibir es un arreglo de una dimensión, es decir de que tipo va a ser el arreglo y el nombre con el cual vamos a manipular dicho arreglo dentro de nuestra función seguido de corchetes que abren y cierran; nuestra función también debe recibir un segundo parámetro que nos indique el tamaño del arreglo, o dicho de otra forma, el número de elementos de los que consta nuestro arreglo, recordemos que como el arreglo se pasa a la función como referencia, lo que esta recibiendo la función en realidad es un apuntador al primer elemento del arreglo, pero no sabe en donde termina el arreglo, por eso es necesario que la función también reciba como parámetro el número de elementos del arreglo. Por ejemplo, el prototipo de una función en C que va a regresar un entero y va a recibir un arreglo de 10 elementos de tipo entero sería algo asi: int MiFuncion(int mi_arreglo[], int num_elemetos); Para llamar a la función anterior, se pone como primer argumento el nombre del arreglo (sin corcehetes) y como segundo argumento el número de elementos del arreglo. Supongamos que tenemos un arreglo de 10 elementos de tipo entero llamado numeros y queremos guardar en una variable llamada “x” el valor que nos regresa la función “MiFuncion” al llamarla pasandole como argumentos el arreglo “numeros”, haríamos algo como esto x = MiFuncion(numeros, 10); El siguiente programa solicita al usuario que ingrese 10 números de tipo entero y los almacena en un arreglo; después le pide que introduzca un número para que busque su posición dentro del arreglo.. El programa utiliza una función llamada BuscaNumero que recibe como parámetros el arreglo con los 10 números capturados, el número de elementos del arreglo (en este caso 10) y el número del cual se desea saber su posición dentro del arreglo.. La función regresa
-1 si el número que se busca no se encuentra en el arreglo y en caso contrario, regresa la primera posición del arreglo que contiene dicho número. El programa también utiliza una función llamada MuestraArreglo que no regresa valor alguno, sólo recibe como parámetros el arreglo y el número de elementos. Esta función imprime en pantalla los elementos del arreglo separados por un tabulador.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include
int BuscaNumero(int valores[], int tamanio, int busca) { int i=0, posicion=-1; do { if (valores[i]==busca) posicion=i; else ++i; } while(i
40 41 42 43 44 45 46 47 48 49 50 51 52 53
posicion=BuscaNumero(ar_numeros,10,numero); if (posicion != -1) printf("El número %d está en la posición %d del arreglo\n",numero, posicion); else printf("El número %d no está en el arreglo\n",numero); return 0; }
Para pasar a una función un arreglo de dos dimensiones, si debemos indicar el tamaño de la segunda dimensión del arreglo Ejemplo:int MiFuncion(int mi_arreglo[][5], int num_elemetos); El siguiente programa le pide al usuario que introduzca 9 números y los almacena en un arreglo de dos dimensiones, en este caso una matriz de 3×3; posteriormente utiliza una función llamada ImprimeMatriz para mostrar como quedaron almacenados los números en la matriz. Dicha función recibe como parámetros, la matriz de 3×3 y el tamaño de la primera dimensión (normalmente la primera dimensión son filas y la segunda dimensión columnas).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include void ImprimeMatriz(int m[][3], int filas) { int i=0,j=0; for (i=0; i
printf("Introduzca los valores para la matriz\n"); for (x=0; x<3; ++x) { for (y=0; y<3; ++y) { printf("Valor para el elemento [%d][%d]: ", x, y); scanf("%d",&matriz[x][y]); } printf("\n"); }
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
printf("Matriz\n"); ImprimeMatriz(matriz, 3); return 0; }
Manual de C Nuestro agradecimineto a Hector Tejeda autor del mismo
6.1 Funciones void 6.2 Funciones y arreglos 6.3 Prototipos de funciones 6.4 Ejercicios
6. Funciones Una función es un conjunto de declaraciones, definiciones, expresiones y sentencias que realizan una tarea específica. El formato general de una función en C es
especificador_de_tipo nombre_de_función( lista_de_parámetros ) { variables locales código de la función } El especificador_de_tipo indica el tipo del valor que la función devolverá mediante el uso de return. El valor
puede ser de cualquier tipo válido. Si no se específica un valor, entonces la computadora asume por defecto que la función devolverá un resultado entero. No se tienen siempre que incluir parámetros en una función. la lista de parámetros puede estar vacía. Las funciones terminan y regresan automáticamente al procedimiento que las llamó cuando se encuentra la última llave }, o bien, se puede forzar el regreso antes usando la sentencia return. Ademas del uso señalado la función return se usa para devolver un valor. Se examina a continuación un ejemplo que encuentra el promedio de dos enteros:
float encontprom(int num1, int num2) { float promedio; promedio = (num1 + num2) / 2.0; return(promedio); } main() { int a=7, b=10; float resultado; resultado = encontprom(a, b); printf("Promedio=%f\n",resultado); }
6.1 Funciones Void Las funciones void dan una forma de emular, lo que en otros lenguajes se conocen como procedimientos (por ejemplo, en PASCAL). Se usan cuando no requiere regresar un valor. Se muestra un ejemplo que imprime los cuadrados de ciertos números.
void cuadrados() { int contador; for( contador=1; contador<10; contador++) printf("%d\n",contador*contador); } main() { cuadrados(); }
En la función cuadrados no esta definido ningún parámetro, y por otra parte tampoco se emplea la sentencia return para regresar de la función.
6.2 Funciones Y Arreglos
Cuando se usan un arreglo como un argumento a la función, se pasa sólo la dirección del arreglo y no la copia del arreglo entero. Para fines prácticos podemos considerar el nombre del arreglo sin ningún índice como la dirección del arreglo. Considerar el siguiente ejemplo en donde se pasa un arreglo a la función imp_rev, observar que no es necesario especificar la dimensión del arreglo cuando es un parámetro de la función.
void imp_rev(char s[]) { int t; for( t=strlen(s)-1; t>=0; t--) printf("%c",s[t]); } main() { char nombre[]="Facultad"; imp_rev(nombre); }
Observar que en la función imp_rev se usa la función strlen para calcular la longitud de la cadena sin incluir el terminador nulo. Por otra parte, la función imp_rev no usa la sentencia return ni para terminar de usar la función, ni para regresar algún valor. Se muestra otro ejemplo,
float enconprom(int tam, float lista[]) { int i; float suma = 0.0; for ( i=0; i
Para el caso de que se tenga que pasar un arreglo con más de una dimensión, no se indica la primera dimensión pero, el resto de las dimensiones deben señalarse. Se muestra a continuación un ejemplo:
void imprtabla(int tamx,int tamy, float tabla[][5]) { int x,y;
for ( x=0; x
6.3 Prototipos De Funciones Antes de usar una función C debe tener conocimiento acerca del tipo de dato que regresará y el tipo de los parámetros que la función espera. El estándar ANSI de C introdujó una nueva (mejor) forma de hacer lo anterior respecto a las versiones previas de C. La importancia de usar prototipos de funciones es la siguiente:
Se hace el código más estructurado y por lo tanto, más fácil de leer. Se permite al compilador de C revisar la sintaxis de las funciones llamadas.
Lo anterior es hecho, dependiendo del alcance de la función. Básicamente si una función ha sido definida antes de que sea usada (o llamada), entonces se puede usar la función sin problemas. Si no es así, entonces la función se debe declarar. La declaración simplemente maneja el tipo de dato que la función regresa y el tipo de par^o'ametros usados por la función. Es una práctica usual y conveniente escribir el prototipo de todas las funciones al principio del programa, sin embargo esto no es estrictamente necesario. Para declarar un prototipo de una función se indicará el tipo de dato que regresará la función, el nombre de la función y entre paréntesis la lista del tipo de los parámetros de acuerdo al orden que aparecen en la definición de la función. Por ejemplo:
int longcad(char []);
Lo anterior declara una función llamada longcad que regresa un valor entero y acepta una cadena como parámetro.
6.4 Ejercicios 1.
2. 3.
Escribir una función ``reemplaza'', la cual toma una cadena como parámetro, le reemplaza todos los espacios de la cadena por un guión bajo, y devuelve el número de espacios reemplazados. Por ejemplo:
char cadena[] = "El gato negro"; n = reemplaza( cadena ); deberá devolver:
cadena convertida "El_gato_negro" n = 2
4. 5.
Escribir un programa que lea una línea de texto en un buffer (una cadena de caracteres) usando la función gets y calcule la longitud de la línea (NO usar la función strlen). Modificar el programa anterior para que lea un archivo de texto. El archivo deberá redireccionarse al programa, debiendo mostrar el contenido del mismo. En caso de que se lea una línea con longitud 0 deberá terminar el programa.
7.1. Arreglos unidimensionales (listas) y multidimensionales (tablas) Ejemplos de uso de arreglos A continuación se muestra un programa sencillo donde se declara un arreglo de diez elementos, se recorre el arreglo para iniciar todos los elementos en 0, y posteriormente se imprimen los valores de los elementos con su subíndice correspondiente.
#include (stdio.h) #include (conio.h) main( ) { int n[10], i; /*declaración del arreglo n y la variable entera i */
for (i=0; i<=9; i++) /* ciclo de inicialización del arreglo */ n[i]=0; printf("%8s%13s\n", "Elemento", "Valor");
for (i=0; i<=9; i++) /* ciclo para mostrar los valores del arreglo */ printf("%8d%13d\n", i, n[i]); getch ( ); return 0; }
Los elementos de un arreglo también pueden ser inicializados en la misma declaración del arreglo, siguiendo al nombre del arreglo con un signo igual y una lista de valores separados por coma y encerrados entre llaves. Si el número de valores indicado es menor al número de elementos en el arreglo, los elementos restantes se inicializan automáticamente en cero. Sin embargo si el número de valores inicializadores es mayor al número de elementos en el arreglo se genera un error.
El siguiente ejemplo muestra una inicialización en la declaración:
/* Inicializacion de un arreglo dentro de la declaracion */ #include (stdio.h) #include (conio.h) main( ) { /*declaracion e inicializacion del arreglo n */ int n[10] = {32,27,64,18,95,14,90,70,60,37}; int i;
printf("%8s%13s\n", "Elemento", "Valor"); for (i=0; i<=9; i++) /* ciclo para mostrar los valores del arreglo */ printf("%8d%13d\n", i, n[i]); getch ( ); return 0; }
Si de una declaración con una lista inicializadora se omite el tamaño del arreglo, el número de elementos en el arreglo será el número de elementos incluidos en la lista inicializadora. Por ejemplo:
int n[]={2,4,6,8};
se reserva memoria para 4 elementos del arreglo n (del elemento 0 al 3).
En el ejemplo siguiente la línea: #define TAMANO 12 define una constante simbólica TAMANO cuyo valor es 12. Una constante simbólica es un valor que se reemplaza con texto de reemplazo en el preprocesador C, antes de que el programa sea compilado. Cuando el programa es preprocesado, todas las instancias de la constante simbólica TAMANO serán remplazadas por el texto de reemplazo 12. Esa es la función de la directiva del preprocesador #define.
/* Calcular la suma de los elementos de un arreglo */ #include (stdio.h) #include (conio.h) #define TAMANO 12 main( ) { int a[TAMANO] = {10,8,7,52,42,27,18,95,14,70,60,37}, i, total=0; for (i=0; i<=TAMANO -1; i++) /*ciclo para acumulación de valores*/ total+=a[i]; printf("La suma de los elementos del arreglo es %d\n", total); getch ( ); return 0; }
En el siguiente ejemplo se utilizan dos arreglos para la determinación de frecuencias de respuesta en una encuesta. También se utiliza la directiva del preprocesador #define.
/* Programa de frecuencias */ #include (stdio.h) #include (conio.h) #define NUMERO_RESPUESTAS 40 #define NUMERO_FRECUENCIAS 11
main() { int respuesta, numero; int respuestas[NUMERO_RESPUESTAS] = {1,2,5,6,3,4,7,8,10,2,5, 8,10,9,1,4,5,7,5,1,4,5,8,7,8,2,1,8,10,10,10,9,8,5,6,7,5,6,5,6}; int frecuencia[NUMERO_FRECUENCIAS]={0}; /* Inicialización en cero */ /* Con el siguiente ciclo se recorre el arreglo de respuestas y se incrementa el arreglo de frecuencias en su elemento correspondiente */ for (respuesta=0; respuesta <= NUMERO_RESPUESTAS -1; respuesta++) ++frecuencia[respuestas[respuesta]];
printf("%8s%13s\n", "Número", "Frecuencia");
/* Ciclo de impresión de frecuencias */ for (numero=1; numero<=10; numero++) printf("%8d%13d\n", numero, frecuencia[numero]); getch ( ); return 0; }
En el siguiente ejemplo se utilizan arreglos para la impresión de un histograma.
/* Impresión de histogramas */ #include (stdio.h) #include (conio.h) #define TAMANO 10 main( ) { int n[TAMANO] = {10,8,7,18,14,6,10,15,4,2}; int i, j; printf("%15s%15s%s%-20s\n","Elemento","Valor"," ","Histograma"); /*Ciclo para la impresión de cada valor */ for (i=0; i<=TAMANO -1; i++) { printf("%15d%15d%s",i, n[i]," "); /* ciclo para la impresión de cada asterisco (de 1 hasta el valor de n[i], es decir el valor del elemento */ for (j=1; j<=n[i]; j++) printf("%c",'*'); printf("\n"); } getch ( ); return 0; }
En C una cadena de caracteres es un arreglo de caracteres individuales. Los arreglos de caracteres tienen varias características únicas. Un arreglo de caracteres puede ser inicializado utilizando una literal de cadena. Por ejemplo:
char string1[] = “primero”;
inicializa los elementos de la cadena o arreglo de caracteres string1 a los caracteres individuales de la cadena “primero”. El tamaño del arreglo queda determinado por el compilador, basado en la longitud de la cadena. La cadena “primero” contiene 7 caracteres más un caracter especial de terminación de cadena, conocido como caracter nulo. Entonces el arreglo string1 contiene 8 elementos. La representación del caracter nulo es „\0‟. En C todas las cadenas terminan con este caracter. Un arreglo de caracteres que represente una cadena, debe declararse siempre lo suficientemente grande para contener el número de caracteres de la cadena incluyendo el caracter nulo de terminación.
La declaración anterior es equivalente a:
char string1[]={„p‟,‟r‟,‟i‟,‟m‟,‟e‟,‟r‟,‟o‟,‟\0‟};
Dado que la cadena es una arreglo se puede referenciar un caracter en particular utilizando el subíndice. Por ejemplo string1[0] es „p‟, y string1[4] es la „m‟.
Se puede leer desde teclado una cadena de caracteres con scanf de la siguiente forma:
char string2[20]; /* declaración del arreglo de 19 caracteres y el nulo */ scanf(“%s”, string2); /*lectura de teclado de una cadena y asignación a string2 */
en este caso no se utiliza el operador de dirección &, puesto que un arreglo es ya de por sí la dirección en memoria del inicio del arreglo.
La función scanf lee caracteres de teclado hasta que se encuentra el primer caracter de espacio en blanco sin importar el tamaño.
Es posible imprimir una cadena de caracteres con printf de la siguiente forma:
printf(“%s”, string2);
En el siguiente ejemplo se analiza el manejo de arreglos de tipo char.
/* Manejo de arreglos de tipo char */ #include (stdio.h) #include (conio.h) main( ) { char string1[20], string2[]="Cadena de Caracteres"; int i;
printf("Introduzca un string: "); scanf("%s", string1); printf("El string1 es: %s\n",string1); printf("El string2 es: %s\n",string2); printf("El string1 con espacios es: \n"); /* impresion con un espacio despues de cada caracter*/ for (i=0; string1[i] != '\0'; i++)
if (string1[i]>='a' && string1[i]<='z') /* si es una letra minuscula hacerla mayuscula */ printf("%c ", string1[i]-32); else /* si no es letra minuscula imprimir tal cual */ printf("%c ", string1[i]); printf("\n"); getch ( ); return 0; }
Paso de arreglos como parámetros a funciones. Para pasar como argumento un arreglo a una función, se especifica el nombre del arreglo, sin corchetes, por ejemplo, para pasar a una función imprimePresion el arreglo PresionDiaria se realiza de la siguiente manera:
imprimePresion(PresionDiaria, 7);
en este ejemplo se pasa también como parámetro la longitud del arreglo, esto se hace normalmente para que las funciones puedan procesar todos los elementos del arreglo sin tratar de acceder a elementos inexistentes.
C pasa de forma automática los arreglos a las funciones utilizando simulación de llamadas por referencia, es decir, las funciones llamadas pueden modificar los valores de los elementos en los arreglos originales de los llamadores. Esto se debe a que la función llamada no realiza una copia como lo hace con las variables normales, sino que recibe la dirección de memoria del inicio del arreglo, por tanto, donde se hacen las posibles asignaciones dentro de las funciones es en los espacios originales que ocupa el arreglo en memoria.
Para que una función reciba un arreglo a través de una llamada de función, la lista de parámetros de la función debe especificar que se va a recibir un arreglo. Por ejemplo, el encabezado de función para la función modificarArreglo puede ser escrito como:
void modificarArreglo(int b[], int size)
A continuación se presenta un ejemplo utilizando llamadas a funciones con paso de arreglos como parámetros.
/* Pasando arreglos y elementos individuales de arreglo a funciones */ #include (stdio.h) #include (conio.h) #define SIZE 5 void modificarArreglo( int [], int); /*prototipos de funcion*/ void modificarElemento(int);
main( ) { int a[SIZE] = {4,3,2,1,0}; int i; printf("Efecto de pasar un arreglo a una funcion\n"); printf("Los valores originales son:\n"); for (i=0; i<=SIZE-1; i++) printf("%3d", a[i]); printf("\n"); modificarArreglo(a, SIZE); printf("Los valores modificados son:\n"); for (i=0; i<=SIZE-1; i++) printf("%3d", a[i]); printf("\n\nEfecto de pasar un solo elemento por valor\n"); printf("El valor de a[3] es: %d\n", a[3]); modificarElemento(a[3]); printf("El valor de a[3] es: %d\n", a[3]); getch ( ); return 0; } /* función que modifica los valores del arreglo */ void modificarArreglo(int c[], int size) { int j; for (j=0; j<=size-1; j ++) c[j] *= 2; } /* función que modifica un entero, en este caso un elemento del arreglo */ void modificarElemento(int elemento) { printf("El valor en modificarElemento es: %d\n", elemento *= 2); }
Existen situaciones en las que no se desea que el arreglo original sea modificado por una función. En estos casos es necesario utilizar el calificador especial const, calificando al arreglo tanto en el prototipo como en el encabezado de la función, cuando se hace esto el arreglo se recibe como constante, y cualquier modificación que se intente hacer sobre él, causará un error. El siguiente programa es un ejemplo de ello:
/* Demostracion del calificador de tipo const */ #include (stdio.h) #include (conio.h) void tratarDeModificarArreglo(const int []); main( ) { int a[]= {10,20,30}; tratarDeModificarArreglo(a); printf("%d %d %d\n", a[0], a[1], a[2]); return 0; }
void tratarDeModificarArreglo(const int b[]) { /*Generan error: No se puede modificar un objeto constante */ b[0] /= 2; b[1] /= 2; b[2] /= 2; }
Ordenamiento de arreglos. La mayoría de las aplicaciones de cómputo requieren tener datos ordenados En el siguiente ejemplo se realiza uno de los métodos de ordenación más simples conocido como método de burbuja u ordenación por hundimiento. La técnica consiste en llevar a cabo varias pasadas a través del arreglo, en cada pasada se comparan pares sucesivos de elementos. Si un par está en orden creciente (o son valores idénticos), los valores se quedan tal como están. Si un par aparece en orden decreciente sus
valores se intercambian de lugar, utilizando una variable que almacenará temporalmente el valor del primer elemento, éste tomará el valor del segundo elemento del par, y por último el segundo tomará el valor temporal que correspondía al primer elemento.
/* Ordenamiento de arreglo por método de burbuja */ #include (stdio.h) #include (conio.h) #define SIZE 10 main( ) { int a[SIZE]= {12,35,6,48,8,27,32,87,52,75}; int i, temporal, ciclo; printf("Los valores en el orden original son: \n"); for (i=0; i<= SIZE -1; i++) printf("%4d", a[i]); /* Ordenamiento */ for (ciclo=1; ciclo<=SIZE -1; ciclo++) for (i=0; i<=SIZE-1-ciclo; i++) /*Intercambio de valores en caso de no estar en orden */ if (a[i] > a[i+1]) { temporal = a[i]; a[i] = a[i+1]; a[i+1]= temporal; } /*Impresion de valores ordenados */ printf("\nLos valores ordenados son: \n"); for (i=0; i<= SIZE -1; i++) printf("%4d", a[i]); getch ( ); return 0; }
Existen otros métodos de ordenamiento más complejos en cuanto a su implementación, pero más
eficientes en el número total de comparaciones que realizan, ocupando menor tiempo (en términos computacionales) en ordenar el arreglo.
Búsqueda de arreglos Existen también varios métodos para buscar un elemento en un arreglo, sin embargo, el buen funcionamiento de algunos depende de que los elementos del arreglo estén ordenados de alguna manera. El método para buscar un elemento en un arreglo que no se encuentre ordenado (también funciona para arreglos ordenados), es la búsqueda lineal, que consiste en comparar cada elemento del arreglo (comenzando por el primero) con el valor buscado, y cuando se encuentre uno igual, señalar el índice del elemento correspondiente.
El siguiente ejemplo muestra una función que realiza la búsqueda lineal de un elemento.
/* Busqueda lineal en un arreglo */ #include (stdio.h) #include (conio.h) #define SIZE 10 int BusquedaLineal(int [], int,int); main() { int a[SIZE]= {12,35,6,48,8,27,32,87,52,75}; int valorBuscado, indiceValor, i; clrscr(); printf("Introduzca el valor a buscar en el arreglo: "); scanf("%d", &valorBuscado); indiceValor= BusquedaLineal(a,valorBuscado, SIZE); if (indiceValor != -1) printf("%d corresponde al elemento %d", valorBuscado, indiceValor); else printf("No se encontro %d en el arreglo",valorBuscado); return 0; }
int BusquedaLineal(int arreglo[], int valor, int size) { int j; /*Compara todos los elementos */ for (j=0; j<=size-1;j++) if (arreglo[j]==valor) return j; /* Valor regresado en cuanto lo encuentra*/ return -1; /* regresa -1 cuando no encuentra el valor */ }
Para arreglos ordenados es muy utilizado el método de búsqueda binaria, que consiste en irse directamente al elemento de central (posición de en medio) del arreglo, si el valor buscado es menor la primera mitad del arreglo se desecha, y si es mayor la se desecha la segunda. Se hace lo mismo con la parte que quedo del arreglo buscando el punto medio, y así sucesivamente. El mayor número de comparaciones posibles es igual a la mitad del tamaño del arreglo.
/* Busqueda binaria en un arreglo */ #include (stdio.h) #include (conio.h) #define SIZE 10 void OrdenaArreglo(int[] , int ); int BusquedaBinaria(int [], int , int ); main( ) { int b[SIZE]= {12,35,6,48,8,27,32,87,52,75}; int valorBuscado, elemento, i; clrscr(); OrdenaArreglo (b, SIZE); printf("Los valores del arreglo son: \n"); for (i=0; i<= SIZE -1; i++) printf("%4d", b[i]); printf("\n\nIntroduzca el valor a buscar en el arreglo: "); scanf("%d", &valorBuscado);
elemento = BusquedaBinaria(b, valorBuscado, SIZE); if (elemento != -1) printf("%d es el elemento %d", valorBuscado, elemento); else printf("No se encontro %d en el arreglo", valorBuscado); getch ( ); return 0; } /* Ordenamiento */ void OrdenaArreglo(int a[], int size) { int ciclo, temporal,i; for (ciclo=1; ciclo<=size -1; ciclo++) for (i=0; i<=size-1-ciclo; i++) if (a[i] > a[i+1]) { temporal = a[i]; a[i] = a[i+1]; a[i+1]= temporal; } } /*Busqueda binaria */ int BusquedaBinaria(int arreglo[], int valor, int size) { int medio, primero=0, ultimo=size -1; while (primero <= ultimo) { medio= (primero + ultimo) / 2; if (valor == arreglo [medio]) return medio; else if (valor < arreglo [medio]) ultimo = medio - 1;
else primero = medio + 1; } return -1; }
Arreglos bidimensionales En algunos lenguajes de programación, y es el caso de C, se permiten arreglos de varios subíndices, es decir, arreglos multidimensionales. Generalmente estos arreglos se utilizan para representar tablas de valores con renglones y columnas, donde el primer subíndice representa el renglón y el segundo la columna. Para referenciar cualquier elemento del arreglo se deben indicar los dos subíndices.
Un arreglo de múltiple subíndice puede ser inicializado en su declaración en forma similar a un arreglo de un subíndice. Por ejemplo, un arreglo de doble subíndice b[2][2] puede ser inicializado con
int b[2][2] = {{ 1, 2}, {3, 4}};
Los valores se agrupan por renglones entre llaves. Por lo tanto, 1 y 2 inicializan b[0][0] y b[0][1], 3 y 4 inicializan b[1][0] y b[1][1]. Si para un renglón dado no se proporcionan suficientes inicializadores, los elementos restantes de dicho renglón se inicializarán a 0. Por ejemplo:
int b[2][2] = {{ 1}, {3, 4}};
inicializaría b[0][0] en 1 y b[0][1] en 0, b[1][0] en 3 y b[1][1] en 4.
En la tabla siguiente se muestra la representación gráfica de un arreglo con tres renglones y cuatro columnas.
Columna0 Renglón0 Renglón1 Renglón2
a[0][0] a[1][0] a[2][0]
Columna1 Columna2 Columna 3 a[0][1] a[1][1] a[2][1]
a[0][2] a[1][2] a[2][2]
a[0][3] a[1][3] a[2][3]
El recorrido de un arreglo de dos dimensiones para impresión o para cualquier procesamiento deberá hacerse con dos ciclos for anidados, de tal modo que el más exterior recorra todos los renglones, y para cada renglón (el ciclo for interior) recorra todas las columnas del arreglo, de tal forma que cada elemento sea referenciado en los ciclos anidados. A continuación se muestra un ejemplo simple para impresión de un arreglo bidimensional.
/* Inicialización de arreglos bidimensionales */ #include (stdio.h) #include (conio.h) void imprimeArreglo(int [][3]); main( ) { int arreglo1[2][3] = { {1,2,3}, {4,5,6}}, arreglo2[2][3] = { 1,2,3,4,5}, arreglo3[2][3] = { {1,2}, {4}}; clrscr(); printf("Los valores en arreglo1 por renglón son: \n"); imprimeArreglo(arreglo1); printf("Los valores en arreglo2 por renglón son: \n"); imprimeArreglo(arreglo2); printf("Los valores en arreglo3 por renglón son: \n"); imprimeArreglo(arreglo3); getch ( ); return 0; } void imprimeArreglo(int arreglo[][3]) { int i,j; for (i=0; i<=1; i++) { for (j=0; j<=2; j++) printf("%5d", arreglo[i][j]); printf("\n");
} }
PRACTICA DE ARREGLOS. En un grupo existen cinco alumnos, los cuales presentaron tres exámenes cada uno obteniendo las siguientes calificaciones:
CALIFICACIONES ALUMNOS Examen0 Examen1 Examen2 Alumno0
77
74
84
Alumno1
96
85
76
Alumno2
70
69
88
Alumno3
58
86
90
Alumno4
75
91
72
Se desea obtener la tabla de calificaciones (semejante a la mostrada), la calificación más baja, la calificación más alta y el promedio por cada alumno.
El problema se resuelve de la siguiente forma:
Como se conoce el número de alumnos y el número de calificaciones se definirán dos constantes simbólicas ALUMNOS y EXAMENES de 5 y 3 respectivamente.
/* Ejemplo de arreglos bidimensionales */ #include (stdio.h) #include (conio.h) #define ALUMNOS 5 #define EXAMENES 3
Debido a que se utilizarán funciones para imprimir los valores, encontrar la calificación mínima, la máxima y el promedio por alumno, es necesario comenzar a trabajar con dichas funciones. La función mínima debe encontrar la calificación más baja entre todos los elementos del arreglo, por tanto será necesario que reciba como parámetros el mismo arreglo, el número de filas (o alumnos) y el número
de columnas (calificaciones), esto debido a que la función no debe ignorar elementos, ni tampoco tratar de acceder a elementos que no existen en el arreglo. La manera de encontrar la calificación mínima es suponer una mínima seguramente mayor a todas, como 100 (para que sea sustituida rápidamente por el primer elemento del arreglo). Todas los elementos se compararán con la calificación mínima registrada hasta el momento, y de ser menor, este valor será asignado a la variable minimo, de tal forma que al término del recorrido de todo el arreglo, la variable minimo contenga el valor de la calificación más baja.
/*Calificación mínima */ int minima (int calificaciones[][EXAMENES], int alum, int prueba) { int i, j, minimo = 100; for (i=0;i<=alum-1; i++) for (j=0; j<=prueba-1; j++) if (calificaciones[i][j] < minimo) minimo = calificaciones[i][j]; return minimo; }
De la misma forma que la función minima, deberá plantearse la función maxima, que encontrará la calificación más alta. En este caso la variable maximo es iniciada en 0 para ser sustituida por cualquier elemento mayor. Posteriormente se recorre el arreglo y se va guardando el valor mayor en la variable maximo.
/* Calificación máxima */ int maxima (int calificaciones[][EXAMENES], int alum, int prueba) { int i, j, maximo = 0; for (i=0;i<=alum-1; i++) for (j=0; j<=prueba-1; j++) if (calificaciones[i][j] > maximo) maximo = calificaciones[i][j]; return maximo;
}
La función para imprimir el arreglo, simplemente hace un recorrido en un primer ciclo for, de todos los renglones (alumnos) en el arreglo, y en un for anidado recorre cada una de las columnas de cada fila (calificaciones), imprimiendo renglón por renglón.
/* imprime el arreglo */ void imprimeArreglo(int calificaciones[][EXAMENES], int estudiante, int pruebas) { int i,j; printf("\n%-20s%-30s\n"," ", "CALIFICACIONES"); printf("%-20s%6s%6s%6s", "ALUMNO","[0]","[1]","[2]","[3]"); for (i=0; i<= estudiante-1; i++) { printf("\nAlumno %d ", i); for(j=0; j<=pruebas-1; j++) printf("%6d", calificaciones[i][j]); } }
Para determinar el promedio por alumno se hará otra función, que devuelve un tipo float (el promedio) y que recibe únicamente dos parámetros, un arreglo de una sola dimensión y el tamaño de este arreglo (el número de calificaciones). El arreglo sencillo corresponde a las tres calificaciones del alumno en cuestión. La función acumula mediante un ciclo todos los valores para posteriormente dividirlo entre el total de calificaciones (la variable pruebas).
/*Promedio */ float promedio(int calif[], int pruebas) { int i, total=0; for (i=0; i<=pruebas-1; i++) total += calif[i]; return total/pruebas;
}
En la función main (programa principal) se declararán dos variables enteras, una representando el arreglo de calificaciones, donde tendremos 5 renglones (de alumnos) y 3 columnas (de calificaciones), que se inicializará en la misma declaración. La otra variable entera ialumno, servirá para recorrer el arreglo en todas sus filas, es decir, alumno por alumno. Una vez hecho esto deben mandar llamarse las funciones creadas de la forma correcta para obtener los resultados deseados.
main() { int ialumno, alumCalif[ALUMNOS][EXAMENES] = {{77,74,84},{96,85,96}, 70,69,88},{58,86,90},{75,91,72}}; clrscr(); printf("El arreglo es: \n"); imprimeArreglo(alumCalif, ALUMNOS, EXAMENES); printf("\n\nCalificación más baja: %d\n", minima(alumCalif,(ALUMNOS,EXAMENES)); printf("Calificación más alta: %d\n", maxima(alumCalif,ALUMNOS,EXAMENES)); for (ialumno=0; ialumno<=ALUMNOS - 1; ialumno ++) printf("\nEl promedio para el alumno %d es: %.2f\n", ialumno, promedio(alumCalif[ialumno], EXAMENES)); getch ( ); return 0; }
No hay que olvidar que las definiciones de las funciones deben ubicarse después de main y que antes de main debe existir un prototipo. De este modo el programa completo queda de la siguiente manera:
/* Ejemplo de arreglos bidimensionales */ #include (stdio.h) #include (conio.h) #define ALUMNOS 5 #define EXAMENES 3 int minima(int [][EXAMENES], int, int);
int maxima(int [][EXAMENES], int, int); float promedio(int [], int); void imprimeArreglo( int [][EXAMENES], int, int);
main( ) { int ialumno, alumCalif[ALUMNOS][EXAMENES] = {{77,74,84},{96,85,96}, {70,69,88},{58,86,90},{75,91,72}}; clrscr(); printf("El arreglo es: \n"); imprimeArreglo(alumCalif, ALUMNOS, EXAMENES); printf("\n\nCalificación más baja: %d\n", minima(alumCalif, ALUMNOS,EXAMENES)); printf("Calificación más alta: %d\n", maxima(alumCalif, ALUMNOS,EXAMENES)); for (ialumno=0; ialumno<=ALUMNOS - 1; ialumno ++) printf("\nEl promedio para el alumno %d es: %.2f\n", ialumno, promedio(alumCalif[ialumno], EXAMENES)); return 0; }
/*imprime el arreglo */ void imprimeArreglo(int calificaciones[][EXAMENES], int estudiante, int pruebas) { int i,j; printf("\n%-20s%-30s\n"," ", "CALIFICACIONES"); printf("%-20s%6s%6s%6s", "ALUMNO","[0]","[1]","[2]","[3]"); for (i=0; i<= estudiante-1; i++) { printf("\nAlumno %d ", i); for(j=0; j<=pruebas-1; j++) printf("%6d", calificaciones[i][j]); } }
/*Calificación mínima */ int minima (int calificaciones[][EXAMENES], int alum, int prueba) { int i, j, minimo = 100; for (i=0;i<=alum-1; i++) for (j=0; j<=prueba-1; j++) if (calificaciones[i][j] < minimo) minimo = calificaciones[i][j]; return minimo; }
/*Calificación máxima */ int maxima (int calificaciones[][EXAMENES], int alum, int prueba) { int i, j, maximo = 0; for (i=0;i<=alum-1; i++) for (j=0; j<=prueba-1; j++) if (calificaciones[i][j] > maximo) maximo = calificaciones[i][j]; return maximo; }
/*Promedio */ float promedio(int calif[], int pruebas) { int i, total=0; for (i=0; i<=pruebas-1; i++) total += calif[i]; return total/pruebas; }
ractica 10: Ejercicios con Arreglos unidimensionales. Materia: Lógica Computacional. Profesor: Lic. Salomón Aquino.
I. Objetivo. Al finalizar la práctica el estudiante será capaz de: • Definir estructuras de datos y arreglos. • Utilizar arreglos en una dimensión para resolver problemas. II. Introducción Teórica. Los Arreglos (Vectores o Array) Un array (lista o tabla9 es una secuencia de datos del mismo tipo. Los datos se llaman elementos del array y se numeran consecutivamente 0, 1, 2, 3, ,, etc. Estos números se denominan valores índice o subíndice del array. El tipo de elementos almacenados en el array pueden ser cualquier tipo de dato de C, incluyendo estructuras definidas por el usuario. Entonces, podemos entender los arrays (también conocidos como arreglos o formaciones) como variables que contienen diferentes tipos de datos homogéneos. Se puede acceder a cada elemento de datos individual de la variable mediante un subíndice, o índice. En los lenguajes C y C++, un array no se corresponde con un tipo de dato estándar; en su lugar, se trata de un tipo agregado que se obtiene a partir de otros tipos de datos. Es posible tener un array de cualquier cosa: caracteres, enteros, números en coma flotante, arrays, etc. Un array se declara de modo similar a otros tipos de datos, excepto que se debe indicar al compilador el tamaño o longitud del array. Para indicar al compilador el tamaño o longitud del array se debe hacer seguir al nombre, el tamaño encerrado entre corchetes. Los arrays tienen cuatro propiedades básicas: • Los elementos individuales de datos de un array se denominan elementos. • Todos los elementos deben ser del mismo tipo de dato. • Todos los elementos se almacenan en posiciones contiguas de la memoria de la computadora y el subíndice (o índice) del primer elemento es cero. • El nombre de un array es un valor constante que representa la dirección del primer elemento del array. Para acceder a un elemento especifico del array, se utiliza el nombre de éste seguido por uno o más “índices” (donde cada uno representa una dimensión del arreglo o array) encerrado entre corchetes. Supongamos que tenemos un arreglo unidimensional llamado X con un tamaño de “n” elementos, su esquema grafico es el siguiente:
Como puede verse en el esquema, aunque el arreglo es de “n” elementos, en realidad tienen “n1” elementos porque comienzan a enumerarse desde cero. En términos generales para definir un array se especifica el tipo de almacenamiento (atributo opcional), el tipo de datos, el identificador y entre corchetes el tamaño del arreglo. Abajo se muestra algunos ejemplos de definición de arreglos:
a) int num[100]; (un array de 100 enteros) b) char apellido[25]; (un array de 25 caracteres) c) float prom[30]; (un array de 30 coma flotante) d) char contrasena[16]; (un array de 16 caracteres)
La necesidad de definir arrays en función de constantes A veces es conveniente definir el tamaño de un array en términos de una constante, en lugar de estar especificando una cantidad entera fija. Esto se realiza por facilidad de mantenimiento. Por ejemplo, suponga que tenemos un programa (con 350 líneas de código) donde se halle un array de 20 items, y a lo largo del programa se hace referencia unas 12 veces al arreglo, y supongamos también que se necesita cambiar el tamaño del arreglo. Sin usar la constante se tendría que revisar todo el programa para localizar las líneas de código y efectuar el cambio al nuevo tamaño, en cambio con el uso de constantes sólo se le cambia el tamaño a la misma y el problema esta resuelto. La definición de un array a través de una constante se muestra en el siguiente ejemplo: # include stdio.h> # include stdlib.h> /* Definición de la constante */ #define tamano 20 main() { /* Utilización de la constante para definir la dimensión del arreglo */ int promedios[tamano];
/* Leer valores utilizando la variable i como contador dentro del ciclo FOR y ++i como acumulador*/ for (i=0; i < tamano; ++i) scanf(“%d”,&promedios[i]); ..... ..... } La utilización de constantes definidas garantiza que las siguientes referencias al array no sobrepasen el tamaño definido para el mismo. C no comprueba que los índices del array están dentro del rango definido.
Inicialización de arreglos En ciertas circunstancias puede ser necesario darle valores iniciales a los arreglos, para ello basta con colocar entre llaves el conjunto de valores deseados separados por comas y en el orden requerido. A continuación se muestran algunos ejemplos: a) int cant[6]={12,-3,0,15,8}; b) double DesvTipica[8]={0.23, 3.1416, -0.5, 2.16789, -56.78, 25, 0.15, -14 }; c) char meses[12]={„E‟, „F‟, „M‟, „A‟, „M‟, „J‟, „J‟, „A‟, „S‟, „O‟, „N‟, „D‟};
Para el caso del arreglo “cant” es como tener: Cant[0]=12 Cant[1]= -3 Cant[2]=0 Cant[3]=15 Cant[4]=8
Cuando los elementos del arreglo no tienen asignados valores iniciales explícitos, éstos son puestos a cero, a continuación tenemos un ejemplo: int edades[8]={25,13,18};
El resultado de la asignación seria el siguiente: Edades[0]=25; Edades[1]=13;
Edades[2]=18; Edades[3]=0; Edades[4]=0; Edades[5]=0; Edades[6]=0; Edades[7]=0;
Este método de inicializar arrays mediante valores constantes después de su definición, es adecuado cuando el número de elementos del arreglo es pequeño. Una nota interesante en cuanto a la inicialización de arreglos, es que el tamaño no necesita ser indicado explícitamente. Con los arrays numéricos el tamaño será fijado igual al número de valores incluidos. En cuanto a las cadenas, el tamaño se fijará igual al número de caracteres del string o cadena mas uno (el carácter nulo “\0”). C puede dejar los corchetes vacíos, sólo cuando se asignan valores al array, tal como int cuenta[ ] = { 15, 25, -45 , 0 , 50 }; char c[ ] = { „L‟, „u‟, „i‟, „s‟ }; /* declara un array de 4 elementos */ El compilador asigna automáticamente cinco elementos a cuenta. Otros ejemplos: a) Int porcent[ ]={8, 6, 10, -15, 23}; b) Char mes[ ]=”octubre”; que vienen siendo equivalente a:
Porcent[0]=8; porcent[1]=6; porcent[2]=10; porcent[3]= -15; porcent[4]=23;
mes[0]=„o‟; mes[1]=„c‟; mes[2]=„t‟; mes[3]=„u‟; mes[4]=„b‟;
mes[5]=„r‟; mes[6]=„e‟; mes[7]=„\0‟
Ejemplo 1: Elabore un programa que permita leer una lista de números en un arreglo, calcule la suma, promedio, cuadrado , cubo y desviación estándar de los mismos: #include stdio.h> #include stdlib.h> #include conio.h> #include math.h> #define tam 4 /* programa para calcular la suma, promedio, cuadrado, cubo y desviación estandar de una serie de números */ main ( ) { double vector[tam],cuadrado, cubo; float prom, desv,suma=0; int i, j;
system("cls" ); printf ("PROGRAMA PARA CALCULAR \n"); printf(" PROMEDIO, SUMA, CUADRADO, CUBO Y DESV. EST.\n\n") ; //Captura de valores y suma de los mismos for(i = 0 ; i < tam ; ++i) { printf ("num [%d] = " , i) ; scanf ("%lf" , &vector[i]) ; suma+= vector[i] ; } prom = suma / tam ; printf (" \n El promedio de los numeros es: %4.2f\n ", prom) ; //Calculo e impresión de cuadrado, cubo y desviación estandar
printf(" \n \n NUMERO CUADRADO CUBO DESV. EST.\n"); for( i = 0 ; i < tam ; ++i ) { cuadrado = vector[i] * vector[i] ; cubo = pow (vector[i], 3) ; desv = vector [i] - prom ; printf ("%.2lf", vector[i] ) ; printf (" \t%.2lf", cuadrado) ; printf (" \t%.2lf", cubo) ; printf (" \t%.2f\n", desv) ; } system("pause"); return(0); }
Nota que los valores fueron declarados de tipo double no enteros, por el tamaño de los valores que se generan en los cálculos.
Ejemplo 2: El siguiente programa lee 5 valores de teclado y los guarda en un arreglo a. Luego los escribe.
#include stdio.h> #include stdlib.h> main() { int a[5],i,num; for(i=0; i<5;i++){ printf("Digite el numero:\n"); scanf("%d",&num); a[i]=num; }
printf("\nEscribiendo el arreglo con los datos leidos:\n\n");
for(i=0; i<5;i++){ printf("a[%d]= %d\n\n",i,a[i]); } system("pause"); return 0; }
Ejemplo 3: El siguiente programa, pide 5 numeros y calcula los cubos de ellos, los cuales son guardados en un arreglo y son desplegados.
#include stdio.h> #include stdlib.h> #include math.h> main() { int i; double a[5], num; for (i=0; i<5; i++) { printf("\n Digite numero:"); scanf("%lf", &num); a[i]=num; } printf("_________________________________________\n"); printf("Los cubos de los numeros leidos son:\n"); for (i=0; i<5; i++){ a[i]=pow(a[i],3); printf("%.0lf\n",a[i]); } printf("\n"); system("pause"); return 0;
}
EJERCICIOS:
Ejercicio 1: Digite, compile y ejecute el siguiente programa. #include stdio.h> #include stdlib.h> main() { int a,b=0; int c[10]={1,2,3,4,5,6,7,8,9,0}; for (a=0;a<10;++a) if ((c[a]%2)==0) b+=c[a]; printf("%d\n",b); system(“pause”); return 0; }
¿Qué hace el programa? __________________________________________ _______________________________________________________________ Cuál es la salida? _______
Ejercicio 2: Digite, compile y ejecute el siguiente programa. #include stdio.h> #include stdlib.h> main() { int a,b=0; int c[10]={1,2,3,4,5,6,7,8,9,0};
for (a=0;a<10;++a) if ((a%2)==0)b+=c[a]; printf("%d\n",b); system(“pause”); return 0; } ¿Qué hace el programa? __________________________________________ _______________________________________________________________ Cuál es la salida? _______ ¿En qué se diferencia del ejemplo anterior? ____________________________ _______________________________________________________________ Ejercicio 3 Elabore un programa que sume los primeros 25 números enteros guardados en un vector. Se desea imprimir la lista de números y al final la suma de los mismos. Ejercicio 4 Generar e imprimir un vector de 10 números enteros y encontrar el mayor de ellos. Desplegar el resultado. Ejercicio 5 Dadas dos listas A y B de igual número de elementos, se desea generar e imprimir una lista C conteniendo las sumas: A[i] + B[i] = C[i]
Arreglos
¿Qué es un arreglo?
Un arreglo es un grupo consecutivo de localidades de memoria relacionadas por el hecho de que tienen el mismo nombre y el mismo tipo. Para hacer referencia a una localidad o a un elemento del arreglo en particular, especificamos el nombre del arreglo y la posición numérica del elemento en particular dentro del arreglo.
ejemplo de arreglo de 12 elementos
La figura muestra un arreglo de enteros llamado c. Este arreglo contiene 12 elementos. Se hace referencia a cualquiera de de estos elementos al dar el nombre del arreglo seguido del elemento en particular dentro de corchetes ([]).
El primer elemento de cada arreglo es el elemento cero. Entonces la referencia al primer elemento del arreglo es c[0], la referencia al segundo elemento del arreglo es el c[1], y en general la referencia al iésimo elemento del arreglo c es c[i-1].
Los nombres de un arreglo siguen las mismas reglas que los demás nombres de variables.
La posición numérica que se encuentra entre corchetes se denomina, de manera formal, subíndice. Debe ser entero o una expresión entera.
Declaración de arreglos
Tipo_datos nombre[tamaño]
Donde [ ] – operador de subíndices del arreglo.
Ejemplo
Float arreglo[500]
Nota en C el arreglo se debe declarar en forma explícita antes de utilizarlo como cualquier variable.
Inicialización de arreglos
Elemento por elemento
Día[0] =”L”;
Todos los elementos al mismo tiempo
Float arreglo[3]={.0123, 3.1416,.000236}
Cómo desplegar una cadena de Caracteres
Una cadena de caracteres se define en C como una secuencia continua de caracteres que
termina con el caracter nulo ().
EL CARÁCTER NULO ()
Este es un carácter especial que indica el fin de la cadena y para esta unida el último elemento del
arreglo.
El carácter nulo se evalúa con un valor de cero, así que se puede usar para una prueba lógica en una instrucción de control de flujo.
Funciones Y Arreglos
Cuando se usan un arreglo como un argumento a la función, se pasa sólo la dirección del arreglo y no la copia del arreglo entero. Para fines prácticos podemos considerar el nombre del arreglo sin ningún índice como la dirección del arreglo.
Considerar el siguiente ejemplo en donde se pasa un arreglo a la función imp_rev, observar que no es necesario especificar la dimensión del arreglo cuando es un parámetro de la función.
void imp_rev(char s[])
{
int t;
for( t=strlen(s)-1; t>=0; t–)
printf(“%c”,s[t]);
}
main()
{
char nombre[]=”Facultad”;
imp_rev(nombre);
}
Observar que en la función imp_rev se usa la función strlen para calcular la longitud de la cadena sin incluir el terminador nulo. Por otra parte, la función imp_rev no usa la sentencia return ni para terminar de usar la función, ni para regresar algún valor.
Se muestra otro ejemplo,
float enconprom(int tam, float lista[])
{
int i;
float suma = 0.0;
for ( i=0; i
suma += lista[i];
return(suma/tam);
}
main()
{
float numeros[]={2.3, 8.0, 15.0, 20.2, 44.01, -3.0, -2.9};
printf(“El promedio de la lista es %f\n”, enconprom(7,numeros) );
}
Para el caso de que se tenga que pasar un arreglo con más de una dimensión, no se indica la primera dimensión pero, el resto de las dimensiones deben señalarse. Se muestra a continuación un ejemplo:
void imprtabla(int tamx,int tamy, float tabla[][5])
{
int x,y;
for ( x=0; x
{
for ( y=0; y
printf(“t[%d][%d]=%f”,x,y,tabla[x][y]);
printf(“\n”);
}
}
============================================
Paso por referencia y valor
Aunque arreglos completos se pasar por referencia, los elementos individuales de un arreglo se pasan por valor, como se hace con las variables sencillas. En el siguiente programa se ejemplica esto.
/* Programa para mostrar la ubicacion de la memoria de un arreglo de 3 formas n*/
#include
/*function main begins program execution*/
#define SIZE 5
/*Function prototypes */
void modifyArray(int b[], int size);
void modifyElement( int e);
int main()
{
/* Declarar variables: */
int a[SIZE]= {0,1,2,3,4}; /*inicilize a*/
int i; /*counter*/
printf(“Effects of passing entire array by reference:\n\nThe”” values of the original array are:\n”);
/*output original array*/
for (i=0; i
printf(“%3d”, a[i]);
}
printf(“\n”);
modifyArray(a, SIZE);
printf(“The values of the modify array are:\n” );
/*output modify array*/
for (i=0; i
printf(“%3d”, a[i]);
}
/*end for*/
/*output value of a[3]*/
printf(“\n\n\nEffects of passing array element” “by value: \n\nthe value of a[3] is %d\n”,a[3] );
modifyElement(a[3]); /*pass array elemnt a[3] by value*/
/* output value of a[3]*/
printf(“The value of a[3] is %d\n”,a[3] );
getchar();
return 0;
/*indicate that the program ended succesfully*/
}
void modifyArray(int b[], int size)
{
int j; /*counter*/
/*multiply each array element by 2*/
for (j=0; j
b[j]*=2;
} /*end for*/
}
/*end fuction modifyarray*/
/*in function modifyelemnt, “e” is a local copy of array element a[3] passed from main*/
void modifyElement( int e)
{
printf(“the modifyelement is %d\n”,e*=2 );
} /*end for*/
Ejercicios de la guia, si hay alguna error se los dejo para que lo encuentren ustedes y me lo hagan saber, así lo corrijo, estan en orden del 1 al 47, sugiero que lo hagan ustedes y en caso que no les salga, ahi sí consultar para ver el ejercicio resuelto. VARIABLES. ACUMULADORES. CONTADORES. BUCLES Y TOMA DE DECISIONES 1.
Ingresar 5 números y calcular su media
2. Escribir el algoritmo necesario para calcular y mostrar el cuadrado de un número. El número debe ser mayor que cero, en caso de error que aparezca el mensaje "ERROR, el número debe ser mayor que cero" 3. De 10 números ingresados indicar cuantos son mayores a cero y cuantos son menores a cero. 4. Diseñar un algoritmo que calcule la longitud de la circunferencia y el área del círculo de radio dado. 5. Diseñar un algoritmo que calcule la superficie de un triángulo a partir del ingreso de su base y altura y muestre el resultado. 6. Hacer el algoritmo que nos permita introducir un número por teclado y nos informe si es positivo o negativo 7. Hacer el algoritmo que nos permita introducir un número por teclado y nos informe si es par o impar 8. Escribir el algoritmo que me permita leer un número decimal que representa una cantidad de grados Celsius y convierta dicho valor a la cantidad equivalente en grados Fahrenheit. La salida del programa puede ser de la siguiente forma: 100 grados celsius son 212 grados Fahrenheit 9. Dados ciertos centímetros como entrada de tipo decimal, escribir su equivalente a pies (enteros) y pulgadas (decimal), dando las pulgadas con una precisión de 1 lugar decimal. Considerar 2.54 cm por pulgada y 12 pulgadas por pie. La salida podrá ser: 333.3 cm son 10 pies y 11.2 pulgadas. 10. Escribir en Pseudocódigo y codificar en C un programa que lea 20 caracteres. Luego de la lectura indicar cuantas "a" se ingresaron, cuantas "e, i, o, u" 11. Realizar un algoritmo que permita ingresar un número correspondiente a los días de una semana y muestre el nombre del día. Que se permita trabajar hasta que el usuario indique lo contrario. 12. Escribir en Pseudocódigo y codificar en C un programa que muestre los números impares entre 0 y 100 y que imprima cuantos impares hay 13.
Hacer el algoritmo que imprima los números pares entre el 1 y el 100
14.
Hacer el algoritmo que imprima los números del 1 al 100
15.
Hacer el algoritmo que imprima los números del 100 al 0 en orden decreciente
16.
Diseñar un algoritmo que imprima y sume la serie de números 3,6,9,12,...,99.
17. Escribir en Pseudocódigo y codificar en C un programa que muestre los múltiplos de 2 y de 3 y de ambos comprendidos entre 0 y 100 18. Ingresar un número, entero y efectuar la suma de todos los números que le anteceden, comenzando desde 0 y mostrar el resultado por pantalla 19. Hacer el algoritmo que imprima todos los números naturales que hay desde la unidad hasta un número que introducimos por teclado 20. Hacer el algoritmo que nos permita contar los múltiplos de 3 desde la unidad hasta un número que introducimos por teclado 21. Escribir en Pseudocódigo y codificar en C un programa que muestre los números primos comprendidos entre 0 y 100 22. Diseñar en Pseudocódigo y codificar en C un algoritmo que permita ingresar 10 números, ninguno de ellos igual a cero. Se pide sumar los positivos, obtener el producto de los negativos y luego mostrar ambos resultados. 23. Diseñar el algoritmo necesario para que habiéndose leído el valor de 2 variables NUM1 y NUM2 se intercambien los valores de las variables, es decir que el valor que tenía NUM1 ahora lo contenga NUM2 y viceversa 24. Escribir un programa que visualice una tabla de los N primeros números, siendo N un número que ingresa el usuario. Utilizar el siguiente diseño de salida suponiendo que el usuario ingresó un tres: NÚMERO CUADRADO CUBO 1 1 1 2 4 8 3 9 27 25. Diseñar en Pseudocódigo y codificar en C un algoritmo que permita registrar de los empleados de una fábrica (no se sabe cuantos) su peso y saber cuantos pesan hasta 80 kg. inclusive y cuantos pesan más de 80 kg. 26. En una tienda de artículos para caballeros al final del día se carga en la computadora las boletas que confeccionaron los distintos vendedores para saber cuanto fue la comisión del día de cada uno de ellos. Los datos que se ingresan (por boleta) son: el número de vendedor y el importe. Cuando no hay más boletas para cargar se ingresa 0. Teniendo en cuenta que el negocio tiene 3 vendedores y que el porcentaje sobre las ventas es del 5%, indicar cuánto ganó cada vendedor en el día 27. Ingresar por teclado 3 números correspondientes a los lados de un triángulo. Teniendo en cuenta que la suma de los dos lados menores tiene que ser superior al lado mayor para que formen un triángulo, indicar si los números indicados forman un triángulo y si lo forman que tipo de triángulo es (según sus lados).
28. Dados 3 números donde el primero y el último son límites de un intervalo, indicar si el tercero pertenece a dicho intervalo 29. Por teclado se ingresa el valor hora de un empleado. Posteriormente se ingresa el nombre del empleado, la antigüedad y la cantidad de horas trabajadas en el mes. Se pide calcular el importe a cobrar teniendo en cuenta que al total que resulta de multiplicar el valor hora por la cantidad de horas trabajadas, hay que sumarle la cantidad de años trabajados multiplicados por $30, y al total de todas esas operaciones restarle el 13% en concepto de descuentos. Imprimir el recibo correspondiente con el nombre, la antigüedad, el valor hora, el total a cobrar en bruto, el total de descuentos y el valor neto a cobrar. 30. Realizar la tabla de multiplicar de un número entre 0 y 10 de forma que se visualice de la siguiente forma: 4x1= 4 4x2= 8 .......... 31. Hacer el algoritmo que luego de ingresar 2 números por teclado, imprima los números naturales que hay entre ambos empezando por el más pequeño, contar cuántos números hay y cuántos de ellos son pares. 32. Se registran de los empleados de una empresa Número de legajo, sueldo y sexo (1 femenino y 2 masculino). Diseñar en Pseudocódigo y codificar en C un algoritmo que permita informar cuantas mujeres ganan más de $ 500 y cuantos hombres ganan menos de $ 400. MÁXIMOS Y MÍNIMOS 33. Se ingresa por teclado la cantidad de agua caída, en milímetros día a día durante un mes. Se pide determinar el día de mayor lluvia, el de menor y el promedio 34. Hacer el algoritmo que imprima el mayor y el menor de una serie de 5 números que vamos introduciendo por teclado. 35. De los alumnos de una escuela se registra su apellido y nombre y su altura. Diseñar en Pseudocódigo un algoritmo que indique el nombre del alumno más alto y su altura (sólo uno es el más alto). 36. Diseñar un algoritmo que permita calcular el promedio de un alumno sabiendo que se ingresa por alumno la nota de 6 materias y su nombre. No se sabe la cantidad de alumnos. Se pide mostrar: NOMBRE DEL ALUMNO: PROMEDIO: 37. Del registro de partes meteorológico por cada día se registra la fecha, temperatura máxima y temperatura mínima. Diseñar en Pseudocódigo un algoritmo que permita informar: · el día más frío y cual fue esa temperatura · el día más cálido y cual fue esa temperatura 38. De las 20 participantes de un concurso de belleza se van registrando de uno en uno los siguientes datos: Apellido y Nombre Puntos por inteligencia Puntos por Cultura general
Puntos por Belleza Se necesita informar por pantalla: · Apellido y nombre de la concursante de mayor puntaje general · Puntaje acumulado por todas las participantes en Cultura general, en Inteligencia y en Belleza · De los tres puntajes acumulados en el ítem anterior cual fue el menor 39. Escribir un programa que calcule el salario semanal de cada trabajador de una empresa dada la tarifa horaria y el número de horas trabajadas además del nombre. Se debe permitir al usuario indicar cuando desea dejar de ingresar datos. 40. Ídem al anterior pero informando al finalizar (el ingreso de datos y los cálculos correspondientes) la cantidad de empleados a los que se les calculó el salario. 41. Ídem al anterior agregando en el informe final nombre del empleado de mayor salario con el monto del salario correspondiente y nombre del empleado de menor salario con el monto del salario correspondiente 42. Ídem al anterior agregando en el informe final el costo de la empresa en salarios y el salario promedio 43. En un club se registran de uno en uno los siguientes datos de sus socios: Número de socio Apellido y nombre Edad Tipo de deporte que practica (1 tenis, 2 rugby, 3 voley, 4 hockey, 5 futbol) Diseñar en Pseudocódigo un algoritmo que permita emitir por pantalla cuantos socios practican tenis y cuantos paddle y el promedio de edad de los jugadores de cada deporte 44. Escribir un programa que determine si un año es bisiesto. Un año es bisiesto si es múltiplo de 4. Los años múltiplos de 100 no son bisiestos, salvo si ellos también son múltiplos de 400 (2000 es bisiesto pero 1900 no) 45. Un profesor de matemática de un establecimiento educativo registra de cada alumno Nº de legajo, nombre y promedio. Según el promedio desea saber cuantos alumnos aprobaron (promedio mayor o igual a 7), cuantos rinden en diciembre (promedio menor a 7 y mayor o igual a 4) y cuantos rinden examen en marzo (promedio menor a 4). Además desea conocer el Nº de legajo y nombre del alumno con mejor promedio. 46. Diseñar el algoritmo que le presente al usuario un menú de opciones con las cuatro operaciones básicas (suma, resta, multiplicación, división). Según la operación elegida ingresará 2 números enteros, se realizará la misma y se mostrará por pantalla el resultado. El usuario podrá trabajar en el programa hasta que indique lo contrario. Recordar que la división por cero es indeterminada. 47. La fecha de Pascua corresponde al primer domingo después de la primera luna llena que sigue al equinoccio de primavera, y se calcula con las siguientes expresiones: A = año mod 19 B = año mod 4 C = año mod 7 D = (19*A + 24) mod 30 E = (2*B + 4*C + 6*D + 5) mod 7
N = (22 + D + E) En el que N indica el número del día de marzo (o Abril si N > 31) correspondiente al domingo de Pascua. Realizar un programa que calcule esa fecha para los años 2003 y 2004.
1. /***********************************************************/ 2. 3. #include 4. #include 5. 6. void main() 7. { 8. clrscr(); 9. 10. int cont=0; 11. float num,media=0,resultado; 12. 13. while(cont<5) 14. { 15. printf("\nN£mero:"); 16. scanf("%f",&num); 17. 18. cont = cont + 1; 19. media = media + num; 20. } 21. 22. resultado = media / cont; 23. 24. printf("\nLa media de los %d n£meros es %.2f",cont,resultado); 25. getch(); 26. } 27. 28. /***********************************************************/ 29. 30. void main() 31. { 32. clrscr(); 33. 34. int num,cuadrado; 35. 36. printf("N£mero:"); 37. scanf("%d",&num); 38.
39. 40. 41.
while(num<= 0) { printf("\nERROR.El n£mero debe ser mayor que cero\n\nN£mero:"); 42. scanf("%d",&num); 43. } 44. cuadrado = num * num; 45. 46. printf("El cuadrado de %d es %d",num,cuadrado); 47. getch(); 48. } 49. 50. /***********************************************************/ 51. 52. void main() 53. { 54. clrscr(); 55. 56. int num,mayor0=0,menor0=0,cont=0; 57. 58. while(cont<10) 59. { 60. printf("\nN£mero:"); 61. scanf("%d",&num); 62. 63. if(num==0) 64. { 65. printf("\nERROR.Tiene que ser menor o mayor que cero.\n"); 66. cont--; 67. } 68. if(num>0) 69. mayor0 = mayor0 + 1; 70. if(num<0) 71. menor0 = menor0 + 1; 72. 73. cont = cont + 1; 74. 75. } 76. printf("\nDe %d n£meros ingresados...\n\n%d son mayores a cero\n%d son menores a cero",cont,mayor0,menor0); 77. getch(); 78. } 79. 80. /***********************************************************/
81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125.
void main() { float PI=3.1416,radio,sup,lon; clrscr(); printf("Ingrese radio:"); scanf("%f",&radio); lon= PI * ( radio * 2); sup = PI * radio * radio; printf("\nEl perimetro del circulo es %.3f",lon); printf("\nEl area del circulo es %.3f",sup); getch(); } /***********************************************************/ void main() { clrscr(); int base,altura,area,total; printf("Base:"); scanf("%d",&base); printf("Altura:"); scanf("%d",&altura); area = base * altura; area = area / 2; printf("El area del triangulo es de %d",area); getch(); } /***********************************************************/ void main() { clrscr(); int num; printf("N£mero:");
126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170.
scanf("%d",&num); if(num > 0) printf("El n£mero %d es positivo",num); if(num < 0) printf("El n£mero %d es negativo",num); if(num == 0) printf("El n£mero que eligio es el %d",num); getch(); } /***********************************************************/ void main() { clrscr(); int num; printf("N£mero:"); scanf("%d",&num); while(num==0) { printf("Si ingresa 0 no responde"); printf("\nN£mero:"); scanf("%d",&num); } if(num%2==0) printf("%d es par",num); else printf("%d no es par",num); getch(); } /***********************************************************/ void main() { clrscr(); float num,fahrenheit; printf("N£mero:"); scanf("%f",&num);
171. 172. fahrenheit = num * 2.12; 173. 174. printf("%.3f grados Celsius equivale a %.3f grados Fahrenheit",num,fahrenheit); 175. getch(); 176. } 177. 178. /***********************************************************/ 179. 180. void main() 181. { 182. clrscr(); 183. 184. float cms,pulgadas; 185. int pies; 186. 187. printf("Centimetros:"); 188. scanf("%f",&cms); 189. 190. pies = 0.030003 * cms; 191. pulgadas = 0.0336034 * cms; 192. 193. 194. printf("\n%.2f cms equivale a %d pies",cms,pies); 195. printf("\n%.2f cms equivale a %.1f pulgadas",cms,pulgadas); 196. printf("\n\n%.2f cms = %d pies = %.1f pulgadas",cms,pies,pulgadas); 197. getch(); 198. } 199. 200. /***********************************************************/ 201. 202. void main() 203. { 204. clrscr(); 205. int a=0,e=0,i=0,o=0,u=0,cont=0; 206. char caracter='x'; 207. 208. printf("\nIngrese una frase de 20 caracteres:\n\n "); 209. while(cont<20) 210. { 211. scanf("%c",&caracter); 212.
213. if(cont ==19) 214. { 215. printf("[--------------------]\n"); 216. printf("[ 20 caracteres ]"); 217. } 218. if(caracter=='a') 219. a = a + 1; 220. if(caracter=='e') 221. e = e + 1; 222. if(caracter=='i') 223. i = i + 1; 224. if(caracter=='o') 225. o = o + 1; 226. if(caracter=='u') 227. u = u + 1; 228. 229. cont = cont + 1; 230. } 231. printf("\n\nEn la frase hay...\n"); 232. printf("a = %d e = %d i = %d o = %d u = %d",a,e,i,o,u); 233. getch(); 234. } 235. 236. /***********************************************************/ 237. 238. void main() 239. { 240. 241. 242. int dia; 243. char opcion='s',seguir='s'; 244. 245. do 246. { 247. clrscr(); 248. printf("\nDias de la semana...\n\n1.Lunes\n2.Martes\n3.Miercoles\n4.Jueves\n5.Viernes\n6 .Sabado\n7.Domingo\n\n"); 249. opcion = getche(); 250. 251. if(opcion == '1') 252. printf(".Lunes\n"); 253. if(opcion == '2') 254. printf(".Martes\n");
255. if(opcion == '3') 256. printf(".Miercoles\n"); 257. if(opcion == '4') 258. printf(".Jueves\n"); 259. if(opcion == '5') 260. printf(".Viernes\n"); 261. if(opcion == '6') 262. printf(".Sabado\n"); 263. if(opcion == '7') 264. printf(".Domingo\n"); 265. 266. printf("\nDesea continuar s/n ?"); 267. seguir = getch(); 268. 269. while(seguir!='s'&&seguir!='n') 270. { 271. printf("\nDesea continuar s/n ?"); 272. seguir = getch(); 273. } 274. }while(seguir=='s'); 275. } 276. 277. /***********************************************************/ 278. 279. void main() 280. { 281. int impares,impar=0; 282. 283. clrscr(); 284. for(impares=0;impares<100;impares++) 285. { 286. if(impares%2!=0) 287. { 288. printf("\n%d",impares); 289. impar = impar + 1; 290. } 291. } 292. printf("\n%d n£meros impares desde el 1 al 100",impar); 293. getch(); 294. } 295. 296. /***********************************************************/ 297. 298. void main()
299. { 300. int pares,par=0; 301. 302. clrscr(); 303. for(pares=0;pares<100;pares++) 304. { 305. if(pares%2==0) 306. { 307. printf("\n%d",pares); 308. par = par + 1; 309. } 310. } 311. printf("\n%d n£meros pares desde el 1 al 100",par); 312. getch(); 313. } 314. 315. /***********************************************************/ 316. 317. void main() 318. { 319. int num; 320. 321. clrscr(); 322. for(num=0;num<100;num++) 323. printf("\n%d",num); 324. 325. getch(); 326. } 327. 328. /***********************************************************/ 329. 330. void main() 331. { 332. int num; 333. 334. clrscr(); 335. for(num=100;num>0;num--) 336. printf("\n%d",num); 337. 338. getch(); 339. } 340. 341. /***********************************************************/ 342.
343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387.
void main() { int de3; clrscr(); for(de3=0;de3<100;de3++) { if(de3%3==0) printf("\n%d",de3); } getch(); } /***********************************************************/ void main() { int de3; clrscr(); for(de3=0;de3<100;de3++) { if(de3%3==0 || de3%2==0) printf("\n%d",de3); } getch(); }
/***********************************************************/ void main() { clrscr(); int num,i,suma=0; printf("N£mero:"); scanf("%d",&num); for(i=0;i
388. } 389. printf("La suma de los n£meros que anteceden al %d es %d",num,suma); 390. getch(); 391. } 392. 393. 394. /***********************************************************/ 395. 396. void main() 397. { 398. clrscr(); 399. int num,i; 400. 401. printf("N£mero:"); 402. scanf("%d",&num); 403. 404. for(i=1;i
432. void main() 433. { 434. clrscr(); 435. int n,divisor; 436. 437. for (n = 2;n <= 100; n++) 438. { 439. for(divisor = 2; n % divisor != 0 ; divisor++) ; 440. if (divisor == n) 441. printf("El %d es n£mero primo\n",n); 442. } 443. getch(); 444. } 445. 446. 447. /***********************************************************/ 448. 449. void main() 450. { 451. clrscr(); 452. int cont=0,num,suma=0,producto= 1; 453. 454. while(cont<10) 455. { 456. printf("\nN£mero:"); 457. scanf("%d",&num); 458. 459. while(num == 0) 460. { 461. printf("\nEl cero no!!!\n\nN£mero:"); 462. scanf("%d",&num); 463. } 464. 465. if(num>0) 466. suma = suma + num; 467. if(num<0) 468. { 469. producto = producto * num; 470. 471. } 472. cont = cont + 1; 473. }
474. printf("\nLa suma de los n£meros positivos es %d",suma); 475. printf("\nEl producuto de los n£meros negativos es %d",producto); 476. getch(); 477. } 478. 479. 480. /***********************************************************/ 481. 482. void main() 483. { 484. clrscr(); 485. 486. int numero1,numero2,a,b; 487. 488. printf("N£mero 1:"); 489. scanf("%d",&numero1); 490. printf("N£mero 2:"); 491. scanf("%d",&numero2); 492. 493. a = numero1; 494. b = numero2; 495. numero1 = b; 496. numero2 = a; 497. 498. printf("\nEl n£mero 1 es: %d\nEl n£mero 2 es: %d",numero1,numero2); 499. getch(); 500. } 501. 502. 503. /***********************************************************/ 504. 505. void main() 506. { 507. clrscr(); 508. int i,cuadrado,cubo,numero; 509. 510. printf("N£mero:"); 511. scanf("%d",&numero); 512. printf("\n\tN£mero\t\tCuadrado\tCubo"); 513. 514. for(i=1;i
516. cuadrado = i * i; 517. cubo = i * i * i; 518. 519. printf("\n\t%d\t\t%d\t\t%d",i,cuadrado,cubo); 520. } 521. getch(); 522. } 523. 524. 525. /***********************************************************/ 526. 527. void main () 528. { 529. int mas80=0,hasta80= 0,peso; 530. char seguir='s'; 531. 532. clrscr(); 533. 534. while(seguir=='s') 535. { 536. printf("\n\nIngrese peso:"); 537. scanf("%d",&peso); 538. 539. if(peso<=80) 540. { 541. hasta80+=1; 542. } 543. else 544. { 545. mas80+=1; 546. } 547. 548. printf("\n\nDesea continuar? s/n\n"); 549. seguir=getch();//getche es = a getch a diferencia que getche muestra en pantalla la tecla presionada 550. 551. while(seguir!= 's'&& seguir != 'n') 552. { 553. printf("\nERROR, reingrese "); 554. printf("\nDesea continuar? s/n\n"); 555. seguir=getch(); 556. } 557. } 558. printf("\n\nPesan hasta 80Kg:%d y mas de 80Kg:%d",hasta80,mas80);
559. gotoxy(80,25); 560. printf("\n\nPresine cualquier tecla para salir..."); 561. getch(); 562. } 563. 564. 565. /***********************************************************/ 566. 567. void main() 568. { 569. int vendedor; 570. float vendedor1=0,vendedor2=0,vendedor3=0; 571. float importe, porcentaje=0; 572. char seguir='s'; 573. 574. clrscr(); 575. 576. while(seguir=='s') 577. { 578. printf("\n\nIngrese N§ de vendedor:"); 579. printf("\n.1\n.2\n.3\n.0 Para salir\n\n."); 580. scanf("%d",&vendedor); 581. 582. if(vendedor == 1) 583. { 584. printf("\nIngrese importe:"); 585. scanf("%f",&importe); 586. porcentaje = importe * 5 / 100; 587. vendedor1 = vendedor1 + porcentaje; 588. } 589. if(vendedor == 2) 590. { 591. printf("\nIngrese importe:"); 592. scanf("%f",&importe); 593. porcentaje = importe * 5 / 100; 594. vendedor2 = vendedor2 + porcentaje; 595. } 596. if(vendedor == 3) 597. { 598. printf("\nIngrese importe:"); 599. scanf("%f",&importe); 600. porcentaje = importe * 5 / 100; 601. vendedor3 = vendedor3 + porcentaje; 602. }
603. 604. if(vendedor == 0) 605. { 606. printf("\nDesea continuar? s/n"); 607. seguir= getch(); 608. } 609. while(seguir!='s' && seguir!='n') 610. { 611. printf("ERROR, reingrese.\nDesea continuar? s/n"); 612. seguir=getch(); 613. } 614. } 615. printf("\n\nVENDEDOR 1:%.2f",vendedor1); 616. printf("\nVENDEDOR 2:%.2f",vendedor2); 617. printf("\nVENDEDOR 3:%.2f",vendedor3); 618. printf("\n\nPresione cualquier teclar para salir..."); 619. getch(); 620. 621. } 622. 623. 624. /***********************************************************/ 625. 626. void main() 627. { 628. int lado1,lado2,lado3; 629. int ladoa,ladob,ladoc; 630. int a,b,c; 631. clrscr(); 632. printf("Para formar un triangulo hay que tener en cuenta que la suma de\nsus dos lados menores tiene que ser mayor que el lado superior\n"); 633. printf("\nIngresar los lados para comprobar el item:\n"); 634. printf("\n.a.");scanf("%d",&lado1); 635. printf("\n.b.");scanf("%d",&lado2); 636. printf("\n.c.");scanf("%d",&lado3); 637. 638. ladoa = lado1 + lado2; 639. ladob = lado1 + lado3; 640. ladoc = lado2 + lado3; 641. 642. if(ladoa > lado3)
643. a = 1; 644. if(ladob > lado2) 645. b = 1; 646. if(ladoc > lado1) 647. c= 1; 648. if(a!=1 || b!=1 || c!=1) 649. { 650. printf("\nNo es un triangulo, tiene que cumplir con el item."); 651. getch(); 652. return; 653. } 654. if(lado1 != lado2 && lado1 != lado3 && lado2 != lado3) 655. { 656. printf("\nEl triangulo es Escaleno"); 657. getch(); 658. return; 659. } 660. if(lado1 == lado2 && lado1 == lado3 && lado2 == lado3) 661. { 662. printf("\nEl triangulo es Equilatero"); 663. getch(); 664. return; 665. } 666. 667. printf("\nEl triangulo es Is¢sceles"); 668. getch(); 669. 670. } 671. 672. 673. /***********************************************************/ 674. 675. void main () 676. { 677. int num1,num2,num3,mayor,intermedio,menor; 678. 679. clrscr(); 680. 681. printf("\nPrimer n£mero:");scanf("%d",&num1); 682. printf("Segundo n£mero:");scanf("%d",&num2); 683. printf("Tercer n£mero:");scanf("%d",&num3); 684.
685. if(num1 > num2 && num1 < num3 || num1 < num2 && num1 > num3) 686. intermedio = num1; 687. if(num2 > num1 && num2 < num3 || num2 < num1 && num2 > num3) 688. intermedio = num2; 689. if(num3 > num1 && num3 < num2 || num3 < num1 && num3 > num2) 690. intermedio = num3; 691. 692. printf("\nEl n£mero %d es el intermedio de los 3 n£meros ingresados",intermedio); 693. getch(); 694. 695. } 696. 697. 698. /***********************************************************/ 699. 700. void main () 701. { 702. clrscr(); 703. 704. float valor_hora,total,descuento,c_descuento; 705. char nombre [20]; 706. int antiguedad,hs_trabajadas; 707. 708. printf("\nIngresar datos:\n"); 709. printf("\nNombre:"); 710. scanf("%s",&nombre); 711. printf("Antiguedad:"); 712. scanf("%d",&antiguedad); 713. printf("Cantidad de Horas trabajadas:"); 714. scanf("%d",&hs_trabajadas); 715. printf("Valor de la hora:"); 716. scanf("%f",&valor_hora); 717. 718. total = valor_hora * hs_trabajadas + antiguedad * 30; 719. descuento = total * 0.13; 720. c_descuento = total - descuento; 721. 722. printf("\nNombre: %s",nombre); 723. printf("\nAntiguedad: %d a¤os",antiguedad); 724. printf("\nValor x hora: %.2f $",valor_hora);
725. printf("\nTotal a cobrar: %.2f $ (valor hora * hs trabajadas + antiguedad * 30)",total); 726. printf("\nTotal del descuento: %.2f $",descuento); 727. printf("\nTotal con descuento: %.2f $",c_descuento); 728. getch(); 729. } 730. 731. 732. /***********************************************************/ 733. 734. void main () 735. { 736. clrscr(); 737. 738. int num,multi=0,i=0; 739. 740. printf("Ingresar n£mero:"); 741. scanf("%d",&num); 742. 743. while(num <= 0 || num >= 10) 744. { 745. printf("ERROR, Reingresar n£mero:"); 746. scanf("%d",&num); 747. } 748. 749. for(i=1; i<10;i++) 750. { 751. multi = num * i; 752. printf("\n%d x %d = %d",num,i,multi); 753. 754. } 755. getch(); 756. } 757. 758. 759. /***********************************************************/ 760. 761. void main () 762. { 763. clrscr(); 764. 765. int num1,num2,n,mayor,menor,numhay=0,numpares=0; 766. 767. printf("\nIngrese n£mero:"); 768.
scanf("%d",&num1);
769. printf("Ingrese n£mero:"); 770. scanf("%d",&num2); 771. 772. if(num1
811. printf("Ingresar sexo:\n\nFemenino (1)\nMasculino(2)\n"); 812. sexo = getche(); 813. if(sexo == '1') 814. printf(" = Sexo femenino\n"); 815. else 816. printf(" = Sexo masculino\n"); 817. while(sexo != '1' && sexo != '2') 818. { 819. printf(" No es la opci¢n correcta\n\nReingrese sexo:\n\nFemenino (1)\nMasculino(2)\n"); 820. sexo = getche(); 821. } 822. 823. if(sexo == '1'&& sueldo >= 500) 824. mas500 = mas500 + 1; 825. if(sexo == '2' && sueldo <= 400) 826. menos400 = menos400 + 1; 827. 828. printf("\nDesea continuar? s/n"); 829. seguir = getch(); 830. 831. while(seguir!= 's' && seguir != 'n') 832. { 833. printf("\nERROR.Reingrese respuesta. s/n ?"); 834. seguir = getch(); 835. } 836. }while(seguir == 's'); 837. printf("\n\nMujeres que ganan mas de 500$ : %d",mas500); 838. printf("\nHombres que ganan menos de 400$ : %d",menos400); 839. getch(); 840. } 841. 842. 843. /*****************MAXIMOS Y MÍNIMOS*****************************************/ 844. 845. #include 846. #include 847. #include 848. 849. void main ()
850. { 851. clrscr(); 852. 853. float aguacaida,promedio,cantidadagua=0,mayorlluvia,menorlluvia; 854. char mayordia[10],menordia[10],dias[10]; 855. int cont=0,flag=0,dia; 856. 857. printf("Ingrese cantidad de dias que desea computar:"); 858. scanf("%d",&dia); 859. 860. while(cont=mayorlluvia) 880. { 881. strcpy(mayordia,dias); 882. mayorlluvia = aguacaida; 883. } 884. 885. if(aguacaida<=menorlluvia) 886. { 887. strcpy(menordia,dias); 888. menorlluvia = aguacaida; 889. } 890. 891. cantidadagua+=aguacaida; //cantidadagua = cantidadagua + aguacaida
892. 893. cont+=1; 894. 895. } 896. 897. promedio=cantidadagua/cont; 898. 899. printf("\nMayor lluvia %f el dia %s",mayorlluvia,mayordia); 900. printf("\nMenor lluvia %f el dia %s",menorlluvia,menordia); 901. printf("\nEl promedio de agua caida en %d dias fue %f",cont,promedio); 902. getch(); 903. } 904. 905. /***********************************************************/ 906. /* Es medio engorroso pero el resultado da bien */ 907. 908. void main () 909. { 910. clrscr(); 911. 912. int a,b,c,d,e,mayor,menor; 913. 914. printf("\nIngrese 5 n£meros:\n\n"); 915. scanf("%d %d %d %d %d",&a,&b,&c,&d,&e); 916. 917. if(a>b&&a>c&&a>d&&a>e)mayor = a; 918. if(b>a&&b>c&&b>d&&b>e)mayor = b; 919. if(c>a&&c>b&&c>d&&c>e)mayor = c; 920. if(d>a&&d>b&&d>c&&d>e)mayor = d; 921. if(e>a&&e>b&&e>c&&e>d)mayor = e; 922. 923. if(a
933. 934. /***********************************************************/ 935. 936. #include 937. #include 938. #include 939. 940. void main() 941. { 942. float altura,mayoraltura=0; 943. char nombre[20],mayornombre[20],seguir = 's'; 944. int flag=0; 945. 946. clrscr(); 947. 948. do 949. { 950. printf("\nNombre:"), 951. scanf("%s",&nombre); 952. printf("Altura:"); 953. scanf("%f",&altura); 954. 955. if(flag==0) 956. { 957. mayoraltura = altura; 958. strcpy(mayornombre,nombre); 959. flag=1; 960. } 961. if(altura>= mayoraltura) 962. { 963. mayoraltura = altura; 964. strcpy(mayornombre,nombre); 965. 966. } 967. 968. printf("\nDesea continuar? s/n\n"); 969. seguir = getch(); 970. 971. while(seguir!= 's' && seguir!= 'n') 972. { 973. printf("\nERROR, reingrese respuesta s/n ?\n"); 974. seguir = getch(); 975. } 976. }while(seguir == 's');
977. printf("\nEl mas alto es %s mide %.2f",mayornombre,mayoraltura); 978. getch(); 979. } 980. 981. /***********************************************************/ 982. 983. #include 984. #include 985. #include 986. 987. void main() 988. { 989. int cont; 990. char nombre[15],seguir='s'; 991. float nota,noti,promedio; 992. 993. clrscr(); 994. 995. do 996. { 997. cont=0; 998. noti=0; 999. while(cont<6) 1000. { 1001. if(cont == 0) 1002. { 1003. printf("\nNombre:"); 1004. scanf("%s",&nombre); 1005. } 1006. 1007. 1008. printf("Nota:"); 1009. scanf("%f",¬a); 1010. 1011. noti = noti + nota; 1012. promedio = noti / 6; 1013. 1014. cont = cont + 1; 1015. 1016. if(cont == 6) 1017. printf("El promedio de %s es %.2f",nombre,promedio); 1018. } 1019.
1020. printf("\nDesea continuar? s/n\n"); 1021. seguir = getch(); 1022. 1023. while(seguir!= 's' && seguir!= 'n') 1024. { 1025. printf("\nERROR, reingrese respuesta s/n ?\n"); 1026. seguir = getch(); 1027. } 1028. }while(seguir == 's'); 1029. 1030. } 1031. 1032. /***********************************************************/ 1033. 1034. #include 1035. #include 1036. #include // para usar funci¢n strcpy 1037. 1038. void main() 1039. { 1040. int flag=0; 1041. float temp1,temp2,tempmax,tempmin; 1042. char seguir='s',fecha[10],fechamax[10],fechamin[10]; 1043. 1044. do 1045. { 1046. clrscr(); 1047. printf("\nIngrese fecha:"); 1048. scanf("%s",&fecha); 1049. printf("Ingrese temperatura maxima:"); 1050. scanf("%f",&temp1); 1051. printf("Ingrese temperatura minima:"); 1052. scanf("%f",&temp2); 1053. 1054. if(flag==0) 1055. { 1056. tempmax = temp1; 1057. tempmin = temp2; 1058. 1059. flag=1; 1060. } 1061. 1062. if(temp1>=tempmax) 1063. {
1064. strcpy(fechamax,fecha); 1065. tempmax = temp1; 1066. } 1067. 1068. if(temp2<=tempmin) 1069. { 1070. strcpy(fechamin,fecha); 1071. tempmin = temp2; 1072. } 1073. 1074. printf("Desea continuar s/n ?"); 1075. seguir = getch(); 1076. 1077. while(seguir!='s' && seguir !='n') 1078. { 1079. printf("Desea continuar s/n ?"); 1080. seguir = getch(); 1081. 1082. } 1083. 1084. }while(seguir=='s'); 1085. 1086. printf("\nLa mayor temperatura %.3f fue el dia %s",tempmax,fechamax); 1087. printf("\nLa menor temperatura %.3f fue el dia %s",tempmin,fechamin); 1088. getch(); 1089. } 1090. 1091. /***********************************************************/ 1092. 1093. #include 1094. #include 1095. #include 1096. 1097. void main() 1098. { 1099. 1100. char nombre[20],mayornombre[20]; 1101. int cont=0,ptsg,ptsi,ptsc,ptsb,mayorpts; 1102. int flag=0,acui=0,acuc=0,acub=0,acumen; 1103. clrscr(); 1104. while(cont<3) 1105. { 1106.
1107. printf("\nIngrese nombre:"); 1108. scanf("%s",&nombre); 1109. printf("Puntos por Cultura:"); 1110. scanf("%d",&ptsc); 1111. printf("Puntos por inteligencia:"); 1112. scanf("%d",&ptsi); 1113. printf("Puntos por belleza:"); 1114. scanf("%d",&ptsb); 1115. 1116. ptsg = ptsi + ptsc + ptsb; 1117. 1118. if(flag==0) 1119. { 1120. mayorpts = ptsg; 1121. strcpy(mayornombre,nombre); 1122. 1123. flag=1; 1124. } 1125. 1126. if(ptsg >= mayorpts) 1127. { 1128. mayorpts = ptsg; 1129. strcpy(mayornombre,nombre); 1130. } 1131. 1132. acui+=ptsi; 1133. acub+=ptsb; 1134. acuc+=ptsc; 1135. 1136. acumen = acui; 1137. 1138. 1139. cont+=1; 1140. 1141. } 1142. 1143. printf("%s es la concursante de mayor puntaje con %d",mayornombre,mayorpts); 1144. printf("\n\nTotales\n"); 1145. if(acui
1151. else 1152. printf("\nCultura:%d",acuc); 1153. if(acub 1164. #include 1165. #include // para la funci¢n strcpy 1166. 1167. void main() 1168. { 1169. 1170. float tarifa,hstrabajadas,total,mayorsalario,menorsalario; 1171. float totalsalario=0,salariopromedio,mayor=0,menor=0; 1172. char nombre[20],seguir = 'n',mayornombre[20],menornombre[20]; 1173. int trabajadores=0,flag=0; 1174. 1175. 1176. do 1177. { 1178. clrscr(); 1179. printf("\nNombre:"); 1180. scanf("%s",&nombre); 1181. printf("Tarifa horaria:"); 1182. scanf("%f",&tarifa); 1183. printf("Horas de trabajo:"); 1184. scanf("%f",&hstrabajadas); 1185. 1186. total = hstrabajadas * tarifa; 1187. 1188. 1189. printf("\nEl Sr.%s cobra un salario semanal de %.2f$\n",nombre,total); 1190. getch(); 1191. 1192. trabajadores = trabajadores + 1;
1193. 1194. if(flag==0) 1195. { 1196. menorsalario = mayorsalario = total; 1197. strcpy(mayornombre,nombre); 1198. strcpy(menornombre,nombre); 1199. 1200. flag=1; 1201. } 1202. 1203. if(total == mayorsalario) 1204. mayor = mayor + 1; 1205. if(total == menorsalario) 1206. menor = menor + 1; 1207. if(total>mayorsalario) 1208. { 1209. mayorsalario = total; 1210. strcpy(mayornombre,nombre); 1211. } 1212. if(total
1233. printf("\nEl empleado %s es el de menor salario cobra %.2f $",menornombre,menorsalario); 1234. printf("\nEl costo de salarios es de %.3f $",totalsalario); 1235. printf("\nEl salario promedio de la empresa es %.2f $",salariopromedio); 1236. getch(); 1237. 1238. } 1239. 1240. /***********************************************************/ 1241. 1242. void main() 1243. { 1244. float socio,promedioedad=0,promedioedad2=0; 1245. int edad,tenis=0,voley=0; 1246. float promedio1=0,promedio2=0; 1247. char nombre [20],seguir = 's',deporte = 's',apellido[20]; 1248. 1249. clrscr(); 1250. 1251. do 1252. { 1253. 1254. printf("\nN£mero de socio:"); 1255. scanf("%f",&socio); 1256. printf("Nombre:"); 1257. scanf("%s",&nombre); 1258. printf("Apellido:"); 1259. scanf("%s",&apellido); 1260. printf("Edad:"); 1261. scanf("%d",&edad); 1262. printf("Deporte que practica:\n\n1.Tenis\n2.Rugby\n3.Voley\n4.Hockey\n5.Futbol\n\n"); 1263. deporte = getche(); 1264. 1265. if(deporte != '1', deporte != '2',deporte != '3',deporte != '4',deporte != '5') 1266. printf(".ERROR.Pulse n£mero correspondiente al deporte que practica"); 1267. 1268. if(deporte == '1') 1269. { 1270. printf(".Tenis");
1271. tenis = tenis + 1; 1272. promedio1 = promedio1 + edad; 1273. promedioedad = promedio1 / tenis; 1274. } 1275. if(deporte == '3') 1276. { 1277. printf(".Voley"); 1278. voley = voley + 1; 1279. promedio2 = promedio2 + edad; 1280. promedioedad2 = promedio2 / voley; 1281. } 1282. 1283. if(deporte == '2') 1284. printf(".Rugby ---> No update (No se guardan los datos)"); 1285. if(deporte == '4') 1286. printf(".Hockey ---> No update (No se guardan los datos)"); 1287. if(deporte == '5') 1288. printf(".Futbol ---> No update (No se guardan los datos)"); 1289. 1290. 1291. 1292. printf("\n\nDesea seguir ingresando datos? s/n\n"); 1293. seguir = getch(); 1294. 1295. while(seguir != 's' && seguir != 'n') 1296. { 1297. printf("\nERROR, reingrese respuesta s/n ?\n"); 1298. seguir = getch(); 1299. } 1300. 1301. }while(seguir =='s'); 1302. printf("\nTenis practican %d y el promedio de edad es %.2f a¤os",tenis,promedioedad); 1303. printf("\nVoley practican %d y el promedio de edad es %.2f a¤os",voley,promedioedad2); 1304. getch(); 1305. } 1306. 1307. 1308. /***********************************************************/
1309. 1310. 1311. 1312. 1313. 1314. 1315. 1316. 1317. 1318. 1319. 1320. 1321. 1322. 1323. 1324. 1325. 1326. 1327. 1328. 1329. 1330. 1331. 1332. 1333. 1334. 1335. 1336. 1337. 1338. 1339. 1340. 1341. 1342. 1343. 1344. 1345. 1346. 1347. 1348. 1349. 1350. 1351. 1352. 1353.
void main() { int anio; clrscr(); printf("Ingrese a¤o:"); scanf("%d",&anio); if(anio % 4 == 0 && anio %100 != 0) printf("El a¤o es bisiesto"); else printf("El a¤o no es bisiestos"); getch(); } /***********************************************************/ void main() { float legajo, promedio,cantidad; int aprobo=0,desaprobo=0,total=0,marzo=0; char nombre[20],seguir ='s'; clrscr(); do { printf("\nNombre:"); scanf("%s",&nombre); printf("Legajo:"); scanf("%f",&legajo); printf("Promedio:"); scanf("%f",&promedio); total+=1; if(promedio>=7) aprobo+=1; if(promedio>=4 && promedio<7) desaprobo+=1;
1354. if(promedio<4) 1355. marzo+=1; 1356. 1357. printf("\nDesea seguir ingresando datos? s/n\n"); 1358. seguir = getch(); 1359. 1360. while(seguir!= 's' && seguir != 'n') 1361. { 1362. printf("\nERROR,reingrese respuesta s/n ?"); 1363. seguir = getch(); 1364. } 1365. }while(seguir == 's'); 1366. printf("\n\nDe %d alumnos ingresados...\nAprobaron %d\nRinden en diciembre %d\nRinden en Marzo %d",total,aprobo,desaprobo,marzo); 1367. getch(); 1368. } 1369. 1370. /***********************************************************/ 1371. 1372. void main() 1373. { 1374. int num1,num2; 1375. char opcion='s',seguir='s'; 1376. 1377. do 1378. { 1379. clrscr(); 1380. 1381. cprintf("\nElija una opci¢n:\n"); 1382. printf("\n1.Suma\n2.Resta\n3.Producto\n4.Divi si¢n\n"); 1383. opcion = getch(); 1384. 1385. printf("\n1§ N£mero:"); 1386. scanf("%d",&num1); 1387. printf("2§ N£mero:"); 1388. scanf("%d",&num2); 1389. 1390. if(opcion == '1') 1391. printf("\n%d + %d = %d",num1,num2,num1 + num2); 1392. if(opcion == '2')
1393. printf("\n%d - %d = %d",num1,num2,num1 - num2); 1394. if(opcion == '3') 1395. printf("\n%d x %d = %d",num1,num2,num1 * num2); 1396. if(opcion == '4' && num2!= 0) 1397. printf("\n%d / %d = %d",num1,num2,num1 / num2); 1398. if(opcion == '4' && num2 == 0) 1399. printf("\nError.No se puede dividir por cero"); 1400. if(opcion == '4' && num1 == 0) 1401. printf(" ---> No tiene sentido, siempre da 0"); 1402. printf("\n\n\rDesea seguir calculando? s/n"); 1403. seguir = getch(); 1404. 1405. while(seguir!= 'n' && seguir!= 's') 1406. { 1407. printf("\n\rDesea seguir calculando? s/n"); 1408. seguir = getch(); 1409. } 1410. }while(seguir=='s'); 1411. } 1412. 1413. /************************************************************ / 1414. 1415. void main() 1416. { 1417. 1418. int anio,a,b,c,d,e,n; 1419. 1420. clrscr(); 1421. 1422. printf("\nIng.A¤o:"); 1423. scanf("%d",&anio); 1424. 1425. a= anio % 19; 1426. b= anio % 4; 1427. c= anio % 7; 1428. d= (19*a + 24) % 30; 1429. e= (2*b + 4*c + 6*d + 5) % 7; 1430. n= (22 + d + e); 1431.
1432. if(n<32) 1433. printf("\nEn el a¤o %d pascua cayo el dia %d de marzo",anio,n); 1434. else 1435. printf("\nEn el a¤o %d pascua cayo el dia %d de abril",anio,n - 31); 1436. 1437. getch(); 1438. } 1439. 1440.