U5 Arreglo

Arreglos:
Concepto de programación análogo a los conceptos matemáticos de vector, matriz y tensor,
existen arreglos unidimensionales, que se pueden interpretar como vectores columna, arreglos bidimencionales conocidos como matrices, y también existen los arreglos multidimensionales, son aquellos arreglos que manejan la tercera dimensión. 

U5ArregloUno
A continuación se mostraran tres formas para declarar un vector e imprimir sus datos.
#include <stdio.h>
#include <stdlib.h>

int main()
{   ////Primer caso para declarar un vector
    /*float y[3]; //utilizaremos variables flotantes
    y[0]=7; //asignacion de valor a la posicion
    y[1]=0.5;
    y[2]=-2.7183;
    printf("%f posicion 0 \n",y[0]); //se imprime uno en uno los valores
    printf("%f posicion 1 \n",y[1]);
    printf("%f posicion 2 \n",y[2]);*/
    ////Segundo caso para declarar un vector
    /*int x[3];//vector de tamaño tres
    int a;
    x[0]=1; ///en la posicion cero valdra 1
    x[1]=2;
    x[2]=3;//en la posicion 2 valdra 3
    for(a=0;a<3;a++) //estructura de control para imprimir los valores que tomo el vector
    {
        printf("%d\n",x[a]);
    }*/
     ////Tercer caso para declarar un arreglo
    int a;
    int x[3]={1,2,3};//vector con tamaño tres y dentro de {} se declaran sus valores
    for(a=0;a<3;a++)//para imprimir las posiciones del vector
    {
        printf("%d\n",x[a]);//se imprimen las posiciones del vector con su respectivo valor
    }

}

U2ArregloDos
En  el siguiente programa se muestra como se auto asignan los valores de las posiciones y como el usuario asigna los valores con la estructura de control for. 
#include <stdio.h>
#include <stdlib.h>

int main()
{    //de esta forma con una estructura de control al vector se le asigna los valores de 1 a 5
    /*int y[5];
    int b;
    for(b=0;b<5;b++)
    {
        y[b]=b+1;
        printf("%d\n",y[b]);
    } */
    //pedir los datos al usuario
    int y[5];
    int b;//indice
    for(b=0;b<5;b++)
    {
        printf("dame el numero %d\n",b);
        scanf("%i",&y[b]);
    }
     for(b=0;b<5;b++)
    {
       printf("%d valor guardado \n",y[b]);
    }
}

U5VectorUno
En este programa se declaran 2 vectores con sus respectivos valores y se realiza la resta de estos dos vectores mediante una estructura de control.
#include <stdio.h>
#include <stdlib.h>

int main()
{ //restaremos vector b - vector a
int a[5]={1,2,3,4,5}; //declaracion del vector a con tamaño 5
int b[5]={6,7,8,9,10}; //declaracion del vector b con tamaño 5
int r[5]; //aqui asignaremos la resta de los anteriores vectores
int i;
for(i=0;i<5;i++) //i tomara el valor de la posicion dentro del vector de 0 a 4
{
    //printf("vector a: %i vector b: %i\n",a[i],b[i]); para carroborar que los datos esten bien asignados
    r[i]=b[i]-a[i]; //se hace la resta de los valores dependiendo de su posicion y esta la define i
    printf("vector b: %i - vector a: %i = %i\n",b[i],a[i],r[i]); //se imprime el resultado
}
}

U5VectorDos
En este programa se iniciaran dos vectores, y el usuario le asignara sus valores, para despues realizar la resta, todo es mediante la estructura for.
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float a[5]; //vectores declarados
    float b[5]; //es importante la mascara float ya que no se sabe si el usuario nos dara numeros decimales
    float r[5];
    int i;

    printf("VALORES PARA PRIMER ARREGLO\n");
    for(i=0;i<5;i++) //asignacion de valor de la posicion 0 a 4
    {
        printf("dame el dato a %i\n",i);
        scanf("%f",&a[i]); //captura del dato

    }

    printf("VALORES PARA SEGUNDO ARREGLO\n");
    for(i=0;i<5;i++)
    {
        printf("dame el dato b %i \n",i);
        scanf("%f",&b[i]); //captura del dato

    }

    /*for(i=0;i<5;i++)  //con esta estructura podemos corroborar los datos asignados
    {
        printf("lo guardadp en a %i es %d \n",i,a[i]);
        printf("lo guardadp en b %i es %d \n",i,b[i]);

    }*/

    //Resta de los vectores a-b
    for(i=0;i<5;i++) //se resta los datos de la posicion 0 a 4
    {
        r[i]=a[i]-b[i]; //se asignan los valores del resultado al vector r
    }

    for(i=0;i<5;i++)
    {
        printf("valor de %.2f - valor de %.2f = %.2f\n",a[i],b[i],r[i]); //imprecion de la resta
        //printf("%.2f\n",r[i]);
    }
}

U5VectorTres
El siguiente programa determina la longitud de un vector que no sabemos su tamaño
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char carrera[]="programacion estructurada";//vector con caracteres sin conocer su tamaño
    int i,v;
    v=strlen(carrera);//con esta funcion de la libreria string.h se puede saver el nuero de la cadena
    printf("longitud %i\n",v);
    for(i=0;i<v;i++)//con esta estrucutura se impriira cada caracter en su respectiva posicion
    {
        printf("valor de cadena en posicion: %i es : %c\n",i,carrera[i]);
    }

}

U5Vectorcuatro
Ejemplo de ciertas funciones que se pueden hacer con vectores

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n;
    printf("ingrese tamaño del vector: \n");
    scanf("%d",&n);
    float x[n], temp;
    //escribe datos en el arreglo
    for(i=0;i<n;i++)
    {
        printf("elemento %d: \n",i);
        scanf("%g",&x[i]);
    }
    //intercambia elementos del arreglo
    for(i=0;i<n/2;i++)
    {
        temp=x[i];
        x[i]=x[n-i-1];
        x[n-i-1]=temp;
    }

    //imprime los elementos del vector
    for(i=0;i<n;i++)
        printf("%g\t",x[i]);
}

U5VectorCinco
El siguiente programa es igual al anterior pero en este caso se utilizan funciones
#include<stdio.h>
//declaracion de la funcion intercmbia
void intercambia(float *a,float *b);
main()
{
    int i,n;
    printf("ingrese tamaño del vector: \n");
    scanf("%d",&n);
    float x[n];
    //escribe datos en el arreglo
    for (i=0;i<n;i++)
    {
        printf("elemento %d: \n",i);
        scanf("%g",&x[i]);
    }
    //intercambia elementos del arreglo
    for (i=0;i<n/2;i++)
    {
        intercambia(&x[i],&x[n-i-1]);
    }
    //imprime los elementos del vector
    for (i=0;i<n;i++)
        {
            printf("%g\t",x[i]);
        }
    }

    void intercambia(float *a,float *b)
    {
        float temp;
        temp=*a;
        *a=*b;
        *b=temp;
    }

U5MatrizUno
En el siguiente programa se va a declarar un arreglo bidimensional o mas bien conocido como matriz.
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int mat1 [2][3]={1,2,3,4,5,6};//[renglones][columnas]
   int r,c;
   for(r=0;r<2;r++)//recorre los renglones para las posiciones de 0 a 3
   {
       for(c=0;c<3;c++)//recorre las columnas para posiciones 0 a 3
       {
           printf("%i\t",mat1[r][c]);//imprime los datos de las respectivas posiciones
       }
    printf("\n");
   }
}

U5MatrizDos
En el siguiente programa se observa que las matrices también pueden tener caracteres, ademas que se explicar de una forma mas visual como es la cuestión de las posiciones de los datos dentro del arreglo.
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char mat1[3][3]={'A','B','C','D','E','F','G','H','I'};//pueden ser datos de tipo caracter
    int r,c;//variables auxiliares para la imprecion

    for(r=0;r<3;r++)//recorre las posiciones de los renglones de 0 a 2
    {
        for(c=0;c<3;c++)//recorre ls columnas de 0 a 2
    {
        printf("%i,%i %c \t ",r,c,mat1[r][c]);//imprime la posicion y el dato
    }
    printf("\n");
    }
}

U5MatrizPracticaUno
En el siguiente programa se declara la matriz identidad y se suma con otra igual.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a [3][3];
    int re [3][3];
    int id [3][3];
    int id2 [4][4];
    int r,c,i;

    //matriz identidad
    for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
         if(r==c)
            id[r][c]=1;
         else
            id[r][c]=0;
        }
    }

    //sumar dos matrices identidad

     for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
          re[r][c]=id[r][c]+id[r][c];

            }
    }
    //imprimir
    for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
           printf("%d",re[r][c]);
        }
        printf("\n");
    }

}

U5MatrizIdentidadConFunciones
El siguiente programa por medio de las funciones es posibles imprimir cualquier matriz identidad sin importar su tamaño.
#include <stdio.h>
#include <stdlib.h>
int matid(int ren,int col)
{
    int id [ren][col];
    int r,c;

    //matriz identidad
    for(r=0;r<ren;r++)
    {
        for(c=0;c<col;c++)
        {
         if(r==c)
            id[r][c]=1;
         else
            id[r][c]=0;
        }
    }


    //imprimir
    for(r=0;r<ren;r++)
    {
        for(c=0;c<col;c++)
        {
           printf("%d",id[r][c]);
        }
        printf("\n");
    }

}

main()
{   int renglon;
    int columna;
    printf("dame renglon\n");
    scanf("%d",&renglon);
    printf("dame columna\n");
    scanf("%d",&columna);
    matid(renglon,columna);
}
U5MultiplicacionDeMatrices
En el siguiente programa se multiplican 2 matrices cuadradas de 3x3, utilizando estructurs de control en su principal forma de for.
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[3][3]={1,2,0,2,-1,-1,3,2,3};
    int b[3][3]={2,1,1,-1,1,3,1,2,4};
    int re[3][3];
    int r;
    int c;

    printf("matriz a\n");
    for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
           printf("%d",a[r][c]);
        }
        printf("\n");
    }
    printf("matriz b\n");
     for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
           printf("%d",b[r][c]);
        }
        printf("\n");
    }

    //multiplicacion
    for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
           re[r][c]=(a[r][0]*b[0][c])+(a[r][1]*b[1][c])+(a[r][2]*b[2][c]);
        }
    }
     printf("multiplicacion de a*b\n");
     //imprime el resultado de la multiplicacion
     for(r=0;r<3;r++)
    {
        for(c=0;c<3;c++)
        {
           printf("%d",re[r][c]);
        }
        printf("\n");
    }

}

Comentarios