Upload
gamada
View
39
Download
1
Embed Size (px)
DESCRIPTION
TABLAS. Sintaxis nombre_nuevo_tipo = tabla [rango, rango,...] de nombre_tipo donde rango se define como primer_rango .. ultimo_rango siendo primer_rango y ultimo_rango expresiones de constantes de tipo entero el número de elementos que se pueden guardar en la - PowerPoint PPT Presentation
Citation preview
TABLAS• Sintaxis
nombre_nuevo_tipo = tabla [rango, rango,...] de nombre_tipo
donde rango se define como primer_rango .. ultimo_rango siendo primer_rango y ultimo_rango expresiones de constantes de tipo entero el número de elementos que se pueden guardar en la tabla es igual a ultimo_rango–primer_rango+1•
Exemple de problema que utilitza cadenesAlgoritme comparar_2paraulesVar p1,p2:paraula ; j: enterfvar j := 1;p1[j] := LlegirCaràcter() mentre p1[j] != ‘ ‘ fer j := j+1 p1[j] := LlegirCaràcter() fmentre p1[j]:= NULmentre p2[j] != ‘ ‘ fer j := j+1 p2[j] := LlegirCaràcter() fmentre p2[j]:= NUL
Si p1>p2 llavors j := 1; mentre p1[j] != NUL fer EscriureCaràcter(p1[j]) j := j+1 fmentresino j := 1; mentre p2[j] != NUL fer EscriureCaràcter(p2[j]) j := j+1 fmentrefsifalgoritme
#include <string.h>typedef char paraula[20];void main(void){paraula p1,p2;cin>>p1;cin>>p2;If (strcmp(p1,p2) == 0){cout<<“ Son iguals”<<endl;}else if (strcmp(p1,p2) < 0){ cout<< p1<< “Es menor”;} else { cout<<p2<<“Es menor”;}}
Llegir dues matrius de N*N, i escriure el resultat de sumar-les
Definir tipus matriuDefinir variables tipus matriuLlegir les dues matriusEscriure el resultat de sumar-les
component a component
Llegir matriuper j en [1..N] fer ; accedir a cada fila per k en [1..N] fer ; accedir a cada columne m1[j,k] := LlegirEnter() fperfperEx: Si N és 2 I l’entrada 2 3 5 7 j = 1 k= 1 m1[1,1] --- 2 j = 1 k= 2 m1[1,2] --- 3 j = 2 k= 1 m1[2,1] --- 5 j = 2 k= 2 m1[2,2] --- 7
Algoritme sumar_2matrius const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m1, m2 :matriu; j,k: enter fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper per j en [1..N] fer per k en [1..N] fer m2[j,k] := LlegirEnter()
fper fper
Algoritme sumar_2matrius const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m1, m2 :matriu; j,k: enter fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper per j en [1..N] fer per k en [1..N] fer m2[j,k] := LlegirEnter()
fper fperper j en [1..N] fer per k en [1..N] fer EscriureEnter (m1[j,k] + m2[j,k])
fperfper
Llegir dues matrius de N*N, i escriure el resultat de multiplicar-les
Definir tipus matriuDefinir variables tipus matriuLlegir les dues matriusMultiplicar-lesEscriure el resultat
Multiplicar dues matrius
A cada component jk de la matriu resultant guardar el resultat de sumar el producte de cada element de la fila j de la primera matriu amb cada element de la columne k de la segona
M1 M2 1 2 3 5 6 7 2 1 3 9 11 13 3 2 1 15 14 5 M3 1*5+2*9+3*15 1*6+2*11+3*14 1*7+2*13+3*5 2*5+1*9+3*15 2*6+1*11+3*14 2*7+1*13+3*5 3*5+2*9+º*15 3*6+2*11+1*14 3*7+2*13+1*5 per j en [1..N] fer ; accedir a cada fila per k en [1..N] fer ; accedir a cada columne m3[j,k]=0 per l en [1..N] fer ; calcular el sumatori de producte de m3[j,k] = m3[j,k]+m1[j,l] * m2[l,k] fper fperfper
Algoritme producte_2matrius const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m1, m2 ,m3:matriu; j,k,l: enter fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper per j en [1..N] fer per k en [1..N] fer m2[j,k] := LlegirEnter()
fper fperper j en [1..N] fer ; accedir a cada fila per k en [1..N] fer ; accedir a cada columne m3[j,k] := 0 per l en [1..N] fer ; calcular el sumatori de producte de m3[j,k] = m3[j,k] +m1[j,l] * m2[l,k] fper fperfperper j en [1..N] fer per k en [1..N] fer EscriureEnter (m3[j,k])
fperfper
Determinar si tots els elements de la diagonal d’una matriu són 0
Plantejat com una cerca: Trobar el primer element de la diagonal que NO sigui 0
Algoritme Determinar si diagonal es 0 const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m:matriu; j,k: enter ; trobat : booleà fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper
trobat := fals ; j:= 1mentre j<= N i no trobat fer si m[j,j] != 0 llavors trobat := cert fsij := j +1FmentreSi trobat llavors EscriureCaràcter(‘N’) sino EscriureCaràcter(‘S’)fsi
Algoritme Determinar si diagonal es 0 const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m:matriu; j,k: enter ; trobat : booleà fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper trobat := fals ; j:= 1mentre j<= N i no trobat fer k:= 1 mentre k<= N i no trobat fer si j = k I m[j,k] != 0 llavors trobat := cert fsi k:= k +1 fmentre j := j +1fmentresi trobat llavors EscriureCaràcter(‘S’) sino EscriureCaràcter(‘S’)fsi
Algoritme Cercar número const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m:matriu; j,k,num: enter ; trobat : booleà fvar per j en [1..N] fer per k en [1..N] fer m[j,k] := LlegirEnter()
fper fper num := LlegirEnter()
trobat := fals ; j:= 1mentre j<= N i no trobat fer k:= 1 mentre k<= N i no trobat fer si m[j,k] = num llavors trobat := cert fsi k:= k +1 fmentre j := j +1fmentresi trobat llavors EscriureCaràcter(‘S’) sino EscriureCaràcter(‘N’)fsi
Algoritme Cercar número igual a suma de coordenades const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m:matriu; j,k: enter ; trobat : booleà fvar per j en [1..N] fer per k en [1..N] fer m[j,k] := LlegirEnter()
fper fper
trobat := fals ; j:= 1mentre j<= N i no trobat fer k:= 1 mentre k<= N i no trobat fer si m[j,k] = j+k llavors trobat := cert fsi k:= k +1 fmentre j := j +1fmentresi trobat llavors EscriureCaràcter(‘S’) sino EscriureCaràcter(‘N’)fsi
Determinar si una matriu és simètrica Plantejat com una cerca: Trobar el primer
element de la matriu que no sigui simètric
Algoritme Determinar si es simetrica const N: enter = 20 fconst tipus matriu = taula [1..N,1..N] de enter ftipus var m:matriu; j,k: enter ; trobat : booleà fvar per j en [1..N] fer per k en [1..N] fer m1[j,k] := LlegirEnter()
fper fper
trobat := fals ; j:= 1mentre j<= N i no trobat fer k:= 1 mentre k<= N i no trobat fer si m[j,k] != m[k,j] llavors ; condició de no simètric trobat := cert fsi k:= k +1 fmentre j := j +1FmentreSi trobat llavors EscriureCaràcter(‘n’) sino EscriureCaràcter(‘S’)fsi
trobat := fals ; j:= 1mentre j<= N i no trobat fer k:= 1 mentre k<j i no trobat fer ; millora: només accedir si m[j,k] != m[k,j] llavors ; a la matriu inferior trobat := cert fsi k:= k +1 fmentre j := j +1FmentreSi trobat llavors EscriureCaràcter(‘n’) sino EscriureCaràcter(‘S’)fsi
Taula de taules
tipus tparaules = taula[1..20] de paraula paraula = taula[1..25] de caràcterFtipusVar tp: tparaules; j,k:enter fvar
Legir seqüència de paraules acabada en “.” i una nova paraula i cercar aquesta paraula a la taula de paraules
Algoritme cercar Var tp: tparaula; j,k:enter; p:paraula fvar k:= 1; j := 1;tp[j][k] := LlegirCaràcter() mentre tp[j][k] != ‘ ‘ fer k := k+1 tp[j][k] := LlegirCaràcter() fmentre tp[j][k] := NULMentre tp[j] != “.” fer j:= j+1 ; k:= 1; tp[j][k] := LlegirCaràcter() mentre tp[j][k] != ‘ ‘ fer k := k+1 tp[j][k] := LlegirCaràcter() fmentre tp[j][k] := NULfmentre