Trabajo Práctico Número 4: Arreglos Unidimensionales

Aquí vas a encontrar algunos ejercicios de Arreglos Unidimensionales o comunmente llamados arrays de una dimensión.
  • Invertir un vector.

Escribir un programa que lea del teclado un vector de 10 números
enteros, lo invierta y finalmente lo muestre de nuevo.
#include <stdio.h>
#define N 10
 
void main()
{
   int i,  vector[N], tmp;
 
   printf( "\nIntroduzca 10 numeros enteros:\n\t" );
   for(i=0;i<10;i++)
   {
      scanf( "%d%*c", &vector[i] );
      printf( "\t" );
   }
   printf( "\nEl vector original es:\n\t" );
   for(i=0;i<10;i++)
      printf( "v[%d]=%d\n\t", i, vector[i] );
   for(i=0;i<5;i++)
   {
      tmp=vector[i];
      vector[i]=vector[9-i];
      vector[9-i]=tmp;
   }
   printf( "\nEl vector invertido es:\n\t" );
   for(i=0;i<10;i++)
      printf( "v[%d]=%d\n\t", i, vector[i] );
}
  • Mezcla

Diseñar un programa que lea dos vectores ordenados crecientemente de enteros y que escriba un vector también ordenado de enteros que contenga todos los elementos comunes a los dos vectores. En el caso de que un elemento esté repetido varias veces en ambos vectores,
en el nuevo aparecerá también repetido el número de veces menor.
#include <stdio.h>
/*Maximo tamaño de un vector: 100*/
#define MAXNUM 100
void main()
{
    int i, j=0, k=0, m, n, v1[MAXNUM], v2[MAXNUM], v3[MAXNUM];
    /*Introduce los datos*/
    printf("\nIntroduzca la longitud del vector 1:\n");
    scanf("%d%*c", &m);
    printf("\nIntroduzca la longitud del vector 2:\n");
    scanf("%d%*c", &n);
    printf("\nIntroduzca los numeros del vector 1:\n");
    for(i=0;i<m;i++)
    {
        printf( "\nv1[%d]= ", i );
        scanf("%d%*c", &v1[i]);
    }
    printf("\nIntroduzca los numeros del vector 2:\n");
    for(i=0;i<n;i++)
    {
        printf( "\nv2[%d]= ", i );
        scanf("%d%*c", &v2[i]);
    }
    i=0;
    while((i<m)&&(j<n))
    {
        /*Si se hallan en ambos varias veces, se introducen varias veces*/
        if(v1[i]==v2[j])
        {
            v3[k]=v1[i];
            i++;
            j++;
            k++;
        }
        /*Se aumenta el menor*/
        else if(v1[i]>v2[j])
        {
            v3[k]=v2[j];
            k++;
            j++;
        }
        else
        {
            v3[k]=v1[i];
            k++;
            i++;
        }
    }
    /*Se finaliza en caso de no acabar juntos*/
    while(i<m)
    {
        v3[k]=v1[i];
        k++;
        i++;
    }
    while(j<n)
    {
        v3[k]=v2[j];
        k++;
        j++;
    }
    /*Se muestra el resultado*/
    printf("\nEl resultado de la mezcla es:\n");
    for(i=0;i<k;i++)
        printf("%d ", v3[i]);
}

  • Vector como parámetro

Realizar un programa que lea 5 números enteros en variables independientes (sin usar arreglos). Determine, luego, el mayor número par y el menor número impar de ellos e imprimirlos en la función main().La función debe tener dos parámetros. No usar variables globales.
#include <conio.h>
#include <stdio.h>
void parimpar(int n,int vec[ ]);
 
void main()
{
int pi[2]={0,1000},i,num;
for (i=0;i<5;i++){
    printf("ingrese un número");
    scanf("%d",&num);
    parimpar(num,pi);
    }
printf("el mayor par es:%d",pi[0]);
printf("el menor impar es:%d", pi[1]);
getch();
}
 
void parimpar(int n,int vec[ ])
{
 if (n%2==0){ if(n>vec[0]) vec[0]=n;}
 else if(n<vec[1]) vec[1]=n;
}
  • Operaciones con vectores

Programa que inicializa un vector y genera diversas operaciones sobre él.-
#include<stdio.h>
#define ELE 100
int fmenu(void);
int felementos(void);
int fvalor(void);
void finicializar(int elementos, int *pvector);
void fvisualizar(int elementos, int *pvector);
int fbusqueda_lineal(int elementos,int valor, int *pvector);
int fbusqueda_lineal_ordenada(int elementos, int valor, int *pvector);
int fbusqueda_binaria(int elementos,int valor, int *pvector);
void fordenar_baraja(int elementos, int *pvector);
void fordenar_burbuja(int elementos, int *pvector);
 
void main()
{
int elementos=0;
int pvector[ELE];
int valor;
int opcion;
do
{
opcion=fmenu();
switch (opcion)
{
case 1:
elementos=felementos();
finicializar(elementos,pvector);
break;
case 2: if(elementos==0)
puts("\nTienes que inicializar el vector");
else
fvisualizar(elementos,pvector);
break;
case 3: if(elementos==0)
puts("\nTienes que inicializar el vector");
else
{valor=fvalor();
fbusqueda_lineal(elementos,valor,pvector);}
break;
case 4:if(elementos==0)
puts("\nTienes que inicializar el vector");
else
fordenar_baraja(elementos,pvector);
break;
case 5:if(elementos==0)
puts("\nTienes que inicializar el vector");
else
fordenar_burbuja(elementos,pvector);
break;
case 6:if(elementos==0)
puts("\nTienes que inicializar el vector");
else
{valor=fvalor();
fbusqueda_lineal_ordenada(elementos,valor,pvector);}
break;
case 7: if(elementos==0)
puts("\nTienes que inicializar el vector");
else
{valor=fvalor();
fbusqueda_binaria(elementos,valor,pvector); }
break;
case 8:
break;
default:
break;
}
}
while (opcion!=8);
}
int fmenu(void)
{
int opcion;
do
{
puts(" ESTE PROGRAMA REALIZA LOS SIGUIENTES PROCESOS \n");
puts("-------------------------------------------------------------------------------------------\n");
puts("1.-INICIALIZA UN VECTOR, COMO MÁXIMO DE 100 NÚMEROS \n");
puts("2.-VISUALIZA EL CONTENIDO DE UN VECTOR \n");
puts("3.-BUSCA UN VALOR EN UN VECTOR NO ORDENADO\n");
puts("4.-ORDENA UN VECTOR POR EL MÉTODO DE LA BARAJA \n");
puts("5.-ORDENA UN VECTOR POR EL MÉTODO DE LA BURBUJA \n");
puts("6.-BUSCA UN VALOR EN UN VECTOR ORDENADO MEDIANTE BÚSQUEDA LINEAL\n");
puts("7.-BUSCA UN VALOR EN UN VECTOR ORDENADO MEDIANTE BÚSQUEDA BINARIA\n");
puts("8.-FINALIZA\n");
scanf("%d",&opcion);
}
while (opcion!=1 && opcion !=2 && opcion !=3 && opcion !=4 && opcion!=5 && opcion!=6
&& opcion!=7 && opcion!=8);
return(opcion);
}
int felementos()
{
int elementos;
 
do
{
puts("\n¿Cuantos numeros quieres guardar?");
scanf("%d",&elementos);
}while(elementos< 1 || elementos > 100);
 
return(elementos);
}
 
void finicializar(int elementos,int *pvector)
{
int indice;
for (indice=0;indice<elementos;indice++,pvector++)
{
puts("Teclea un numero\n");
scanf("%d",pvector);
}
}
 
void fvisualizar(int elementos, int *pvector)
{
int indice;
for (indice=0;indice<elementos;indice++,pvector++)
printf("En la posicion %d y en la direccion de memoria %u esta el numero %d\n",indice,
pvector,*pvector);
}
int fvalor()
{
int valor;
fflush(stdin);
puts("Teclea el valor a buscar\n");
fflush(stdin);
scanf("%d",&valor);
return(valor);
}
int fbusqueda_lineal(int elementos,int valor, int *pvector)
{
int indice;
indice=0;
while(pvector[indice]!=valor && indice<elementos)
indice++;
if (pvector[indice]==valor)
{
printf("El valor %d esta en la posicion %u\n",valor,indice);}
else
printf("El valor %d no esta en el vector\n",valor);
}
int fbusqueda_lineal_ordenada(int elementos,int valor, int *pvector)
{
int indice;
indice=0;
while (pvector[indice]<valor && indice<elementos)
indice++;
if (pvector[indice]==valor)
{printf("El valor %d esta en la posicion %d\n",valor,indice);}
else printf("El valor %d no esta en el vector\n",valor);
}
int fbusqueda_binaria(int elementos,int valor, int *pvector)
{
int indice_c, indice_i,indice_d;
indice_i=0;
indice_d=elementos;
indice_c=(indice_i+indice_d)/2;
while (pvector[indice_c]!=valor && indice_i<indice_d)
{
if (pvector[indice_c]>valor)
{indice_d=indice_c-1;}
else indice_i=indice_c+1;
indice_c=(indice_i+indice_d)/2;
}
if (pvector[indice_c]==valor)
printf("El valor %d esta en la posicion %d\n",valor,indice_c);
else printf("El valor %d no esta en el vector\n",valor);
return (valor);
}
void fordenar_baraja(int elementos, int *pvector)
{
int indice_i,aux,indice_j;
for (indice_i=1;indice_i<=elementos-1;indice_i++)
{
aux=pvector[indice_i];
indice_j=indice_i-1;
while (pvector[indice_j]>aux && indice_j>0)
{
pvector [indice_j+1]=pvector[indice_j];
indice_j--;
}
if (pvector[indice_j]>aux)
{
pvector[indice_j+1]=pvector[indice_j];
pvector[indice_j]=aux; }
else pvector[indice_j+1]=aux;
}
for (indice_i=0;indice_i<=elementos-1;indice_i++)
printf("El valor %d esta en la posicion %d\n",pvector[indice_i],indice_i);
}
void fordenar_burbuja(int elementos, int *pvector)
{
int indice_i,indice_j,aux;
for(indice_i=1;indice_i<=elementos-1;indice_i++)
for (indice_j=0;indice_j<=(elementos-indice_i);indice_j++)
if(pvector[indice_j]>pvector[indice_j+1])
{
aux=pvector[indice_j];
pvector[indice_j]=pvector[indice_j+1];
pvector[indice_j+1]=aux;
}
for (indice_i=0;indice_i<=elementos-1;indice_i++)
printf("El valor %d esta en la posicion %d\n",pvector[indice_i],indice_i);
}