Recursividad

--Originally published at Aprendiendo a programar en C++

Se dice que una función es recursiva cuando se define en función de si misma.

No todas la funciones pueden llamarse a si mismas, sino que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente.

Tampoco todos los lenguajes de programación permiten usar recursividad.

C++ permite la recursividad. Cada vez que se llama a una función, se crea un juego de variables locales, de este modo, si la función hace una llamada a si misma, se guardan sus variables y parámetros, usando la pila, y la nueva instancia de la función trabajará con su propia copia de las variables locales. Cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros de la pila y continua la ejecución en el punto en que había sido llamada.

Por ejemplo:

Prodríamos crear una función recursiva para calcular el factorial de un número entero.

El factorial se simboliza como n!, se lee como “n factorial”, y la definición es:

n! = n * (n-1) * (n-2) * … * 1

Hay algunas limitaciones:

  • No es posible calcular el factorial de números negativos, no está definido.
  • El factorial de cero es 1.

De modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos:

/* Función recursiva para cálculo de factoriales */
int factorial(int n) {
   if(n < 0) return 0;
   else if(n > 1) return n*factorial(n-1); /* Recursividad */
   return 1; /* Condición de terminación, n == 1 */

Finalmente dejare un enlace a una página que explica a fondo el uso de la recursividad:

Recursividad


Final project

--Originally published at Programming

Well, we’re going to do a clock but…different. Is something like this.

Reloj-de-palabras

The team:

  • Estefanía Langarica
  • Karen Chacón
  • Angel

Our code is this:

#include <string.h>
#include <Wire.h>  
#include"RTClib.h"


                    // Display output pin assignments

#define MINUTES            Display1=Display1   | B00000001

#define MTEN   Display1=Display1   | B00000010  

#define HALF     Display1=Display1   | B00000100

#define PAST     Display1=Display1   | B00001000

#define THREE  Display1=Display1   | B00010000

#define ITIS        Display1=Display1   | B00100000

#define TWENTY      Display1=Display1   | B01000000

#define TO      Display1=Display1   | B10000000

 

#define TWO         Display2=Display2   | B00000001

#define SIX             Display2=Display2   | B00000010 

#define TWELVE         Display2=Display2   | B00000100

#define HFIVE    Display2=Display2   | B00001000

#define SEVEN  Display2=Display2   | B00010000

#define OCLOCK          Display2=Display2   | B00100000

#define ONE          Display2=Display2   | B01000000

#define QUARTER         Display2=Display2   | B10000000

 

#define EIGHT   Display3=Display3   | B00000001

#define MFIVE   Display3=Display3   | B00000010 

#define ARDUINO  Display3=Display3   | B00000100

#define ELEVEN Display3=Display3   | B00001000

#define HTEN    Display3=Display3   | B00010000

#define NINE     Display3=Display3   | B00100000

#define FOUR    Display3=Display3   | B01000000

#define RBK     Display3=Display3   | B10000000

 

int hour=0, minute=0, second=0;

static unsigned long msTick =0;  // the number of Millisecond Ticks since we last 

// incremented the second counter

int  selftestmode;          // 1 = in self test - flash display

char Display1=0, Display2=0, Display3=0;
                        

// hardware constants

int LEDClockPin=8;  // Arduino Pin#8 - Shift register 74HC595 Pin 11 clock

int LEDDataPin=9;   // Arduino Pin#9  - Shift register 74HC595 pin 14 Data

int 
Continue reading "Final project"

Crear y usar libreria

--Originally published at Aprendiendo a programar en C++

En este post, haré una lista de los pasos a seguir para crear y posteriormente utilizar una librería para c++.

  1. Genera las funciones que te interesan y escribelas todas juntas (código y cabeceras) en un mismo archivo de texto (Puedes usar el editor de texto del compilador, el bloc de notas, igual da…) tal y como se ilustra a continuación con un sencillo ejemplo:

    int multiplica(int A, int B);
    int suma(int A, int B);
    int resta(int A, int B);

    int multiplica(int A, int B)
    {
    return(A*B);
    }
    int suma(int A, int B)
    {
    return(A+B);
    }
    int resta(int A, int B)
    {
    return(A-B);
    }

  2. El fichero creado anteriormente, guárdalo con extensión .h, por ejemplo milibreria.h (importante no ejecutarlo para que no le pueda cambiar sola la extensión). Se deberá guardar en la carpeta include del compilador. Esta carpeta se puede encontrar fácilmente en la misma carpeta del compilador., accediendo a Mi PC (Equipo) y en la carpeta donde se guardan todos los programas. Otra opción es que si solo se desea usar mibiblioteca.h una única vez, se puede guardar el fichero en la misma carpeta del código que queramos compilar.
  3. Ahora, para utilizar esta librería tenemos dos opciones, que dependerán de la carpeta en la que se haya guardado dicha librería. Si se guardo en la carpeta include llamaremos la librería como cualquier otra #include <milibreria.h>  y si se guardo dentro de la carpeta del código la llamaremos así: #include “milibreria.h”.
  4.  Finalmente podemos utilizar las funciones de la librería, sin necesidad de escribirlas de nuevo.

De todas formas dejaré este artículo en el que se explica a fondo la creación de librerías:

crear librerías


Lo tienes que hacer

--Originally published at Adal´s Blog

Había estado aplazando el WSQ08 – Yo Soy 196 porque había oído que estaba algo difícil, pero al final ya que lo he hecho, me he dado cuenta que no es tan difícil como dicen, así que comenzamos:

Esta es la actividad:





El proceso para realizar este fue un poco diferente a los otros ya que teníamos que descargar una libreria para poder utilizar numero muy grandes, pero gracias a los vídeos que Ken nos proporciono y la ayuda de Fabricio porfin lo puede hacer :D




Paginas de ayuda:

Survey! (Quiz week 14)

--Originally published at Programming Path

For this quiz we had to do an evaluation of our teacher Ken. I really want to thank him for the new experience he gave us of his way of teaching. I actually like that method because it helps me with my will force. Not only that, it helps me realize how responsible I am.

Thanks Ken Bauer.

It’s still not over, but I will give my best.

I want to share the song I am listening right now. It is The Bay from Metronomy.


Lots of Problems (Quiz week 9)

--Originally published at Programming Path

This quiz was veeeery long. There were 10 problems, but we only had to do 8 problems.

1. Escribe el función distancia cual recibe 4 números (x1, y1, x2, y2) cuales representan dos puntos en espacio (x1,y1) y (x2,y2). El método debe regresar la distancia entre los dos puntos. Recuerda que el valor cuadrada del hipotenusa del triangulo es igual que la suma de las cuadradas de los otro dos lados del triangulo (the hypotenuse squared is equal to the sum of the squares of the other two sides).

Quiz9

2. (5 puntos) Escribe un función que se llama triangulo cual recibe un parámetro size y imprime un triangulo derecho como el siguiente. El renglón mas grande debe llevar size numero de “T”. SOLO imprime los “T”s y los endlines. Nota que no hay characteres (espacios) a la derecha de los T’s. Debe usar un ciclo “for” para controlar el repetición.

PQ2

 

3. Escribe la función factorial cual recibe un entero “x” y regresa el valor de x! Recuerda que 0! = 1, 1! = 1, 2! = 2, 3!= 6, 4! = 24, etc. Para los de Python: NO PUEDES usar el factorial como parte del module “math”

PQ3

4. Escribe una función que se llama promedio_lista que recibe un parámetro (una lista (Python) o arreglo/Vector de C++) de valores float y regresa como float el promedio de los números en la lista.

PQ4

5. Escribe una función que se llama smallest_of_four cual recibe cuatro valores float como parametros y regresa el minimo (más pequeño) de los valores. Ojo: puede recibir unos valores iguales.

Click to view slideshow.

6. Escribe una función que se llama fibonacci cual recibe un número n (puedes dar por cuenta que valor mayor o igual que cero) y regresa y valor correspondiente del serie de fibonacci,

PQ6
PQ7.png
PQ10
🙂
Continue reading "Lots of Problems (Quiz week 9)"

Distance (Quiz week 9)

--Originally published at Programming Path

The assignment of the quiz was to ask for two coordinates and calculate the distance between them. It needed to have floats and a function as well.

This problem was very easy, because in school they made me calculate the distance a lot of times. I only add the math library (<cmath>) because I elevate to the power and resolve a square root.

Here is the code:

Quiz9

Thanks for reading.


Post of the weeks #11,12,13,14,15 and 16 what things I learned in these weeks ? And Index of Mastery Topics

--Originally published at Solving Problems with Programming

Picture of author

First let me tell you that  I learn and achieved all transversal topics and you can see it in the following link: Post of the week #3 what things i learned in this week #3 ? And Index of Mastery Topics

I also explain my project and formed a small team that corresponds of completing this ability to create C++ project in IDE and run inside the IDE and can be explained in my post My Project For the Course TC1017 and Expo Ing. Let’s code!

Futhermore, I am going to present the report of all the Mastery Topics achieved in this week:

  1. #Mastery01 Use of comments, achieved in: Post of the week #2 what things i learned in this week #2 ?
  2. #Mastery02 C++ Good Style coding conventions, achieved in: Post of the week #2 what things i learned in this week #2 ?
  3. #Mastery03 Basic types and their use, achieved in: Post of the week #2 what things i learned in this week #2 ?
  4. #Mastery04 Basic output (print), achieved in: Post of the week #2 what things i learned in this week #2 ?
  5. #Mastery05 Basic user input (text based), achieved in: Post of the week #2 what things i learned in this week #2 ?
  6. #Mastery06 Calling functions, achieved in: #Quiz03. Also here:#WSQ08 Yo soy 196 11/03/17 and WSQ08.cpp
  7. #Mastery07 Creating functions, achieved in: #Quiz03. Also here: #WSQ08 Yo soy 196 11/03/17 and WSQ08.cpp
  8. #Mastery08 Importing and using libraries, achieved in: Post of the week #1 what things i learned in this week #1 ? Also in #WSQ08 Yo soy 196 11/03/17 and WSQ08.cpp
  9. #Mastery09 Creating and using your own libraries (program with multiple files), achieved in: #Quiz03. Furthermore, also in here: #WSQ08 Yo soy 196 11/03/17 and WSQ08.cpp
  10. #Mastery10 Use of the conditional “if”,
    Continue reading "Post of the weeks #11,12,13,14,15 and 16 what things I learned in these weeks ? And Index of Mastery Topics"

#WSQ13 SciLab 16/04/17

--Originally published at Solving Problems with Programming

scilabp (1)

Link of picture

So in this fourteen week class I started with doing this WSQ13 and I started reviewing in creating and calling functions in C++.#Mastery06, #Mastery07, #Mastery16 Use of recursion for repetitive algorithms, #Mastery17 When to use what type of repetition in a program, #Mastery18 Creation and use of Arrays/ Vectors in C++. Furthermore, in this stage I have all the topics of the course from 1 to 24.

What I did for this numeric program is using Scilab. Scilab is a great tool that I believe I will find very useful during the rest of my degree programs and beyond. The motivation here is simply to introduce me to the tool. Scilab is open source software and runs on Linux, Mac and Windows

Please download and “play with” SciLab.

The resources I need it to play with Scilab are:

Download the latest version at http://www.scilab.org/download/latest

Please follow the tutorial available on their website under Resources->Documentation. Here is the direct link to the tutorial http://www.scilab.org/content/download/849/7901/file/Scilab_beginners.pdf

Page for SciLab to download at https://www.scilab.org

SciLab is an incredibly useful software used to perform ALL mathematical calculations, plots AND even control Microcontrollers!!. It works using commands from the Matlab software and you can also play with this software . As explained in their introductory document:

As we can see in the next pictures we have the #Mastery23 Data analysis with tools (to be determined which tool, most likely SciLab) and #Mastery24 Visualization of data with tools where we have a command to give a value to a variable and using the command plot for graphics we can see the behaviour of that variable of the graphic. For example, if we have these commands:

>> x=0: pi/100: 2*pi;% son los valores del inicio en cero luego el incremento es pi/100

sin x and cos x
surf
pieee
Continue reading "#WSQ13 SciLab 16/04/17"