Vectores, operaciones y ficheros

Carlos Ibáñez Freire.
/* 1:
SOLICITAR UN ENTERO N AL USUARIO (DIMENSIÓN  DE LOS VECTORES).
LEER POR TECLADO DOS VECTORES ENTEROS DE N COMPONENTES.
CALCULAR EL PRODUCTO ESCALAR DE ESTOS DOS VECTORES.
ESCRIBIR POR PANTALLA :
-LOS DOS VECTORES Y SU PRODUCTO ESCALAR.

2-3:
CONSTRUIR UN VECTOR W DE 2N FORMADO POR LOS ANTERIORES VECTORES.
LO ESCRIBIMOS.
ESCRIBIR EN UN FICHERO U,V,W.

ORDENAR EL VECTOR W Y ESCRIBIRLO.
ESCRIBIR TODO EN UN FICHERO.
Y POR ULTIMO, LEER EL FICHERO CREADO.*/

# include <stdio.h>
# include <stdlib.h>
# define DIM 100//definimos una dimension maxima grande para trabajar.

void leer_vector(int,float[]);
void escribir_vector(int,float[]);
float prod_escalar(int, float[],float[]);
void dos_en_uno(int,float[],float[],float[]);
//crea un vector w a partir de los dos vectores anteriores
void burbuja(float[], int);
//para ordenar los componentes de w
void poner_vector_fichero(int,float[],FILE*,char);
//introduce un vector en un fichero dado.

int main ()
{
    int n;char aux,c;
    float u[DIM],v[DIM],w[DIM],b[DIM];
    int i;
    FILE *pf;

do {printf("Dame la dimension de los vectores: ");
scanf("%d",&n);}while(n<0 || n >100);//la dimension tiene que estar entre 0-100.

 //escribimos los dos vectores Y hacemos su prod.escalar.
printf("\nIntroduce el primer vector\n");
leer_vector(n,u);
printf("\nIntroduce el segundo vector\n");
leer_vector(n,v);
printf("\nEl producto escalar es: %.2f\n",prod_escalar(n,u,v));
printf("\nEl primer vector es: %.\n");
escribir_vector(n,u);
printf("\nEl segundo vector es: %.\n");
escribir_vector(n,v);

//hallamos w y lo ordenamos, y escribimos los resultados por pantalla.
dos_en_uno(n,u,v,w);
printf("\nEl vector formado por ambos es: %.\n");
escribir_vector(2*n,w);
burbuja(w,2*n);//ordenamos w.(darse cuenta que tiene el doble de dimensión).
printf("\nEl vector formado por ambos ordenado es: %.\n");
escribir_vector(2*n,w);

    system("pause");
    system("cls");

pf=fopen("fiche.txt","w");//creamos un fichero para escribir.

aux='u';
//nos servimos de una variable auxiliar para nombrar a los vectores en el fichero.
poner_vector_fichero(n,u,pf,aux);
aux='v';
poner_vector_fichero(n,v,pf,aux);
aux='w';
poner_vector_fichero(2*n,w,pf,aux);

     fclose(pf);
    pf=fopen("fiche.txt","r");//volvemos a abrir el fichero para leerlo
//también podriamos haber haber abierto el fichero incicial del modo w+.
while(feof(pf)==false)//lee caracter a caracter, mientras sea falso
        {//que se halla llegado a final del fichero, mientras sea igual a 0 feof.
         c=getc(pf);
         putchar(c);
        }

     fclose(pf);
    system("pause");

    return 0;
}

void leer_vector(int n, float v[])
{
    int i;

    for(i=0;i<n;i++)
    {
        printf("Introduce la componente %d: ",i+1);
        scanf("%f",&v[i]);
    }
}

float prod_escalar(int n, float v1[], float v2[])
{
float suma; int i;
suma=0;
for (i=0;i<n;i++)
suma=suma+v1[i]*v2[i];
return suma;
}

void escribir_vector(int n, float v[])
{
int i,j;
for(i=0;i<n;i++)
{
printf("%12.2f",v[i]);
//dejamos 12 espacios entre numeros y redondeamos el numero a 2 decimales.
}
printf("\n");
}

void dos_en_uno(int n,float u1[],float u2[],float u3[]){
    int i;
    for(i=0;i<n;i++){
        u3[i]=u1[i];
        u3[n+i]=u2[i];

    }
}

void burbuja(float s[], int n)
{
    int i,j;
    float t;
    for(i=1;i<n;i++)
    for(j=n-1;j>=i;j--)
    {
        if(s[j-1]>s[j])
        {
            t=s[j-1];
            s[j-1]=s[j];
            s[j]=t;
        }
    }
}

void poner_vector_fichero(int n,float v[],FILE*cif,char c)
{
    int i;

    fprintf(cif,"El vertor %c es: ",c);
    for(i=0;i<n;i++){
    fprintf(cif,"%.2f  ",v[i]);}
    fprintf(cif,"\n");
}
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s