23
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

TABLAS

  • 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

Escriure la suma

per j en [1..N] fer per k en [1..N] fer EscriureEnter (m1[j,k] + m2[j,k])

fperfper

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

j := 1;p[j] := LlegirCaràcter() mentre p[j] != ‘ ‘ fer j := j+1 p[j] := LlegirCaràcter() fmentre p[j] := NUL; trobat := fals; j:= 1Mentre tp[j]!= “.” i no trobat fer si tp[j] = p llavors trobat := cert fsi j:= j+1FmentreSi trobat llavors EscriureCaràcter(‘S’) sino EscriureCaràcter(‘N’)fsi