Errores comunes en programación

Description

Se describen en esta diapositivas 3 ejemplos de errores comunes de programación, ejemplificados en C++ y corregidos en el mismo.
Luciao Agustín Correa Sapiega
Slide Set by Luciao Agustín Correa Sapiega, updated more than 1 year ago
Luciao Agustín Correa Sapiega
Created by Luciao Agustín Correa Sapiega almost 8 years ago
176
3

Resource summary

Slide 1

    MANTENIMIENTO DE SW
    Alumnos:Correa Sapiega Luciano AgustínCardozo Maximiliano AgustínProfesora: Norma PascoCurso y año: 4° 1° C.S.I.P.P. 2016

Slide 2

    ERRORES COMUNES DE PROGRAMACIÓN
    A continuación veremos algunos errores muy comunes al programar, especialmente en aquellas personas que están iniciándose en este mundo de los códigos. Se verán errores de tipo lógico (de razonamiento) y otros que tengan que ver con el correcto uso de los operadores del lenguaje. En particular, estos errores serán demostrados en el lenguaje C++, compilados con Bloodshev dev C++.

Slide 3

    Bucle infinito:
    Este error es muy común en los nuevos programadores cuando van descubriendo las estructuras repetitivas o bucles. Estos realizan determinadas acciones hasta que se cumpla cierta condición (límite). Muchas veces el límite está mal establecido o bien, nunca se cumple porque la condición que verifica la estructura repetitiva no está bien planteada por un fallo lógico al pensar la variable de conteo del bucle. 

Slide 4

    Ejemplo del error:
    En el código, se puede apreciar un for. Este le asigna un valor a su variable contadora X  y establece la condición para que el bucle se repita X<=10 (siempre que X sea menor o igual que 10). El bucle tiene la finalidad de mostrar el valor que contenga x, puesto que este valor debería ir creciendo del 1 hasta el 10. Veamos su ejecución:
    Caption: : Código en C++ del ejemplo de bucle infinito.

Slide 5

Slide 6

    Explicación del error:
    El programa repite de manera indefinida el número 0, porque este es el valor de X. Como esta nunca cambia su valor dentro de la estructura repetitiva, nunca podría llegar a incumplir la condición del for (X<=10) ya que SIEMPRE será 0. Hay variantes de este tipo de error que llevan al mismo resultado. Podría realizarse el conteo de la variable pero fuera del for, por lo que nunca se tendría en cuenta dentro del mismo y llevaría a los mismos resultados. También podría volver a inicializarse la variable contadora con un 0 dentro del mismo for, lo que provocaría que aunque la x cuente, siempre vuelva a valer 0 para cuando se terminó de ejecutar el programa. 

Slide 7

    Correción del error:
    Para este caso, como el error es no contar del 1 al 10 la varabiable contadora, se añade en el encabezado del for X++. El operador ++ significa que a esa variable se le va a sumar 1. Sería lo mismo que escribir X=X+1. De esta manera, nuestra variable debería ir aumentando su valor de 1 en 1 hasta llegar a 10, donde entraría por última vez al for. La próxima vez que se ejecute el for, X=11 y por tanto no se cumpliría la condición del for. Lo que lleva a la finalización del bucle. Veamos la ejecución.
    Caption: : Código corregido

Slide 8

Slide 9

    Error de secuencia:
    En síntesis, un error de secuencia se da cuando la forma en la que están ordenadas las líneas o instrucciones del algoritmo no es correcta para el objetivo que tiene este. Es decir, no produciría errores al compilar si la sintaxis es buena, pero no produciría los resultados esperados. Un caso muy común para las personas que se inician en C++  se da porque pretenden que las asignaciones funciones como ecuaciones. Por ejemplo, escribiendo suma= a+b se pretende que suma contenga la suma de estas dos variables. Ahora, esto se realizará con los valores que a y b tengan al momento de la ejecución de la instrucción.

Slide 10

    Código del error:
    Caption: : Código erróneo
    Como se puede observar, se crea una variable llamada suma, la cual contiene la suma de a y b. No obstante es después de la creación y asignación de esta variable, cuando se realiza la toma de datos ingresados por teclado y se almacenan estos valores en a y b, respectivamente. 

Slide 11

Slide 12

    Explicación y corrección del error:
    En C++ y en muchos otros lenguajes de programación, las asignaciones son cosas de una sola vez. Es decir, las variables contienen un valor apartir del momento en que se crea y se les da uno. De aquí en adelante, este no se altera hasta que se vuelva a invocar esta variable utilizando el operador de asignación. En síntesis, si bien se está sumando lo que contiene a y lo que contiene b, estas variables todavía no contienen ningún valor (o bien contienen basura de memoria, error que trataremos más adelante). La corrección del código implicaría desplazar suma= a+b luego de la toma de valores para a y b. Veamos su ejecución.
    Caption: : Código corregido

Slide 13

Slide 14

    No inicializar variables:
    Este error tiene sus raíces en que,  a diferencia de otros lenguajes como por ejemplo Pascal, en C++ las variables recién creadas (del tipo que sea, aunque veremos un ejemplo con enteros) no son inicializadas en 0 por defecto. Aquellos programadores que vienen de otros lenguajes que sí realizan esto, suponen que al crear una variable cualquiera de tipo entero, por ejemplo, estas ya tienen un 0 dentro suyo, esperando para que operen la variable. La realidad es que C++ les asigna un espacio en memoria aleatorio, el cual pudo o no haber estar ocupado antes por alguna otra información, tal que el valor de la variable recién creada podría ser 0 como podría ser 9284394. A estos valores que quedaron de procesos o cálculos anteriores se los llama basura de memoria. 

Slide 15

    Código del error:
    Este error es bastante difícil de demostrar con un código sencillo, pero comprobaremos la existencia de esta basura de memoria y el hecho de que las variables no son inicializadas en 0, con la suma de 3 variables que, supuestamente, no tienen valores asginados.

Slide 16

Slide 17

    Explicación y corrección del error:
    El resultado de la suma es 1 debido a que muy probablemente, los espacios que fueron asignados para a,b y c estaban siendo ocupados por valores flotantes (es decir, decimales) y la suma de estos fue redondeada a 1 por el programa.  En este caso, el total dio 1, pero si la memoria estuvo en su totalidad ocupada en algun momento desde que la computadora se prendió, es muy probable que se produzcan valores más altos, aleatorios. Lo correcto sería inicializar las variables que se crean en algún punto del programa, bien en el momento de declararlas o justo antes de utilizarlas. En la imagen se comprueba la inicialización en 0 de las variables.

Slide 18

Show full summary Hide full summary

Similar

Mapa Conceptual de la arquitectura de base de datos
Alan Alvarado
Abreviaciones comunes en programación web
Diego Santos
codigos QR
Cristina Padilla
Corrientes del Pensamiento Crítico: Robert Ennis
Monoko-chan Sand
ANALISIS SISTEMATICO DE LA COMPUTADORA Y LOS PERIFERICOS QUE LO INTEGRAN
Ana pinzon
Historia de la Computadora
Diego Santos
Paradigmas de Programacion
Hector Montillo
Sintaxis Struct
Zorrosid T
Envíos de Parámetros
Marcelo Olalla Larco
estructuras condicionales
juan vargas
LENGUAJE C
Diana Martinez 001