Todos os post de Rafael

Me chamo Rafael, sou de Curitiba e tenho 30 anos. Faz dois anos que tento o QCO informática. Sou casado e tenho um filho de 6 anos. Desejo a todos muita força de vontade para perseverar dia após dia e não se deixar vencer pelo cansaço e pela ansiedade !

Resolução Questão 16 – 2007

Prova 2007

Questão 16

Uma CPU tem uma unidade aritmética que adiciona bytes e então ajusta os bits
de flag V, C e Z como segue. O bit V é definido como 1 (ligado) se ocorrer
overflow aritmético (em aritmética de complemento de 2). O bit C é ligado se é
gerado um carry-out (vai um) do bit mais significativo durante a operação. O bit
Z é ligado se o resultado for zero. Quais são os valores dos flags V, C e Z após a
adição dos bytes de 8 bits 11001100 e 10001111?

(A) V= 0 ; C= 0 ; Z= 0
(B) V= 1 ; C= 1; Z= 0
(C) V= 1 ; C= 1; Z= 1
(D) V= 0 ; C= 0; Z= 1
(E) V= 0 ; C= 1; Z= 0

Primeiramente, achei o enunciado da questão bastante pobre. Por isso, vou explicar da maneira que

posso, rs.

Esta sendo pedido para verificar várias o que acontece quando são somados os dois números binários.

Até aí tudo bem. O problema é que o enunciado não deixa claro se os números apresentados estão em

complemento de 2 já. Podem já estar e serem negativos e podem não estar e serem positivos.

Estou assumindo que são números positivos.

Então temos,

011001100 e 010001111, os zeros na frente do número foram colocados pois números positivos recebem

sinais positivos, e o sinal positivo na notação de complemento é dado adicionando um 0 na frente do

número, e um sinal negativo é dado adicionando um 1 na frente do número.

Somando 011001100 e 010001111 temos:

O que podemos analisar dessa soma?

Houve overflow? R: Sim, o bit de sinal ficou negativo. O soma de positivos não pode dar negativo.

Se houvesse “ido” 1 para o sinal e para fora do número também, não teria havido overflow, mas como

foi apenas para o sinal, houve.

Houve carry-out do MSB (Bit mais significante)? R: Sim. Quando foi somando 1 + 1 no bit mais

significante, consequentemente “foi” um (inclusive para o bit de sinal).

O Resultado foi zero? R: Não.

Logo, a resposta da questão é :

(B) V= 1 ; C= 1; Z= 0

Por favor, resolvi essa questão meio na incerteza. Se alguém achar algum erro, por favor, me avise

pelo email rafasgomes@gmail.com.

Abraços.

Resolução da questão 11 de 2008

Obs: O espaço que dei entre os grupos de colchetes (“[ ] [ ]”) não deve existir. Fi-lo apenas porque o segundo grupo de colchetes sempre estava sendo exibido na linha de baixo aqui no post quando eu nao dava o espaço entre eles. Portanto, fiquem atentos a isso.

Eis a questão:

11. Considere a seguinte declaração em linguagem C:

 

int a[ ] [3] = {1,2,3,4,5,6,7,8,9,10,11,12};

 

A instrução printf ( “%d”, *(a[1]+2)) irá retornar o valor:

(A) 2

(B) 3

(C) 5

(D) 6

(E) 10

 

Esse é o tipo de questão que refina nossos conhecimentos ao extremo e é por isso que as provas antigas da EsFCEx, em minha humilde opinião, eram extremamente difíceis. Essa questão exige muito conhecimento sobre vetores e ponteiros em C. Se você não domina esses assuntos, de uma olhadinha no livro “Estrutura de Dados usando C”. Ele pode auxiliar muito.

Vou tentar explicar como resolvê-la.

Quando declaramos o vetor int a[ ] [3] = {1,2,3,4,5,6,7,8,9,10,11,12};

estamos dizendo que teremos um vetor bidimensional (linhas x colunas) de 3 colunas. Só temos definida a quantidade de colunas, pois a mesma é representada pelo segundo grupo de colchetes “[3]”.

Não sabemos quantas linhas esse vetor tem, pois os colchetes que representam as linhas está em branco “[ ]”. O compilador então vai determinar isso na inicialização do vetor.

Então entendo que ele vai dividir tudo isso entre as chaves “{1,2,3,4,5,6,7,8,9,10,11,12}” em grupos de 3 colunas, para determinar as linhas, assim teremos 4 linhas.

Em tese, essa inicialização seria a mesma coisa que declarar:

int a[4] [3] = {1,2,3,4,5,6,7,8,9,10,11,12};

ou

int a[4] [3] = {(1,2,3),(4,5,6),(7,8,9),(10,11,12)};

Beleza até aqui… bom, vamos ao comando print da questão:

printf (“%d”, *(a[1] + 2));

 

Esse “*” serve pra identificar o valor que há dentro de um campo sendo apontado.

Segundo os materiais que consultei, temos as seguintes deduções:

*(a) = a[ ] = a[0]

*(a + 1) = a[1]

*(a + 2) = a[2]

*(a + 3) = a[3]

darei um exemplo:

considere o vetor vet[4] = {200, 10, 5, 1500};

Assim:

vet[0] = 200

vet[1] = 10

vet[2] = 5

vet[3] = 1500

Até ai é beleza, o problema vem na interpretação abaixo.

De acordo com a notação de ponteiros temos que:

 

vet[0]  = *(vet) = *(vet + 0) = 200

vet[1]  = *(vet + 1) = 10

vet[2]  = *(vet + 2) = 5

vet[3]  = *(vet + 3) = 1500

 

Esse raciocínio é para um vetor unidimensional. Porém temos nessa questão um vetor bidimensional.

No caso do exercício da prova, cada linha tem 3 colunas certo?

Independente de o vetor ser uni, bi, tri ou multidimensional, ele sempre vai ser organizado sequencialmente na memória.

Se considerarmos uma organização sequencial desses números teríamos que na posição:

Explicação

0 temos o número 1, na 1 temos o número 2, na 2 temos o número 3 <fim da primeira linha>

3 temos o número 4, na 4 temos o número 5, na 5 temos o número 6 <fim da segunda linha>

e o raciocínio continua até o fim de quarta linha.

Então, se estamos tratando de um vetor bidimensional, quando dizemos a[1] estamos dizendo que na notação de ponteiros temos:

* (  * (a + 1) + 0 ) que quer dizer * (  * (a + <numero da linha>) + <numero da coluna> ) isso porque agora estamos lidando com 2 dimensões no vetor.

Se fossemos traduzir de um modo grosseiro isso tudo, já que todo o vetor, independente de uni ou multidimensional é organizado sequencialmente, poderíamos dizer que:

a[1] ou *(a + 1) é a posição 3 do vetor (ver explicação). Mas ainda não estamos considerando o número das colunas. Se quiséssemos acessar o segundo elemento da segunda linha teríamos que somar mais duas posições à posição 3. Assim teríamos a posição 5, que é igual a 6

Quando você diz para o compilador, num vetor bidimensional, vá para a[0], ele irá para a posição 0… vá para a[1], ele irá para a posição 3… quando disser vá para a[2], ele irá para a posição 6, vá para a[3], ele irá para a posição 9…  colocando agora as colunas em jogo também, temos que quando dissermos vá para a[0] [0], ele irá para a posição 0… vá para a[0] [1], ele irá para a posição 1… a[0] [2], ele irá para a posição 2…
a[1] [0], ele irá para a posição 3… a[1] [1], ele irá para a posição 4…   a[1] [2], ele irá para a posição 5…  etc etc etc

tudo isso para te explicar aquilo que escrevi acima, que:

* (  * (a + <numero da linha>) + <numero da coluna> )

é o modo de se caminhar no vetor através de ponteiros, em vetores bidimensionais.

Ou seja:

a[0] [0] = * (  * (a + 0 ) + 0 )

a[2] [1] = * (  * (a + 2 ) + 1 )

a[1] [0] = * (  * (a + 1 ) + 0 )

etc…

é confuso pra caramba… pelo menos eu acho… mas espero que tenham entendido… porque eu demorei quase 1 dia pra entender, rs

Vamos à questão:

printf (“%d”, *(a[1] + 2));

a[1] = *(a + 1) então temos printf (“%d”, *(*(a + 1) + 2)); Exatamente o método de ir para linha e coluna em vetores bidimensionais através do valor dentro dos ponteiros.

*(a + 1) = linha 1 = 4,5,6 (se déssemos um printf nisso iríamos obter apenas o número 4)

*(*(a + 1) + 2) =  linha 1 coluna 2

 

col 0         col 1      col2

linha 0         ——>                     1             2             3

linha 1         ——>                     4             5             6

linha 2         ——>                     7             8            9

linha 3         ——>                     10           11         12

 

Resposta D = 6

 

 

Abraços

Algumas considerações sobre resumos

Olá pessoal !
Esse é meu primeiro artigo no blog de Informática. Estava procurando algo que achasse útil passar para vocês na área de informática, mas ainda não tenho nada pronto ou bem elaborado. Sendo assim decidi falar sobre algo que acho muito importante no processo de aprendizagem e de revisões: os resumos.

Várias vezes me peguei pensando se compensava ou não fazer resumos. Bem, creio que o tempo “perdido” (que não é de fato perdido, pois ao resumir você fixa conteúdo) é recompensado na hora de revisar a matéria.

Antigamente eu fazia resumos maiores que os próprios textos ! E vocês podem concluir então que esses resumos não me proporcionavam muitas coisas diferentes dos livros. Embora me ajudassem a aprender, eles não me ajudavam na revisão.

Eu particularmente não gosto de grifar livros, porque por mais que eu grife, eu não consigo deixar de ler as palavras que não estão grifadas, rs.

Então após chegar à conclusão que os resumos são importantes para meu aprendizado e que eu tinha deficiências no método de fazê-los, dei uma pesquisada e cheguei a algumas conclusões (obrigado internet !), as quais já estou aplicando em meus novos resumos:

  • Você não aprende com os resumos, você aprende a matéria com os livros. Após aprendida a matéria, o resumo tem a função de te trazer a matéria de volta à memória, sem que você tenha que ler todo o extenso conteúdo do livro. Logo, se você precisa ler duas ou três vezes para aprender, faça-o antes de resumir;
  • Resumos não necessitam do uso de muitas preposições, advérbios, adjetivos, rodeios e floreios. Têm que ser diretos e conter os pontos chave das sentenças;
  • Livros costumar dar muitos exemplos, explicar de várias formas, tecer conclusões mais de uma vez e fazer citações. Tudo isso pode ser suprimido do resumo. Repito, você não aprende com o resumo, você relembra; a hora de aprender é ao ler os livros;
  • Quando possível, é sempre bom escrever com suas próprias palavras ao invés de copiar trechos do texto;
  • Deve-se manter a sequência de ideias do texto original, pois geralmente o autor nos conduz de maneira evolutiva nas ideias do texto. Além de que manter o resumo na ordem do texto fonte do resumo, faz com que o cérebro articule melhor a memória;
  • O resumo deve ter em média 60% menos palavras que o texto original;
  • Os resumos devem ser feitos em letras grandes e com espaço entre as linhas. O cérebro assimila melhor as informações dessa maneira;
  • Estudos comprovam que resumos feitos à mão são mais eficientes que resumos feitos no computador. Esses estudos alegam que isso se dá a mecanismos psicomotores envolvidos na atividade de escrever o resumo à mão;
  • Após fazer o resumo, leia-o e veja se nenhuma informação importante está faltando. Mais para frente, na hora da revisão, veja se você ainda entende o resumo. Se não, volte ao livro para suprir suas lacunas de aprendizado;
  • Em alguns casos, gráficos e tabelas contêm dados importantes, como no caso de Geografia. Eu sempre gosto de olhá-los juntos aos resumos. Para isso faço referências nos resumos para a página dos livros onde estão os mapas, gráficos que quero consultar. Ex: Livro Lygia Terra, p. 15, fig. 2. Também podem ser feitas cópias desses dados para serem anexados aos resumos, é mais prático;
  • Algumas matérias (como Linux e seus comando, linguagens de programação, SQL, por exemplo) são extremamente difíceis de resumir. O que pode ser feito é montar folhas com os comandos, em letras grandes, colorindo os parâmetros com cores diferentes, para que o cérebro assimile melhor; Muito importante nessas matérias é saber ordem de precedência de operadores, e para isso montar tabelinhas é de grande ajuda;
  • Geralmente em informática, existem vários métodos para realizar uma mesma coisa. Isso implica sempre em “vantagens e desvantagens”. Tenha sempre nos seus resumos quais os prós e os contras de determinado método ou aplicação. Esteja também atento em anotar nos resumos as diferenças entre um método e outro.
  • Construa seu resumo em material que sejam fáceis de você carregar. Eu gosto de escrevê-los em folhas de sulfite, A4. Posso levá-las no ônibus ou para o serviço, para quando desejo estudar nas horas vagas. Cuide bem deles, para que não tenha que perder tempo os passando a limpo;
  • Existem resumos gráficos chamados “mapas mentais”, que são o próximo passo após os resumos. Esses mapas organizam as informações de maneira gráfica e encadeada e são também ótimas ferramentas para estar sempre revisando a matéria. São ainda mais sintéticos que os resumos. Ainda não me sinto seguro a fazê-los, mas pode ser que para você seja uma boa ideia !

Abaixo está um pequeno exemplo de um resuminho rápido que fiz agora ao pesquisar um texto na wikipedia !

Segue o texto original:

Brasil Colônia ou Brasil colonial foi o período colonial brasileiro da forma definida pela historiografia, em que o território brasileiro era em uma colônia do império ultramarino português. Foi marcado pelo início do povoamento (fim do período pré-colonial brasileiro, em 1530) e não do descobrimento do Brasil pelos portugueses,[1] se estendendo até a sua elevação a reino unido com Portugal, em 1815.

Antes do descobrimento pelos europeus – alcançado por uma expedição portuguesa -, em 1500, o território que hoje é chamado de Brasil era habitado por indígenas.

A economia do período colonial brasileiro foi caracterizada pelo tripé monocultura, latifúndio e mão de obra escrava, e, apesar das grandes diferenças regionais, manteve-se, no período colonial, a unidade linguística, tendo se formado, nessa época, o povo brasileiro, junção e miscigenação de europeus, africanos e ameríndios, formando uma cultura autóctone característica.

Em contraste com as fragmentadas possessões espanholas vizinhas, a colónia portuguesa, construída na América do Sul, manteve a sua unidade e integridade territorial e linguística mesmo após a independência, dando origem ao maior país da região.

Total de palavras: 173.


Segue o texto resumido:

Brasil colônia
——————

Período em que o território brasileiro era uma colônia Portuguesa.
Começou com o povoamento (após o período pré-colonial) e foi até ser classificado como reino unido com Portugual.

Antes do descobrimento era habitado por indígenas.

Economia: monocultura, latifúndio e mão de obra escrava.
Unidade linguística.
Povo composto por europeus, africanos e ameríndios.

Manteve unidade e integridade territorial e linguística mesmo após a indepêndencia.

Total de palavras: 65.

Ganho aproximado de 64% !

Imagine seu tempo para revisar certo conteúdo cair de 1 hora para aproximadamente 22 minutos ! É um ótimo ganho não?


Grande abraço !