0% encontró este documento útil (0 votos)
35 vistas13 páginas

C en Automatización: Punteros y Arreglos

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas13 páginas

C en Automatización: Punteros y Arreglos

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

PROGRAMACION APLICADA A LA

AUTOMATIZACION INDUSTRIAL
PRACTICA # 3 Desarrollo de aplicaciones en C que
manejen colecciones de datos.
CAPÍTULO DEL CURSO: PROGRAMACIÓN ESTRUCTURADA PARA
APLICACIONES DE AUTOMATIZACIÓN.

TEMA DE LA ACTIVIDAD: USO DEL LENGUAJE C EN APLICACIONES


SIMPLES CON PUNTEROS, ARREGLOS Y ESTRUCTURAS.

Estudiante: Montalvo Burgos Angel Alfonso

OBJETIVOS DE APRENDIZAJE:
• Elaborar algoritmos en lenguaje C que permitan resolver los problemas
prácticos empleando funciones, punteros, y arreglos.

• Usar el ambiente de desarrollo integrado de Qt Creator para la edición,


compilación, ejecución y depuración de programas en C.

DURACIÓN: 120 minutos

MATERIALES Y HERRAMIENTAS:
• Computadora con Qt Creator correctamente instalado

INTRODUCCIÓN

El lenguaje de programación C, es uno de los pocos lenguajes de alto nivel que


permite el manejo de las direcciones de memoria hasta cierto punto, lo que
permite hacer programas más eficientes. También presenta, al igual que la
mayoría de los lenguajes, el uso de arreglos de memoria para trabajar más
cómodamente con colecciones de elementos de un mismo tipo, y presenta
estructuras para manejar colecciones de elementos de diferentes tipos. En esta
parte, se realizan ejercicios que emplean punteros y arreglos. Se debe emplear
como bibliografía la conferencia III o sesión de clase 3 y la propia bibliografía allí
propuesta.
DESCRIPCIÓN DE LA PRÁCTICA: El estudiante prueba los programas
realizados en la prepráctica en el ambiente de desarrollo Qt Creator. Luego
modifica o agrega funciones a algunos de estos programas con control de flujo
realizados previamente para cumplir un nuevo objetivo. Posteriormente, estos
programas son implementados y depurados en el ambiente de desarrollo.

PROCEDIMIENTO:

• Crear una carpeta en el escritorio que tenga de nombre “practica_2” donde


guardará sus programas y luego podrá llevárselos con usted. (Si se hace en
su PC propia puede obviar este paso, pero debe saber dónde se guardarán
sus proyectos.)

• Abra el IDE o Ambiente de Desarrollo Integrado que utilizará (Qt Creator).

• Implemente y pruebe la solución de la pregunta #1 editando su programa


en el IDE. Resuelva cada pregunta en un proyecto independiente. Compile
y ejecute su programa en el IDE. En caso de no compilar o ejecutarse
adecuadamente revise los mensajes de error (en caso de error de sintaxis)
o depure el programa (en caso de error de ejecución). Copie el código del
programa al informe de esta práctica (como texto) y la ventana de consola
dónde se vea su ejecución de forma válida (como imagen).

• Implemente y pruebe la solución de la pregunta #2 editando su programa


en el IDE. Compile y ejecute su programa en el IDE. Copie el código del
programa al informe de esta práctica y la ventana de consola dónde se vea
su ejecución de forma válida.

• Implemente y pruebe la solución de la pregunta #3 editando su programa


en el IDE. Compile y ejecute su programa en el IDE. Copie el código del
programa al informe de esta práctica y la ventana de consola dónde se vea
su ejecución de forma válida.

• Informe al profesor cuando haya concluido esta etapa.

• Realice las modificaciones que se encuentran en las preguntas #1 y #2


posteriormente en este documento.

• Vuelva a realizar los pasos 3, 4 y 5 con los programas ya modificados.

• Informe al profesor cuando haya concluido esta etapa.

• Describa las conclusiones y recomendaciones de la práctica.

Suba el informe a Sidweb.


EJERCICIOS:

• Realice un programa que declare las variables de punto flotante numero1


y numero2, con numero1 inicializado a 7.3. Definir la variable alphanum
de tipo caracter. Luego realice las siguientes acciones:

• Declare la variable fPtr que sea un puntero a void.

• Solicite por teclado el ingreso de valor para la variable alphanum

• Apunte con fPtr a la variable numero1 (asigne a fPtr la dirección de la


variable numero1).

• Imprima en pantalla el valor de la variable apuntada por fPtr.

• Asigne el valor de la variable apuntada por fPtr a la variable numero2.

• Imprima en pantalla el valor de la variable numero2.

• Imprima en pantalla la dirección de numero1.

• Imprima en pantalla la dirección almacenada en fPtr.

• Imprima en pantalla la dirección de numero2.

• Apunte con fPtr a la variable alphanume (asigne a fptr la dirección de la


variable alphanume)

• Imprima en pantalla la nueva dirección almacenada en fPtr.

• Imprima en pantalla la dirección de alphanume.

• Imprima en pantalla el valor de la variable apuntada por fPtr.


¿Por qué se declaró a fPtr como un puntero a void? ¿Qué tipo de casteo es
necesario para imprimir los valores apuntados por el puntero fPtr? Explique
detalladamente su respuesta.

Se declara como puntero a void para que se la pueda utilizar para señalar a un
objeto de cualquier tipo. Sin embargo, para realizar operaciones en el puntero o en
el objeto al que señala, el tipo al que señala debe especificarse explícitamente
para cada operación, por ello se hizo como casteo al momento de imprimir los
valores apuntado (float*) para que no se caiga el programa y me imprima el valor
pedido.

• Realice un programa que permita cambiar los valores de las diferentes


posiciones de un arreglo considerando lo siguiente:

• Defina las variables rangoini y rangofin de tipo entero.

• Defina un arreglo de nombre array que permita almacenar 10 números de tipo


entero.

• Solicitar por teclado los valores para las variables rangoini y rangofin (rangofin
debe ser mayor a rangoini).

• Almacenar en el arreglo array valores aleatorios entre los rangos definidos por
las variables rangoini y rangofin (Utilice la función rand ()).

• Imprima los valores almacenados en el arreglo.

• Solicite por teclado tres valores de tipo entero y asígnelos a la posición 3, 4 y 5


del arreglo respectivamente.

• Imprima el arreglo con los valores ingresados por teclado.

• Imprima las direcciones de los elementos en la posición inicial, 3, 4 y 5


respectivamente utilizando aritmética de punteros.
¿Qué valores se almacena en el arreglo si se define un rango aleatorio entre
0 y 100? Ejecute varias veces el programa manteniendo el rango entre 0 y
100 y explique lo observado.

Se definen valores enteros entre 0 y 99, si se lo ejecuta varias veces los valores
parecen no ser aleatorios debido a que a cada vez que se ejecuta el programa
tiempo retorna a su origen provocando que los valores sean dependiente al
tiempo, por ello se llama a la librería time.h para ejecutar la funcion srand que nos
permite que el tiempo de ejecución no se reinicie a cada rato.

Utilice una función que no tenga retorno (void) cambiavalorpos(int* arr);


solicitar por teclado tres valores de tipo entero y asignarlos en las
posiciones 3, 4 y 5 del arreglo utilizando aritmética de punteros, que antes
hacía en el programa principal.

• Imprima en pantalla la dirección en memoria de dicha función.

IMPLEMENTACIONES Y RESULTADOS

EJERCICIO #1:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

//ejercicio1

int main()

float numero2, numero1=7.3;

void* fPtr;
char alphanum;

printf("deme alphanum:");

scanf("%c",&alphanum);

fPtr= &numero1;

printf("el valor de la variable apuntada pot fPtr es: %f\n",*(float*)fPtr);

numero2= *(float*)fPtr;

printf("el valor del numero2: %f\n",numero2);

printf("direccion del numero1: %p\n",&numero1);

printf("direccion almacenada en fPtr: %p\n",fPtr);

printf("direccion numero2: %p\n",&numero2);

fPtr=&alphanum;

printf("nueva direccion en fPtr es: %p\n ",fPtr);

printf("direccion de alphanum es: %p\n",&alphanum);

printf("el valor de la variable apuntada por fPtr es: %c \n",*(char*)fPtr);

return 0;

}
EJERCICIO #2:

Codigo sin la funcion cambiarvalorespos

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

main()

int rangoini,rangofin;

int array[10]={};

printf("deme valores de rangoini y rangofin de tal manera que rangofin sea


mayor a rangoini: \n");

scanf("%d %d",&rangoini,&rangofin);

while(rangofin<rangoini){

printf("valores no acorde a lo solicitado\ningrese nuevamente\n");


printf("deme valores de rangoini y rangofin de tal manera que rangofin sea
mayor a rangoini: \n");

scanf("%d %d",&rangoini,&rangofin);

for(int i=0;i<10;i++){

srand(time(0));

array[i]=(rand()%(rangofin-rangoini+1))+rangoini;

printf("valores alamcenado en el arreglo son:\n ");

for(int a=0;a<10;a++){

printf("%d, ",array[a]);

printf("\ningrese tres valores enteros: \n");

scanf("%d %d %d",&array[3],&array[4],&array[5]);

for(int e=0;e<10;e++)

printf("elemento %d del arreglo es: %d\n",e,array[e]);

printf("&array[3] es: %p ",array+3);

printf("&array[4] es: %p ",array+4);

printf("&array[5] es: %p ",array+5);

}
Codigo con la funcion cambiarvalorpos
#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void cambiarvalorpos(int* arr)

printf("\ningrese tres valores enteros: \n");

scanf("%d %d %d",arr+3,arr+4,arr+5);

}
main()

int rangoini,rangofin;

int array[10]={};

printf("deme valores de rangoini y rangofin de tal manera que rangofin sea


mayor a rangoini: \n");

scanf("%d %d",&rangoini,&rangofin);

while(rangofin<rangoini){

printf("valores no acorde a lo solicitado\ningrese nuevamente\n");

printf("deme valores de rangoini y rangofin de tal manera que rangofin sea


mayor a rangoini: \n");

scanf("%d %d",&rangoini,&rangofin);

srand(time(0));

for(int i=0;i<10;i++){

array[i]=(rand()%(rangofin-rangoini+1))+rangoini;

printf("valores alamcenado en el arreglo son:\n ");

for(int a=0;a<10;a++){

printf("%d, ",array[a]);

}
cambiarvalorpos(array);

for(int e=0;e<10;e++)

printf("elemento %d del arreglo es: %d\n",e,array[e]);

printf("&array[3] es: %p \n",array+3);

printf("&array[4] es: %p \n",array+4);

printf("&array[5] es: %p\n ",array+5);

printf("direcccion en memoria de la funcion cambiarvalorpos es:


%p\n",cambiarvalorpos);

}
CONCLUSIONES Y RECOMENDACIONES

Conclusiones

 para tener mayor eficiencia con el uso de la funcion rand() se lo debe


complementar con la librería time.h para que los valores random dejen de
ser predecibles y cumplan con su funcion de aleatoriedad
 La creación de un puntero a void es muy util al querer obtener direccion de
cualquier tipo d dato sin embargo hay que realizar el casteo
correspondiente a la variable
Recomendaciones


Al momento de colocar un rango de valores a la funcion rand(), es preferible
utilizar la formula (rand()%(Vmax-Vmin+1))+Vmin para evitar
complicaciones
 Utilizar \n en su codigo para que la impresión se vea más clara y ordenada,
ademas de comentar en ciertas partes del codigo para que sea facil su
comprensión dias posteriores a una revision

BIBLIOGRAFIA

[1]. Deitel and Deitel. Como programar en C/C++. Segunda edición o superior.

[2]. De la Fuente y otros. Aprenda lenguaje ANSI C como si estuviera en primero.


Universidad de Navarra.

[3]. Instituto Nacional de Tecnologías Educativas y de Formación del Profesorado.


Introducción a la programación con el lenguaje C. Enlace:
[Link]
tent&view=article&id=745. Fecha de consulta: Viernes 2 de Marzo de 2018.

INICIAL EN DESARROLLO DESARROLLADO EXCELENTE

Firma del Profesor

También podría gustarte