Está en la página 1de 21

- J - --- .e - - - -- - - .

e - ---- - -

1
Diagramas de Flujo, codificacin en LS2 y lenguaje C

Curso 2006/2007

1 Programas simples
1.1 Media de dos valores
Problema: leer dos valores del teclado y escribir media aritmtica.

Diagrama de Flujo:

inicio clculo media

leer dato a a variable real, contiene el


primer dato
leer dato b b variable real, contiene el
segundo dato
media variable real, la media de los
media-e+ (a+b)/2 dos datos ledos

escribir media

fin clculo media

Codificacin en C:

#include <stdio.h>
void main (void)
{
int a; I* primer dato*/
int b; I* segundo dato*/
int m; I* media*/
scanf("%d", &a); I* lectuas *I
scanf("%d", &b);
m=(a+b)/2; I* clculo de la media entera *I
printf("%d",m); I* ecritura *I

1
Problerna:leer un nmero del teclado y escribir su valor absoluto

Diagrama de Flujo:

inicio programa

X variable real, contiene el dato ledo


R variable real, contiene el resultado
S NO que es el valor absoluto de x

escribir R

fin pro grama

Codificacin en C:

#include <stdio.h>
void main (void)
{ int x; int r;
scanf("%d", &x);
if (x>O)
r=x;
else
r=-x;
I* Otro modo: *I
I* r=(x>O)?x:-x; *I
printf("%d",r);
}
Problerna:Leer las componentes de un vector de ]R,2 escribir el nmero del cuadrante en que se halla. Suponiendo
que ninguna componente es nula.

Diagrama de Flujo:

inicio programa

leer x e y
x variable real, contiene la primera
coordenada del punto cuyo cuadrante
se quiere determinar. Es el primer
S NO dato ledo
es x >O
y variable real, contiene la segunda
coordenada del punto cuyo cuadrante
S NO S NO se quiere determinar. Es el segundo
es y> O es y> O
dato ledo

Escribir 1 Escribir 4 Escribir 2 Escribir 3

fin programa

Codificacin en C:

#include <stdio.h>
void main (void)
{
int x;
int y;
scanf("%d", &x);
scanf("%d", &y);
if (x>O)
{
if (y>O) printf("4");
else printf("1");
}
else
{
if (y>O) printf("2");
else printf("3");
}
}
Problerna:Leer un nmero N de teclado. Escribir los nmeros impares menores que N . Suponer que N > l.

Diagrama de Flujo:

inicio programa

leer N
N variable entera. Dato ledo, es la cota superior
k~
del contador de bucle
k variable entera. Contador para bucle.
escribir k Comienza en 1 y se incrementa de dos en dos,
por lo que siempre es impar.

k ~ k+2

fin programa

Codificacin en C:

#include <stdio.h>
void main (void)
{
int N;
int k;
scanf("%d", &N);
k=1;
do
{
printf("%d ",k);
k=k+2;
}
while(k<N) ;
I* Otro modo *I
I* for(k=1;k<N;k=k+2) printf("%d ",k); *I
}
Problerna:leer un nmero N del teclado. Escribir los cuadrados de los naturales entre N y 1 en orden decreciente.

Diagrama de Flujo:

inicio programa

leer N

CONT --- N
N variable entera. Dato ledo, es la cota
supenor
CONT variable entera. Contador para bucle.
2
escribir CONT Inicialmente vale N y se decrementa
hasta l.

Decrementa CONT

fin programa

Codificacin en C:

#include <stdio.h>
void main (void)
{
int N
'
int cont;
int cuad;
scanf("%d", & N);
cont=N;
do
{
cuad=cont*cont;
printf(" % d ",cuad);
cont=cont-1;

} while(cont<N);
/*Otro modo *I
I* for(cont=N;cont>O;cont--)
{
cuad=cont*cont;
printf("%d ",cuad);

}
2.1 Vector de 10 componentes
Problerna:Leer las 1 O componentes de un vector de dimensin 1 O.

Diagrama de Flujo:

inicio lectura

iniciar ndice k a 1

V variable entera. Vector que se va a leer


leer elemento v k
k variable entera. Indice del vector y con-
tador.
incrementar k

NO

fin lectura

Codificacin en C:

#include <stdio.h>
#define N 10
void main (void)
{
int v[N];
int k;
for(k=O;k<N;k=k+1)
{
scanf ( "%d ", &v [k]);

}
}
Problema: Leer las N componentes de un vector de dimensin N. No olvidar tabla de variables.
Modificar ligeramente el anterior. Usar siempre subndices excepto cuando se indique lo contrario.

2.3 Escritura inversa


Problema: Leer las 5 componentes de un vector y escribirlo luego al revs. No olvidar tabla de variables.
Problerna:Leer un vector de dimensin N calcular la componente de mayor valor y su ndice dentro del vector.

Diagrama de Flujo:

inicio programa inicio clculo

iniciar ndice indmax a 1


lectura vector
iniciar valmax a v 1
iniciar ndice k a 2

clculo de indmax
y valmax

escribir indmax
valmax-e- v k
y valmax indmax-e- k

fin programa
incrementar k

NO

fin clculo

V vector de nmeros reales, dato al que hay que


hallar mximo
N variable entera. Dimensin del vector v.
valmax variable real. Elemento mayor del vector v.
indmax variable entera. ndice correspondiente al ele-
mento mayor de v.
k variable entera. Indice del vector y contador.
Problema Dado v E IRnxl, hallar m = vtv, m E IR.

10
Modificar anteriores. Usar siempre subndices excepto cuando se indique lo contrario.

2.6 Vector con trmino general dado


Problema Leer n entero y mayor que uno. Construir un vector v E IRnxl, tal que el elemento k simo sea vk = k2 3
para k = 1, ... ,n.
Modificar anteriores. Usar siempre subndices excepto cuando se indique lo contrario.

2.7 Suma de dos vectores


Problema Leer dos vectores p y q de dimensin 1 O, hallar el vector sumas = p+q. Escribir en pantalla las componentes
de s.
Usar mdulo de lectura, mdulo de suma y mdulo de escritura. Modificar anteriores. Usar siempre subndices
excepto cuando se indique lo contrario.

11
3.1 Media de alturas
Problerna:Leer del teclado un nmero indeterminado de alturas. Dejar de leer cuando se haya introducido una altura
negativa. Escribir la media de las alturas vlidas.

Diagrama de
Flujo:

inicio

iniciar a cero sumaparcial,


contador y altura

sumar altura a sumaparcial


incrementar contador
altura variable real, contiene los datos a me-
dida q van siendo introducidos
sumaparcial variable real, contiene la suma de las
leer altura alturas dadas hasta el momento
contador variable entera, contador de datos
tomados
NO media variable real, resultado obtenido de la
suma parcial y el contador

decrementar contador
media -- sumaparcial/contador

escribir media

fin
Problema: Igual que el anterior pero calculando la

13
altura mayor y la menor a medida q se leen.

Diagrama de Flujo:

inicio

leer altura

al t_rnax ....._ al tura


al t_rnin ..._ al tura

altura> alt_rnax?
s altura variable real, contiene los datos a me-
dida q van siendo introducidos. Se
supone que la primera altura no ser
alt_rnax.- altura
negativa. Los valores negativos de al-
tura sirven para indicar el fin de la
recogida de datos
s alt.rnax variable real, es la mxima altura leda
altura< alt_rnin?
alt.rnin variable real, es la mnima altura leda

alt_rnax.._ altura
no

leer altura

no
altura< 0?

escribir alt_rnax
escribir alt_rnin

fin

14
Problerna:Leer un nmero mayor que uno y determinar si es primo (escribiendo 1 si lo es y O si no lo es).

Diagrama de Flujo:

inicio programa

leer x

resultado -
divisor - 2

hallar resto de X variable entera, nmero dado


dividir x por divisor resultado variable entera, contendr un uno si el
nmero dado es primo y un cero en caso
S contrario
es resto= O ?
divisor variable entera, nmero usado para pro-
bar la divisibilidad de x. Se va mere-
NO resultado - O mentando de 2 a x

Incrementar divisor

NO

es divisor= x ?

S
escribir resultado

fin programa J

Codificacin en C:

#include <stdio.h>
void main (void)
{
int x;
int divisor;
int resultado;
I* Lectura del dato *I
scanf("%d", & x);
I* Iniciacin *I
resultado=1;
divisor=2;
I* Bucle *I
do
{
if(x%divisor==O)
{
resultado=O;
}
divisor=divisor+1;
}
while(! (divisor=x));
I* Escritura de resultado *I
printf("% d",resultado);
}
4.1 Crear matriz
Problema: Crear matriz de elemento genrico kJ = (k + j)2 5 con dimensiones fijas 3 x 2.

Diagrama de Flujo:

inicio crear matriz

iniciar ndice k a 1

iniciar ndice j a 1 M Constante entera. Es el nmero de filas


de la matriz.
N Constante entera. Es el nmero de
columnas de la matriz.
kj --- (k+j)2-5 k Variable entera. Indice de filas de la
matriz. Vara entre 1 y M
J Variable entera. ndice de columnas de
la matriz. Vara entre 1 y N
incrementar j
kj Variable real. Elemento de la fila k y la
columna j de la matriz A.
NO

incrementar k

NO

fin crear matriz


Problema: Dada una matriz m x n en memoria

17
anular (poner a cero) los elementos de su diagonal principal. Hecho en libro.

4.3 Suma de matrices


Problema: Dadas dos matrices A y B m x n calcular la matriz suma C=A +B.

4.4 Matriz traspuesta


Problema Dada una matriz A E ]Rmxn calcular su traspuesta B = At.

4.5 Multiplicacin de matrices


Problema Dadas A E 1Rmxn y BE 1Rnxp calcular C = AB. Hecho en libro.

18
Problema: Leer una matriz A E JRmxn y escribir luego los elementos de su submairiz triangular inferior en el orden
indicado en la figura. La submairiz triangular inferior est formada por los elementos en la diagonal y debajo de sta.

Diagrama de Flujo:

inicio submatriz T.I.

Iniciar ka 1

Iniciar ja 1

M Variable entera. Es el nmero de filas


de la matriz.
escribir akj N Variable entera. Es el nmero de
columnas de la matriz.
k Variable entera. Indice de filas de la
matriz. Vara entre 1 y M
Incrementar j
J Variable entera. Indice de columnas de
la matriz. Vara entre 1 y N
kj Variable real. Elemento de la fila k y la
no columna j de la matriz A.
j > k?

Incrementar k

no
k > m?

fin submatriz T.I.


Problema: Leer una matriz A E IRmxn y

20
escribir luego los elementos tomados al iresbolillo, que son los que ocupan las posiciones oscuras en el esquema

Diagrama de Flujo:

inicio tresbolillo

Iniciar k a 1 y
j inicial a 1

Iniciar j a
j inicial

escribir akj

Incrementar j en 2
M Variable entera. Es el nmero de filas
de la matriz.
N Variable entera. Es el nmero de
columnas de la matriz.
k Variable entera. ndice de filas de la
Incrementar k matriz. Vara entre 1 y M
J Variable entera. Indice de columnas de
la matriz. Vara entre 1 y N
jinicial vale 1 ? ~~~~

kj Variable real. Elemento de la fila k y la


s columna j de la matriz A.
Asignar a jinicial
Asignar a jinicial el valor 1 jinicial Variable entera. Indice auxiliar de filas
el valor 2

fin tresbolillo

El d.f est mal. El bucle de j debe ir hasta j =N

Codificacin en C:

#include <stdio.h>
#define M 10
#define N 5
void main (void)
{
float a [M] [N] ;
int k;
int j;
int jinicial;
I* Iniciacin *I
jinicial=O;
I* Bucles *I
for(k=O;k<M;k++)
{
for(j=jinicial;j<N;j=j+2)
{
printf ( "%f ", a [k] [j]);
}
jinicial=(jinicial==0)?1:0;
}
}

21
Problema: Leer una matriz A E JRmxn y escribir luego los elementos de su submairiz triangular inferior en el orden
indicado en la figura. La submairiz triangular inferior est formada por los elementos en la diagonal y debajo de sta.

Diagrama de Flujo:

M Variable entera. Es el nmero de filas


de la matriz.
N Variable entera. Es el nmero de
columnas de la matriz.
k Variable entera. Indice de filas de la
matriz. Vara entre 1 y M
J Variable entera. Indice de columnas de
la matriz. Vara entre 1 y N
kj Variable real. Elemento de la fila k y la
columna j de la matriz A.

También podría gustarte