DATA MODELLING : 19-03-2015 (1H 45) Faça cada grupo numa folha separada I (6 Valores) Construa um quadro com a evolução das variáveis e assinale os outputs dos seguintes programas: Considere que é inicialmente chamado o procedimento P 1) a) [1,5] Function xpto(ByVal S As String, ByVal P As Integer) As Integer Do While InStr("0123456789", Mid(S, P, 1)) = 0 P=P+1 Loop If Mid(S, P, 1) = Mid(S, Len(S) - P + 1, 1) Then xpto = P Else xpto = 0 End If End Function Sub P() Dim T As String, X As Integer T = "AB2Y4C5X2BC" X=1 Do Call MsgBox(X) X = 1 + xpto(T, X) Loop Until X = 1 End Sub b) [1,5] Sub P() Dim X As Integer, Y As Integer Dim P As Integer, Z As Integer X = 23 Y=1+X\3 For P = Y To X Step 3 Z = P Mod Y Call MsgBox(Z) Next End Sub c) [1] Reconstrua o procedimento P () da alinea b), substituindo o ciclo FOR por um DO … LOOP UNTIL equivalente. 2) [2] Verifique, justificando, se as seguintes expressões estão correctas, assinalando, se possível, o seu tipo e valor a) Chr(Asc("DUMMY") + 3) b) Left("ANA", 2) & Mid("CANTIGAS", 4, 4) & Right("SEMENTE", 5) c) 7 \ -2 Mod 2 d) Sqr(49) * Int(10 / 3) II (4 Valores) 1) Construa um procedimento para copiar todos os nomes começados por “A” e que terminam em “R”, da coluna A do Sheet1, para a coluna B do mesmo WorkSheet. Deve começar na linha 1 e parar quando for encontrada uma célula vazia na coluna A. Não devem ficar células vazias entre os valores da coluna B. Considere que a coluna A só contem texto. 2) Construa um procedimento que coloque na coluna “A”, de um WorkSheet , as letras maiusculas de “A” a “Z” (uma letra em cada célula) III (5 Valores) 1)Construe uma função que receba uma string e devolva o valor da string. Assuma queas letras valem (minusculas ou maiusculas) A - 1, B – 2, C – 3... Z – 26, qualquer outro caracter tem o valor 0. “Ac5C4b” -» 1+3+0+3+0+2 2) Construa um procedimento que peça ao utilizador para introduzir uma string e, utilizando a função da alínea anterior, mostre no ecrã o valor da string. IV (5 Valores) 1)Construa uma função chamada “FindStr”que replique o funcionamento da função VBA InStr. (Não pode, obviamente, usar as funções VBA InStr ou EXCEL Find, Search) 2) Construa uma função que receba uma range (contendo valores numéricos) e devolva a soma dos produtos de cada linha. 3 5 7 2 13 6 8 4 10 12 9 1 = (3x5x7) +(2*13*6)+(8*4*10)+(12*9*1) 19-03-2015 (1H45) English Version I (6 points) Build a table with the value for all the variables (during the execution of the following code) and mark all outputs. Sub P will be called first. 1) a) [1,5] Function xpto(ByVal S As String, ByVal P As Integer) As Integer Do While InStr("0123456789", Mid(S, P, 1)) = 0 P=P+1 Loop If Mid(S, P, 1) = Mid(S, Len(S) - P + 1, 1) Then xpto = P Else xpto = 0 End If End Function Sub P() Dim T As String, X As Integer T = "AB2Y4C5X2BC" X=1 Do Call MsgBox(X) X = 1 + xpto(T, X) Loop Until X = 1 End Sub b) [1,5] Sub P() Dim X As Integer, Y As Integer Dim P As Integer, Z As Integer X = 23 Y=1+X\3 For P = Y To X Step 3 Z = P Mod Y Call MsgBox(Z) Next End Sub c) [1] Replace the FOR loop in b) by an equivalent DO … LOOP UNTIL. 2) [2] Justify if the following expressions are correct in VBA. For correct ones show their type and value a) Chr(Asc("DUMMY") + 3) b) Left("ANA", 2) & Mid("CANTIGAS", 4, 4) & Right("SEMENTE", 5) c) 7 \ -2 Mod 2 d) Sqr(49) * Int(10 / 3) II (4 Points) 1) Create a SUB to copy all names, starting with “A” and ending with “R”, from Sheet1 column A to Sheet1 column B. Program should stop in the first empty cell in column A. There should be no empty cells between values in column B. 2) Create a SUB to write, in the first column of a worksheet, the uppercase letters “A” to “Z” (one in each cell) III (5 Points) 1) Create a function that, given a string, returns the string value. Assume the value for all letters (upper or lowercase) is: A - 1, B – 2, C – 3 ... Z – 26, the value for any other character is 0. “Ac5C4b” -» 1+3+0+3+0+2 2) Create a SUB to ask the user to enter a string and, using the previous function, shows a message with the string value. IV (5 Points) 1) Create a function named “FindStr” to replicate (do the same as) the VBA InStr function. (You cannot use VBA InStr or EXCEL Find/Search) 2) Create a function that, given a range, returns the sum of the multiplication of values in each row. 3 5 7 2 13 6 8 4 10 12 9 1 = (3x5x7) +(2*13*6)+(8*4*10)+(12*9*1)