Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estudo Comparativo de Linguagens de Programação (2013) Lista 1 Professora: Ana Monteiro (anammont.alu@gmail.com) Bibliografia Básica SEBESTA, R. Conceitos de Linguagens de Programação. Porto Alegre: Bookman, 1999. NOONAN, R. , TUCKER, A. Linguagens De Programação, Porto Alegre:McGraw Hill – ARTMED, 2009. Considere uma ou duas linguagens de programação que você conhece e discuta: Quais são as características que facilitam e as que dificultam a manutenção do software desenvolvido nessa linguagem. As facilidades oferecidas para a organização de programas. As facilidades para interagir com o ambiente externo. Dados os trechos de código a seguir, determinar, segundo o mapa de memória visto nas aulas, onde são armazenadas cada uma das variáveis. a) #include <stdio.h> int main(void) { int n[] = {1, 2, 6}; int *p; p = &n[0]; p++; printf("Valor: %d ", *p); (*p)++; printf("Valor: %d\n", *p); } b) program main; var N, C, I: integer; Begin Readln(N); C := 0; I := 1; While ( I <= N ) do Begin Readln(A); If (A mod 3=2) then C:= C + 1; Inc(I); End; End; c) public class RegAcademicoGrad { private String nomeA; private Data dataN; private int ra; private byte curso; private double perc; // desconto matrícula public static final byte CC =1; public static final byte SI =2; public static final byte WEB =3; // métodos de RegAcademicoGrad RegAcademicoGrad(String n, Data d, int m, byte c, double p) { nomeA = n; dataN = d; ra = m; curso= c; perc= p; } RegAcademicoGrad(String n, Data d, int m, byte c) { this(n,d,m,c,100) //100% desconto } public double calcMensa() { double mensa = 0; if ( curso == WEB) mensa = 550; else mensa = 650; mensa = (mensa * perc )/100; return mensa; } public String toString() { String result =“”; result += “Matrcula: “+ra+”Nome: “+nomeA+”\n”; result += “Data de Nascimento:”+ dataN+ +”\n”; ... return result; } public class TesteRegAcademicoGrad { public static void main(String args[]) { Data dataNJose=new Data((byte)12,(byte)5,(short)1992); RegAcademicoGrad jose = new RegAcademicoGrad(“Jose Silva”, dataNJose, 17345, RegAcademicoGrad.CC, 45); RegAcademicoGrad luis = new RegAcademicoGrad(“Luis Dias”, new Data ((byte)25,(byte)8,(short) 1990); 18005, RegAcademicoGrad.CC); System.out.println(jose); System.out.println(luis); } Supondo que tenha compilado e executado usando as regras de escopo do Pascal, simular a execução de cada um dos programas. Quais os valores impressos pelos programas? Program teste_1; Var a, b, c: integer; d, e: real; Procedure um (var x: integer; y: real); Var a: real; z, d, c: integer; Begin z:= x + 2; d:= 3; x:= z mod 3; c:= z + d; writeln(a, b, c, d, e, x, z); y := 3.5; End; Begin a:= 1; b := 2; c:= -2; d:= 0; e:= - 5.3; writeln(a, b, c, d, e); um (b, e); writeln(a, b, c, d, e); End; Program teste_2; Var x, y: integer; z: real; Procedure A ( var w: integer; t: real); Var x: integer; y:= real; Procedure B (var xxz: integer); Var y: integer; Begin y:= 2; writeln(xxz, x , y, z); z:= 2.3; End; Begin // começo instruções procedimento A x:= 3; y:= 2.5; writeln(x, y, z); B(x); End; // fim instruções procedimento A Begin // começo instruções teste_2 x:= 28; y:= -4; z:= 39.48; writeln( x, y, z); A(x, z); Writeln( x, y, z); End // fim instruções teste_2 Supondo que o seguinte programa tenha compilado e executado usando regras de escopo estático. Que valor de x é impresso no procedimento sub1? De acordo com as regras de escopo dinâmico, que valor de x é impresso no procedimento sub1? program main; var x : integer; procedure sub1; begin {sub1} writeln (‘x=’ , x); end {sub1} procedure sub2; var x : integer; begin {sub2} x := 10; sub1; end; {sub2} begin {main} x:= 5; sub2; end. {main} Considere o seguinte programa Pascal esquemático: program main; var x : integer; procedure sub3; forward; procedure sub1; var x: integer; procedure sub2; begin {sub2} ... end; {sub2} begin {sub1} ... end {sub1} procedure sub3; begin {sub3} ... end; {sub3} begin {main} ... end. {main} Suponha que a execução desse programa seja na seguinte ordem das unidades: main chama sub1 sub1 chama sub2 sub2 chama sub3 Supondo que esteja presente o escopo estático, qual declaração de x é a correta para a referência a x em: sub1 sub2 sub3 Repita a parte a), mas suponha a presença do escopo dinâmico. Considere o seguinte programa em C: void fun(void) { int a, b, c; /* definição 1 */ ... while ( ... ) { int b, c, d; /* definição 2 */ ... ( 1 while ( ... ) { int c, d, e; ; /* definição 3 */ ... ( 2 } ... ( 3 } ... ( 4 } Para cada um dos quatro pontos marcados nessa função, liste cada variável visível, juntamente com o número da instrução de definição que a define. Considere o seguinte programa C esquemático: void fun1(void); /* protótipo */ void fun2(void); /* protótipo */ void fun3(void); /* protótipo */ void main( ) { int a, b, c; ... } void fun1(void) { int b, c, d; ... } void fun2(void) { int c, d, e; ... } void fun3(void) { int d, e, f; ... } Dadas as seguintes seqüências de chamadas e supondo-se que seja usado o escopo dinâmico, quais variáveis são visíveis durante a execução da última função chamada? Inclua, em cada variável visível, o nome da função em que ela foi definida. main chama fun1,fun1 chama fun2, fun2 chama fun3. main chama fun2, fun2 chama fun3, fun3 chama fun1. main chama fun3, fun3 chama fun2, fun2 chama fun1. main chama fun3, fun3 chama fun1.
Compartilhar