Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
CDD 378
Direitos desta edição reservados à UNITINS
É proibida a reprodução total ou parcial desta obra sem autorização expressa da UNITINS
Equipe EADCON
Coordenador Editorial William Marlos da Costa
Apresentação
e procedimentos lógicos claramente definidos, necessários para a solução de um
problema em um número finito de etapas.
Assim, na aula um, veremos os conceitos básicos de lógica para programação
e as formas mais utilizadas para a representação de algoritmos.
A aula dois abordará os operadores lógico-matemáticos e relacionais, necessá-
rios para a construção de expressões. Iniciaremos também a construção de algoritmos
seqüenciais, aprendendo os comandos básicos de entrada e saída de dados.
As estruturas de seleção serão apresentadas nas aulas três e quatro, abordando mais
especificamente o desvio condicional simples, composto e encadeado. E, finalmente,
nas aulas cinco, seis e sete, conheceremos as diferentes estruturas de repetição.
A disciplina de lógica para programação é de extrema importância, uma vez
que nos apresenta o embasamento necessário para a implementação de soluções
computacionais para problemas do mundo real.
Em breve, você desenvolverá complexos sistemas baseados nos conheci-
mentos que começará a adquirir aqui.
Bons estudos!
Prof. Igor Yepes
EMENTA
Representação do pensamento lógico. Fundamentos de algoritmos. Variáveis
e constantes. Programação estruturada. Estruturas de seleção e repetição.
OBJETIVOS
• Apresentar os principais conceitos de Lógica para Programação
Plano de Ensino
CONTEÚDO PROGRAMÁTICO
• Fundamentos de lógica aplicada ao desenvolvimento de algoritmos
• Formas de representação de algoritmos
• Operadores e tipos de dados utilizados para construção de
expressões
• Variáveis e constantes
• Estruturas seqüenciais
• Estruturas de seleção
• Estruturas de repetição
BIBLIOGRAFIA BÁSICA
CARBONI, Irenice de Fátima. Lógica de programação. São Paulo: Thomson,
2003.
FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de
programação: a construção de algoritmos e estruturas de dados. 3. ed. São
Paulo: Makron Books, 2005.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de. Algoritmos:
lógica para desenvolvimento de programação de computadores. 16. ed. São
Paulo: Érica, 2005.
BIBLIOGRAFIA COMPLEMENTAR
LOPES, Anita; GARCIA, Guto. Introdução à programação: 500 algoritmos resol-
vidos. Rio de Janeiro: Campus, 2002.
ORTH, Afonso Inácio. Algoritmos e programação com resumo das linguagens
Pascal e C. Porto Alegre: AIO, 2001.
SOUZA, Marco Antonio Furlan de; GOMES, Marcelo Marques; SOARES, Marcio
Vieira. Algoritmos e lógica de programação. São Paulo: Thomson, 2005.
Aula 1
Conceitos básicos de lógica
para programação
1.1 Lógica
Segundo o dicionário eletrônico Houaiss (2007) da língua portuguesa,
a lógica é a parte da filosofia que trata das formas do pensa-
mento em geral (dedução, indução, hipótese, inferência, etc.) e
das operações intelectuais que visam à determinação do que é
verdadeiro ou não.
1.3.2 Fluxograma
O fluxograma é uma forma de representação algorítmica intermediária entre
a descrição narrativa e o português estruturado. Apresenta menos imprecisão que
a primeira, sem se preocupar com detalhes de implementação do programa.
1.3.3 Pseudocódigo
Finalmente, apresentamos a forma de representação de algoritmos mediante
utilização de pseudocódigo, o qual, como explicado anteriormente, é uma forma
de representação mais próxima das linguagens de programação e, ao mesmo
tempo, de fácil compreensão por ser escrita em português. Isso facilita o apren-
dizado e permite que nos preocupemos mais com a construção da estrutura
lógica requerida do que com a linguagem utilizada. Contudo segue normas
semelhantes às linguagens de programação na sua utilização.
da sua declaração que definimos o tipo de dado que irá conter e, conseqüente-
mente, o espaço de memória que será reservado para isso.
A nomenclatura das variáveis deve seguir as seguintes regras básicas:
• não pode iniciar por um número;
• não podem ser utilizados caracteres especiais, com exceção do subli-
nhado ( _ );
• não podem ser utilizadas palavras reservadas da linguagem para nome
de variáveis.
Seguindo tais regras, podemos exemplificar como nomes válidos para variá-
veis:
• Nome
• Nota1
• Data_nascimento
• _1
• x
Dessa forma, alguns exemplos de nomes não-válidos seriam:
• @Nom2e (iniciando com um caractere especial diferente de _)
• 1Nota (iniciando com um número)
• Data nascimento (com espaço em branco no meio)
Por outro lado, temos as constantes, cujo valor permanece inalterado durante
a execução do algoritmo. A nomenclatura das constantes, caso sejam explici-
tamente declaradas, segue as mesmas regras estipuladas para a nomenclatura
das variáveis, com exceção de que não é possível omitir o seu valor de inicia-
lização. Ou seja, ao declarar uma constante, devemos atribuir imediatamente
o seu valor inicial; enquanto que para as variáveis, o valor pode ser atribuído
posteriormente à sua declaração.
Pois é... Finalizamos nossa primeira aula com uma boa noção das principais
formas de representação de estruturas algorítmicas, compreendendo suas aplica-
ções e sua utilidade na codificação de soluções.
a) Somente I é falsa.
b) Somente II é falsa.
c) Somente III é falsa.
d) Todas as afirmativas são verdadeiras.
Anotações
Aula 2
Expressões e estruturas seqüenciais
Uma vez que já temos uma visão geral das formas de representação de
algoritmos e os tipos de dados por eles utilizados, temos de aprender como
manipular esses dados de forma apropriada. Para isso, devemos conhecer os
operadores e os tipos de expressões que podemos construir com eles.
Após entendermos como formular expressões para uso nos procedimentos
algorítmicos, poderemos iniciar o aprendizado dos comandos básicos de entrada
e saída para construção de algoritmos seqüenciais, nos quais são executados
todos os passos (instruções) na seqüência apresentada, da primeira até a última
linha, sem omissões e sem repetições.
Bateu a curiosidade? Então vamos lá!
2.1 Expressões
Uma expressão pode ser composta por uma variável, uma constante, ou qual-
quer combinação válida entre variáveis, constantes e operadores que retornem
um resultado após a sua execução.
2.1.1 Operadores
Tanto na construção de algoritmos quanto no desenvolvimento de programas
em linguagens computacionais, utilizaremos basicamente três tipos de operadores:
• aritméticos
• lógicos
• relacionais
Antes de conhecermos esses operadores, é importante conhecer o operador
de atribuição (←), utilizado para transferir o resultado de uma expressão para
uma variável. Por exemplo:
a←3
b←2
soma ← a + b
Agora sim, vamos conhecer cada um dos tipos de operadores (aritméticos,
lógicos e relacionais) mais detalhadamente.
a) Operadores aritméticos
As expressões aritméticas nos fornecem como resultado da sua execução um
valor numérico (inteiro ou real). A tabela a seguir relaciona os operadores
aritméticos que iremos utilizar, bem como a sua ordem de prioridade de
execução dentro da expressão.
Como você pode verificar, o ou lógico só retorna falso como resultado caso
os dois operandos comparados por ele contenham um valor falso. Se ao menos
um dos operandos for verdadeiro, o resultado será verdadeiro. O e lógico só
retornará um resultado verdadeiro se os dois operandos por ele comparados
forem também verdadeiros. Caso ao menos um dos operandos seja falso, o
resultado também será falso. Finalmente, o não lógico (ou operador lógico de
negação), serve para inverter o valor.
c) Operadores relacionais
Temos ainda mais um tipo de operadores que pode ser utilizado em expres-
sões lógicas: os operadores relacionais. O quadro a seguir nos apresenta
esses operadores.
Certo... Vamos agora a uma breve explicação dessa estrutura. As duas barras
no início da primeira linha indicam que o conteúdo após as barras (//), até o final
dessa linha, é um comentário. Logo não será considerado para execução. Caso
deseje especificar trechos de comentário superiores a uma linha, basta iniciar com
/* e finalizar o trecho com */. Toda a área compreendida entre essas duas marca-
ções será tratada como comentário, não influindo na execução do pseudocódigo.
É interessante que você insira comentários no seu código sempre que neces-
sário, para explicar uma peculiaridade de um cálculo, uma funcionalidade espe-
cífica, etc. Isso é muito útil na hora de realizar alterações no código, pois caso
você, ou até mesmo outro programador, necessite alterar alguma funcionalidade,
com algumas dicas espalhadas pelo código fica mais fácil saber a que se refere
um determinado trecho do algoritmo.
O início e fim do bloco principal do algoritmo são claramente delimitados
pelas palavras início e fim. Entre essas duas marcações é que devem ser inse-
ridas todas as instruções a serem executadas pelo pseudocódigo.
É recomendável realizar a declaração de variáveis e constantes logo no
início do bloco principal, apesar de ser permitido realizar essa declaração em
qualquer trecho do código (desde que seja antes da utilização da variável em
alguma expressão ou comando). Se ficar definido como padrão a declaração no
início, facilita bastante na hora de realizar alguma manutenção ou alteração.
Após a área de declaração, são inseridos os comandos e expressões que
devem ser executados.
Sintaxe:
ler <variavel>
ler <variavel_1>, <variavel_2>, ... , <variavel_n>
Vejamos agora alguns pequenos exemplos que ajudarão a compreender
esses conceitos.
O exemplo da figura a seguir apresenta um pequeno algoritmo, sem neces-
sidade de declaração de variáveis, pois não faz uso de nenhum dado adicional
além do literal “Olá mundo!” após o comando escrever.
1. Classifique como (V) (verdadeira) ou (F) (falsa), cada uma das afirmações a
seguir, selecionando a alternativa que representa a seqüência correta.
( ) Com operadores é possível construir expressões, assim como na mate-
mática. A complexidade de uma expressão é determinada pela quanti-
dade de operadores e termos (variáveis ou valores constantes).
( ) Os operadores são, na prática, instruções especiais pelas quais incre-
mentamos, decrementamos, comparamos e avaliamos dados dentro de
um programa de computador.
a) F, V, V c) V, F, F
b) V, V, F d) F, F, F
a) 85 c) 733
b) 5 d) 46
Aula 3
Estrutura de seleção simples
e composta
Claro como a água? Não? Então vamos explicar cada linha do bloco prin-
cipal para que não fique nenhuma dúvida.
Iniciamos com a declaração de três variáveis. Uma para armazenar o valor
informado pelo jogador humano, outra para o número do computador, e uma
terceira para armazenar a soma dos dois primeiros.
inteiro humano , computador , total
As duas linhas seguintes apresentam uma mensagem na tela solicitando que o
jogador humano informe um número inteiro, armazenando-o na variável humano.
escrever “Digite um número inteiro: ”
ler humano
Após isso, é a vez de o computador escolher seu lançamento, que é reali-
zado de forma aleatória. Para isso, vamos utilizar duas funções predefinidas no
portugol IDE:
tela. Isso é feito de forma bem simples, dentro de um desvio condicional composto
no qual a condição verificará se o resto da divisão (%) do valor contido em total
por 2 é 0. Se o resto for 0, significa que o valor é par. Senão, só poderá ser
ímpar. Temos então:
se total % 2 = 0 entao
escrever “\nPAR – Ganhei! É a superioridade da máquina!!”
senao
escrever “\nÍMPAR – Parabéns! Você ganhou.”
fimse
inicio
inteiro x<-4,y<-2,z<- -3
real resultado
resultado <- (x%2)*z^3
se resultado < 0 entao
escrever “CONDIÇÃO 1”
senao
se resultado > 0 entao
escrever “CONDIÇÃO 2”
senao
escrever “CONDIÇÃO 3”
fimSe
fimSe
fim
a) Condição 1
b) Condição 2
c) Condição 3
4. Tudo o que é feito por um desvio condicional composto pode ser represen-
tado utilizando desvios condicionais simples? Elabore uma resposta com
cinco a dez linhas.
E então? Não está tão difícil, não é mesmo? Agora que você já domina as
estruturas de seleção simples e compostas, poderá verificar como aumenta seu
poder quando trabalharmos com essas estruturas encadeadas (ou aninhadas),
permitindo criar estruturas de decisão muito mais complexas e úteis. Não se
esqueça de revisar esta aula e de dar uma boa olhada no material da próxima
para facilitar o aprendizado. Até lá!
Anotações
Aula 4
Estrutura de seleção encadeada
Após esta aula, você já terá conhecimento para desenvolver algoritmos com
um grau de complexidade maior, e poderemos avançar para outro tipo de estru-
turas de grande importância ao desenvolvimento de sistemas.
Lembra do problema dois da aula anterior (aula três)? Como não havíamos
explicado ainda o se aninhado, resolvemos com três se simples. Mas será que
essa era a melhor forma de resolver esse problema? Veja e analise o exemplo a se-
guir, dessa vez resolvido com estrutura condicional encadeada (se encadeado).
Para concluir esta aula, temos ainda mais uma estrutura bastante útil em
determinadas situações. Trata-se da estrutura de decisão de múltipla escolha.
Segundo Forbellone e Eberspächer (2005), quando temos um conjunto de
elementos discretos que necessita ser testado e ações diferentes são associadas
a esses valores, estamos diante de uma estrutura de decisão encadeada homo-
gênea do tipo se-senao-se. Como essa situação é bastante comum no desenvolvi-
mento de algoritmos que dependem de alternativas (desvios condicionais), usa-se
uma estrutura específica para esses casos, a seleção de múltipla escolha.
A sintaxe dessa estrutura pode ser representada da seguinte forma:
escolhe <expressão_0>
caso <Expressão_1o>,. . .,<Expressão_1n>:
<instruções>
. . . . . . . . . . .
caso <Expressão_no>,. . .,<Expressão_nn>,:
<instruções>
defeito:
<instruções>
fimescolhe
Nesse exemplo, você pode verificar que, com base no conteúdo da variável
sexo, a estrutura de seleção com múltiplas escolhas irá comparando o conteúdo
da variável com o valor apresentado nas opções (caso). Se combinar com alguns
dos valores, será executado o respectivo bloco de comandos. Se não houver
nenhuma equivalência entre as opções apresentadas, será executado o bloco de
comandos padrão (default), no Portugol IDE denominado defeito.
Saiba mais
1 início
2 texto nome
3 inteiro sexo, idade
4 escrever “Entre com seus dados\n”
5 escrever “Nome: \n”
6 ler nome
7 escrever “Sexo:\n<1> Masculino\n<2> Feminino”
8 ler sexo
9 escrever “Idade:\n”
10 ler idade
11 se sexo=/=1 e sexo =/=2 entao
12 escrever “Sexo indefinido!\n”
1 início
2 texto nome
3 inteiro sexo, idade
4 escrever “Entre com seus dados\n”
5 escrever “Nome: \n”
6 ler nome
7 escrever “Sexo:\n<1> Masculino\n<2> Feminino”
8 ler sexo
9 escrever “Idade:\n”
10 ler idade
11 se sexo=/=1 e sexo =/=2 entao
12 escrever “Sexo indefinido!\n”
13 senao
14 se idade>0 entao
15 se sexo = 1 e idade<18 entao
16 escrever “\Bem vindo”,nome,”\nVocê é menor de idade
17 senao
18 se sexo =1 entao
19 escrever \Bem vindo”,nome,”\nVocê é maior de idade
20 senao
21 se sexo = 2 e idade<18 entao
22 escrever “\Bem vinda”,nome,”\nVocê é menor de idade.”
23 senao
24 escrever “\Bem vinda”,nome,”\nVocê é maior de idade.”
25 fimSe
26 fimSe
27 fimSe
28 senao
29 escrever “Você deve entrar com idade maior que zero!”
30 fimSe
31 fimSe
32 fim
inicio
real res, n1, n2
texto opcao
escrever “\nDigite a operacao desejada:”
ler opcao
escrever “Digite o primeiro operando:
ler n1
esrever “Digite o segundo operando:”
ler n2
escolhe opcao
caso “+”:
escrever n1+n2
caso “–”:
escrever n1–n2
caso “*”:
escrever n1*n2
caso “/”:
escrever n1/n2
defeito:
escrever “Opcção inválida.”
fimescolhe
fim
Anotações
Aula 5
Estrutura de repetição
com teste no início
Para que você consiga acompanhar de forma satisfatória esta aula, é neces-
sário que domine as estruturas de programação seqüencial e de desvio condi-
cional estudadas até o presente momento. Também a tranqüilidade e a segurança
na construção de expressões lógico-matemáticas para a correta compreensão e
desenvolvimento das estruturas que começaremos a estudar a partir desta aula
serão fundamentais. Nosso estudo exige conhecimento cumulativo, por isso não
deixe lacunas para trás!
Saiba mais
Muito bem. Mas creio que, após analisar o código anterior, você já deva
ter se perguntado:
Mas... e se eu não quiser as médias dos 50 alunos? Se quiser parar antes dos cinqüenta
ou se quiser calcular para um número maior?
Realmente o algoritmo proposto está bem rígido nesse aspecto. Ele só serve
para calcular a média de 50 alunos. Nem mais, nem menos (a não ser que você
force o encerramento do programa). Mas basta uma pequena alteração para
resolver esses problemas. Vejamos.
unicamente para indicar o número do aluno para o qual foi realizado o cálculo
da média. Ele permanece com a função de contador, mas não influencia mais
a execução ou não do loop.
Dessa forma, o controle de execução do laço passou para o usuário, o qual
gerencia essa estrutura por meio da variável continua. Enquanto o usuário perma-
necer inserindo o valor “s” para essa variável, o laço continua em execução.
Quando for digitado um caractere diferente, o loop será encerrado. Assim a
variável continua é o que denominamos de critério de parada do nosso laço.
Você também pode especificar previamente, durante a execução do algo-
ritmo, a quantidade de vezes que o laço será repetido. Vejamos um exemplo
disso em um algoritmo implementado para retornar a média de n números digi-
tados pelo usuário. O algoritmo deve solicitar ao usuário quantos números serão
digitados para o cálculo. Após isso, deve entrar no laço, solicitar a entrada
dos n valores e, após a leitura de todos, calcular a média. Aqui entra mais um
conceito: acumulador. Assim como o contador serve para contar a quantidade
de vezes que um laço, ou um determinado evento dentro dele, é executado, o
acumulador visa a realizar o armazenamento cumulativo de valores dentro de
uma variável (como, por exemplo, um somatório).
Assim, dentro do laço, além do contador que controlará o número de execu-
ções do loop, teremos um acumulador, o qual irá somando todos os valores
digitados para, após o encerramento do laço, ser dividido pela quantidade de
valores digitados obtendo, dessa forma, a média.
O seu algoritmo deve ficar parecido com o exemplo a seguir.
Figura 4 Exemplo de loop com teste no início.
// Exemplo 18 – Cálculo da média com acumulador
inicio
real valor , acum <- 0
inteiro cont <- 1 , n
escrever “Quantos números deseja digitar? ”
ler n
enquanto cont <= n faz
escrever “Digite o valor ” , cont , “: ”
ler valor
acum <- acum + valor
cont <- cont + 1
fimenquanto
cont <- cont – 1
escrever “\nA soma dos ” , cont , “ números é: ”,
acum
escrever “\nA média dos números é: ” , acum / cont
fim
Com esse exemplo, concluímos mais uma aula da nossa disciplina de lógica
para programação. Revise bem os conceitos e exemplos dados de forma a dirimir
qualquer dúvida. Sobretudo não custa lembrar que você deve treinar muito o
desenvolvimento de algoritmos, pois só é possível aprender a desenvolvê-los
colocando a mão na massa, construindo e testando algoritmos. Não se iluda
em querer aprender apenas compreendendo o funcionamento de algoritmos
prontos. Crie problemas e solucione-os com algoritmos desenvolvidos por você.
Use a criatividade!
1. Dado o algoritmo a seguir, que faz uso do laço de repetição enquanto, qual
será o valor exibido na tela após sua execução?
inicio
inteiro x , resultado
x <– 5
resultado <– 0
enquanto ( x > 0 ) faz
resultado <– x * 2
resultado <– resultado – 2
x <– x – 1
fimenquanto
escrever resultado
fim
a) 2 c) 0
b) –2 d) –1
Realize uma análise desse código comparando-o com o que você desen-
volveu e, para uma melhor compreensão, implemente-o no Portugol IDE para
verificar sua funcionalidade.
Finalmente, na atividade quatro, um contador nada mais é do que uma vari-
ável utilizada para contar a quantidade de execuções de um laço, ou a quanti-
dade de vezes que uma determinada situação acontece. Pode ser utilizada de
muitas formas, mas sempre procurando contar as ocorrências de algum evento
dentro do laço. O acumulador, por outro lado, é uma variável que armazena
valores de forma cumulativa. O acumulador pode, por exemplo, realizar o soma-
tório de valores a cada execução do laço.
Anotações
Aula 6
Estrutura de repetição
com teste no final
Compare o fluxograma dessa estrutura com o do faz ... enquanto para iden-
tificar a diferença de funcionalidade.
Você pôde notar, nesse exemplo, que o laço só encerra sua execução
quando a sua condição retorna um valor verdadeiro; nesse caso, quando a
variável i é igual a dez.
Vamos exercitar um pouco? Tente resolver o seguinte problema e só depois
de ter a sua versão do algoritmo funcionando confira com o pseudocódigo aqui
apresentado para poder comparar detalhes e diferenças das implementações.
Problema: desenvolva um jogo no qual o computador escolhe um número inteiro
positivo entre 0 (zero) e 100 (cem) de forma aleatória (já utilizamos antes essa
função). Após determinar o número (sem exibi-lo ao usuário), o computador
solicitará que você permaneça “chutando” valores até acertar o número oculto.
A cada tentativa do usuário, o computador deve informar se o número oculto
é maior ou menor do que o informado pelo jogador. O jogo terminará no
momento em que o número for localizado, quando então o computador deverá
encerrar o laço, informando o número oculto e a quantidade de tentativas neces-
sárias para encontrá-lo.
Pronto! Analise esse código e compare com o anterior para verificar quais
foram as alterações implementadas.
Com isso, estamos encerrando o conteúdo desta aula e nos aproximando do
final da nossa disciplina. Não deixe de executar as atividades do caderno e de
acessar o material complementar disponibilizado pelos professores.
inicio
inteiro numero, contador
repete
escrever “Introduza um numero:”
ler numero
contador <- contador + 1
ate contador > 5
fim
inicio
inteiro opcao, quantidade
real total <– 0.0
repete
escrever “Produto 1 - R$ 10,00\n”
escrever “Produto 2 - R$ 25,00\n”
escrever “Produto 3 - R$ 50,00\n”
escrever “Escolha um número de produto ou 0 para sair”:
ler opcao
escolhe opcao
caso 0:
escrever “Total da compra:”, total
caso 1:
ler quantidade
total <– total + quantidade * 10.0
caso 2:
ler quantidade
total <– total + quantidade * 25.0
caso 3:
ler quantidade
total <– total + quantidade * 50.0
fimescolhe
ate (opcao = 0)
fim
inicio
inteiro maior <- 1
inteiro numeros
repete
escrever “Digite um numero (zero para sair): “
ler numeros
se numeros > maior entao
maior <- numeros
fimse
ate maior = 0
escrever “O maior numero digitado foi: “ , maior
fim
Dado o algoritmo anterior, o que está errado em relação ao que foi proposto?
a) O Número maior não será calculado de forma correta, pois o mesmo
sempre estará com o valor zero.
b) A variável número não armazena o valor digitado pelo usuário.
c) O laço de repetição encerra após a leitura do número 1, não do zero.
d) O laço de repetição ficará repetindo, pois nunca será atendida a
condição de parada.
Na seqüência (linha 20), é pedido ao usuário que entre com o quarto valor (1), de
acordo com o enunciado, que será atribuído à variável quantidade. Na linha 21
a variável total vai receber o resultado do processamento de total + quantidade *
50. Sabendo que total é igual a 125 e quantidade igual a 1, podemos reescrever
para 125 + 1 * 50, que é igual a 175. Em seguida, por causa do laço de repetição
repete...até, parte do algoritmo será repetida. É solicitado ao usuário a entrada do
último dado (0). A estrutura de seleção múltipla desviará a execução do algoritmo
para a linha 11 (caso 0). É impresso em tela Total da compra: 175.0 (lembrando
que total é uma variável real) e sairá finalizando o algoritmo.
Para a atividade três, a resposta é a alternativa (d). Isso porque a afirmativa
( I ) é verdadeira, pois como o próprio nome diz, estrutura seqüencial obedece a
uma seqüência linear de execução. Já na afirmativa (II), sabemos que um teste
condicional é baseado em lógica convencional e, portanto, deve resultar em um
valor verdadeiro ou falso. Lembre-se dos tipos de desvios condicionais: seleção
simples, composta e encadeada. Repare que nessa afirmativa não é especificada
qual o tipo de desvio condicional, ou seja, a afirmação generaliza para todos os
tipos. Contudo, na seleção simples, uma instrução ou um conjunto de instruções
é executado somente se o teste condicional especificado retornar o valor verda-
deiro. Adicionalmente, na seleção composta, as instruções contidas nos desvios
condicionais devem ser executadas sempre para situações verdadeiras ou falsas.
Isso torna a afirmativa (II) incorreta. A afirmativa (III) também é falsa, pois uma
seqüência de comandos pode ser executada nenhuma, uma ou várias vezes.
Para a atividade quatro, a alternativa a ser assinalada é a (d), uma vez que
a variável maior já inicia com um valor diferente de zero e, em nenhum momento
na execução do algoritmo ela poderá assumir o valor zero, pois o desvio condi-
cional dentro do bloco do laço de repetição não permite essa atribuição. A
variável que deveria servir para encerrar o laço seria a numeros, pois é ela que
recebe o valor digitado pelo usuário, enquanto a maior sempre irá armazenar
o maior valor digitado.
Anotações
Aula 7
Estrutura de repetição
com variável de controle
laço de repetição com variável de controle, também conhecido como para, difere
dos anteriores, pois sempre repete a execução do bloco de instruções um número
predeterminado de vezes, uma vez que essa estrutura não prevê uma condição
(como é o caso das estruturas de repetição vistas anteriormente), possuindo limites
fixos de início e fim do laço de repetição (FORBELONE; EBERSPÄCHER, 2005).
Vejamos, a seguir, a sintaxe e representação por meio de fluxograma dessa
estrutura de repetição.
FLUXOGRAMA
Agora podemos dar uma olhada em um pequeno algoritmo que, usando o laço
de repetição para, lista dez números inteiros seqüenciais.
Repare que é criada uma variável de controle do tipo inteiro, nesse exemplo
nomeada como contador e, dentro da primeira linha do laço, ela é inicializada
com o valor 0 (zero). Nessa estrutura você pode inicializar a variável de controle
com o valor necessário para o início das instruções do laço. A seguir, é definido o
valor final da variável (9) e o valor do incremento automático (passo 1 – opcional).
Assim, cada vez que o algoritmo chegar ao final da estrutura (comando proximo),
o valor da variável será automaticamente incrementado no valor estipulado em
passo. Se não for definido o passo, será automaticamente assumido passo 1.
O pseudocódigo seguinte apresenta um exemplo de laço para com decre-
mento, para o qual foi necessário inicializar a variável de controle com um valor
maior (9) que o valor final (0) e definir o passo com uma unidade negativa (-1).
Saiba mais
Vamos agora construir um algoritmo que execute a leitura das notas de duas
provas de uma turma de alunos, cujo quantitativo será informado pelo usuário.
Após a leitura das notas de cada aluno, o algoritmo deve calcular e exibir a
média final, informando se o aluno foi aprovado (média igual ou superior a
seis), ou se foi reprovado (média inferior a seis). No final dos cálculos referentes
à turma, o algoritmo deve informar a média geral da turma juntamente com a
maior e a menor médias individuais. O algoritmo deve, no final, solicitar se o
usuário deseja continuar calculando médias para outra turma e, caso seja digi-
tado n (não), deve ser encerrada a execução.
Construa o algoritmo necessário para essa atividade e, após desenvolver o
seu, compare com o apresentado a seguir, analisando as estruturas e a lógica
utilizada em ambos.
Com esse último exemplo, chegamos ao final da nossa disciplina. Não deixe
de revisar qualquer parte do conteúdo em que você tenha ainda alguma dúvida,
questionando os professores para uma melhor compreensão.
A última estrutura vista nesta disciplina foi apresentada nesta aula. A estru-
tura de repetição com variável de controle ou para, como é mais conhecida.
Nas estruturas anteriores, enquanto e repete, é freqüentemente difícil precisar
o número de vezes que um bloco de instruções irá ser executado. Esse tipo de
laço de repetição (para) difere dos anteriores, pois possui um número pré-deter-
minado de execuções do seu bloco de instruções.
a) inicio
inteiro contador1 <- 0
inteiro contador2 <- 0
escrever “Tabuada de Somar”
enquanto contador1 <= 10 faz
contador2 <- 1
enquanto contador2 <= 10 faz
escrever “\n\t”,contador1,”*”,contador2,”=”, contador1 *contador2
contador2 <- contador2 + 1
fimenquanto
escrever “\n\n”
contador1 <- contador1 + 1
fimenquanto
fim
b) inicio
inteiro contador1
inteiro contador2
contador1 <- 0
contador2 <- 0
escrever “Tabuada de Somar”
contador1 <- 1
repete
contador2 <- 1
enquanto contador2 <= 10 faz
escrever “\n\t”,contador1,”*”,contador2,”=”,contador1*contador2
contador2 <- contador2 + 1
fimenquanto
escrever “\n\n”
contador1 <- contador1 + 1
ate contador1 >= 10
fim
c) inicio
inteiro contador1, contador2
escrever “Tabuada de Somar”
para contador1 de 1 ate 10 passo 1
para contador2 de 1 ate 10 passo 1
escrever “\n\t”,contador1,”*”,contador2,”=”,contador1*contador2
proximo
escrever “\n\n”
proximo
fim
d) inicio
inteiro contador1
inteiro contador2
contador1 <- 0
contador2 <- 0
escrever “Tabuada de Somar”
contador1 <- 1
repete
contador2 <- 1
repete
escrever “\n\t”,contador1,”*”,contador2,”=”,contador1*contador2
contador2 <- contador2 + 1
ate contador2 <= 10
escrever “\n\n”
contador1 <- contador1 + 1
ate contador1 >= 10
fim
A seqüência correta é:
a) F, F, V, V, V c) V, F, V, F, F
b) F, V, F, F, V d) V, F, V, V, F
3. Fatorial é o produto dos inteiros consecutivos de 1 até um dado número natural n. Seu
símbolo é n!. O fatorial de 5 é dado por: 5! = 1 * 2 * 3 * 4 * 5 = 120. Por definição, fato-
rial de 0 é 1 (0! = 1). Considerando que você possui mais de uma forma de construir uma
estrutura de repetição, analise atentamente os algoritmos seguintes e assinale a alternativa
mais adequada à questão.
FIMSE
c) SE NOTA < 6 ENTAO
ESCREVER “Reprovado”
SENAO
ESCREVER “APROVADO”
FIMSE
d) ((3 % 2) * (2^4)) + (10 / 5)
e) PARA contador DE 0 ATE 9 PASSO 1
ESCREVER contador , “\t”
PROXIMO
f) N <- 6
g) ENQUANTO contador < 10 FAZ
ESCREVER contador , “\t”
contador <- contador + 1
FIMENQUANTO
A seqüência correta é:
a) a–V; b–IV; c–III; d–VII; e–VI; f–II; g–I
b) a–VII; b–V; c–III; d–IV; e–VI; f–I; g–II
c) a–VII; b–VI; c–IV; d–V; e–III; f–I; g–II
d) a–V; b–IV; c–VI; d–III; e–I; f–II; g– VII
Anotações
Equipe EADCON
Coordenador Editorial William Marlos da Costa
Apresentação
básicas de redes de computadores e banco de dados.
Para terminarmos os estudos referentes a esta disciplina, analisaremos,
na sétima aula, os profissionais que atuam na área de tecnologia da
informação.
Com o intuito de combinar reflexões teóricas com propostas práticas, este
material não só trará contribuições relevantes para o aprendizado da compu-
tação básica, como também motivará você para um trabalho mais prazeroso
com esse conteúdo.
Desejamos bons estudos!
Prof. Alexandre Tadeu Rossini da Silva
Prof. Evanderson S. de Almeida
EMENTA
História da computação. Componentes básicos do computador. Sistemas
posicionais de numeração. Operações aritméticas no sistema binário de
numeração. Classificação de software. Noções básicas de redes de compu-
tadores e banco de dados. Profissões na área de informática.
Plano de Ensino
OBJETIVOS
• Conhecer a história da computação, os componentes básicos do
computador e os sistemas posicionais de numeração.
• Reconhecer as operações aritméticas no sistema binário de
numeração.
• Adquirir noções básicas de redes de computadores e banco de
dados.
• Estudar a classificação de software.
CONTEÚDO PROGRAMÁTICO
• História da computação
• Componentes básicos do computador
• Sistemas posicionais de numeração
• Operações aritméticas no sistema binário de numeração
• Classificação de software
• Noções básicas de redes de computadores e banco de dados
• Profissões na área de informática
BIBLIOGRAFIA BÁSICA
BROOKSHEAR, J. Glenn. Ciência da computação: uma visão abrangente. 7. ed.
Porto Alegre: Bookman, 2004.
POLLONI. Enrico G. F.; FEDELI, Ricardo Daniel; PERES, Fernando Eduardo.
Introdução à ciência da computação. São Paulo: Thomson, 2003.
VELLOSO, Fernando de Castro. Informática: conceitos básicos. 7. ed. Rio de
Janeiro: Elsevier, 2004.
BIBLIOGRAFIA COMPLEMENTAR
ALMEIDA, Marcus Garcia de. Fundamentos de informática. 2. ed. Rio de Janeiro:
Brasport, 2002.
MARÇULA, Marcelo; BENINI FILHO, Pio Armando. Informática: conceitos e apli-
cações. São Paulo: Érica, 2005.
Aula 1
História da computação
1.1 Dados
O ser humano sempre processou dados. Desde o momento em que um
cidadão antigo coletava pedras para representar a quantidade de ovelhas de
seu rebanho, ou escrevia nas paredes das cavernas, em cartões perfurados para
controlar o posicionamento e o movimento de agulhas do tear, ou até o tempo
em que grandes transações bancárias são efetuadas entre duas mega-empresas
situadas em continentes distintos, deparamo-nos com a definição de dados.
Saiba mais
Saiba mais
(ou seja, não vem definido de fábrica), poder decidir que cálculos ou
operações a máquina irá realizar. A consciência com o conceito de
programação que temos hoje não é mera coincidência.
Nesta aula, você pôde compreender o que são dados e as diferenças entre
dados analógicos e digitais. Fez uma viagem no tempo analisando as invenções
que contribuíram para o surgimento do computador.
Compreendeu que, de acordo com a evolução histórica dos computadores,
é possível agrupar quatro diferentes gerações, notadas sempre por um marco,
um evento revolucionário, que permitiu à tecnologia saltar consideravelmente em
direção a um estado mais evoluído.
Você aprendeu que, na primeira geração, os computadores eram baseados
em válvulas. Nessa geração, o primeiro computador criado foi o ENIAC. Já na
segunda geração, você viu que os computadores eram baseados em transistores
que eram muito mais rápidos e baratos que as válvulas, além de consumirem
muito menos energia elétrica. Na terceira geração, os computadores eram base-
ados em circuitos integrados, que consistiam em um conglomerado de transis-
tores em um pequeno chip de silício. Por fim, na quarta geração, sugiram os
Na atividade um, você expôs que dados analógicos podem assumir diversos
valores em um dado intervalo numérico, e os dados digitais assumem um número
limitado de valores nesse mesmo intervalo numérico, contudo não causa nenhum
tipo de prejuízo para os cálculos executados com esse intervalo. Se sua resposta
não contemplou esse princípio, sugerimos que retorne ao conteúdo sobre dados
digitais e analógicos e releia com atenção sobre cada um deles. Caso sua
resposta tenha remetido à idéia exposta, parabéns! Você atingiu o objetivo de
compreender a diferença entre dados analógicos e dados digitais.
Na atividade dois, a resposta correta é a alternativa (c). Se essa foi a sua
resposta, parabéns! Você acertou e atingiu nosso objetivo de conhecer o panorama
da evolução dos computadores, composto por descobertas da ciência e invenções de
cientistas em diversos momentos da história. Caso esta não tenha sido sua resposta,
sugiro que você retorne ao conteúdo sobre a evolução histórica dos computadores
e reveja com atenção as características marcantes de cada geração.
Na atividade três, mencionou que a válvula interrompe ou permite a
passagem de corrente elétrica, dependendo de como a energia passa por dentro
dela. Com isso, percebemos dois estados físicos definidos: com corrente elétrica,
temos o bit “um” (verdadeiro); sem corrente elétrica, o bit “zero” (falso). Eis aí
dois estados, o suficiente para realizar quaisquer cálculos baseados em álgebra
booleana. Se você conseguiu transmitir essa idéia, parabéns, atingiu o obje-
tivo de conhecer o panorama da evolução dos computadores. Caso não tenha
conseguido, volte ao conteúdo sobre a evolução histórica e releia com atenção
sobre as válvulas e a álgebra booleana.
Na atividade quatro, a resposta é a alternativa (d). Se essa foi a sua resposta,
parabéns! Você atingiu nosso objetivo de conhecer o panorama da evolução dos
computadores, composto por descobertas da ciência e invenções de cientistas
em diversos momentos da história. A alternativa (d) está incorreta, pois o circuito
integrado não é um substituto para os transistores e sim um agrupamento de
muitos transistores em um pequeno espaço de silício (chip). Caso não tenha acer-
tado a resposta, sugerimos que retorne ao conteúdo sobre a terceira geração de
computadores na evolução histórica dos computadores e reveja com atenção as
características marcantes dessa geração.
Anotações
Aula 2
Componentes básicos do computador
2.4.3 Registradores
Os registradores são pequenas memórias que servem para auxiliar o proces-
sador, armazenam resultados temporários, durante o processo de cálculo. Pense
que o processador teria de se esforçar muito mais para realizar operações sem
esses registradores internos, pois, se assim fosse, teria de utilizar a memória
principal, que está mais longe, externa ao processador.
Existem registradores com funções genéricas e específicas que são muito
mais rápidos do que aqueles que são preparados para responder a apenas um
tipo fixo de operação, enquanto os genéricos executam diversos tipos de opera-
ções, tal qual a memória principal. Os registradores são memórias internas para
uso geral, usados pela ULA para armazenar dados (caracteres, números biná-
rios) que estão sendo processados.
São exemplos de registradores gerais: AX, BX, usados para armazenar
números binários. São exemplos de registradores específicos: IP, Instruction
Pointer, usados para armazenar a referência do endereço da memória principal
(RAM), que contém a próxima instrução a ser executada.
Isso facilita a vida do programador, que terá à sua disposição um leque de instru-
ções prontas de fábrica a fim de alcançar seus objetivos.
Não há como definir qual o melhor dos processadores. Alguns autores
defendem o RISC como sendo o mais performático e “puro” dos processadores;
outros defendem que a complexidade trazida pelo CISC facilita a vida dos desen-
volvedores. De fato os processadores RISC costumam ser mais rápidos que os
processadores CISC. Mais rápido nem sempre significa melhor. Os computadores
da Apple (power pc, I-mac) não são tão populares no Brasil, mas sim nos EUA.
São preferidos quando o assunto é, por exemplo, processamento de vídeo, som e
gráfico, realizado por empresas de jogos eletrônicos, maquetes virtuais, etc.
Mesmo assim, o processador Intel é o mais popular por seguir uma regra de
retro compatibilidade com programas construídos para outros processadores da
mesma marca, mesmo que ultrapassados. Isso significa que um programa feito
para um processador Intel 4x86 (antigo) terá grandes chances de ser executado
em um Pentium IV (novo). Ter a vantagem de retro compatibilidade coloca a
Intel em posição comercial privilegiada, uma vez que os programadores de
sistemas e aplicativos terão menos trabalho, codificarão uma só vez e verão o
seu programa funcionar em várias versões futuras da Intel.
Chegamos ao fim da segunda aula. Agora você está ciente de importantes
informações que nortearão de maneira significativa as decisões que tomará em
relação à programação e demais relacionamentos associados ao computador.
Repare, também, o quanto a primeira aula apresentou aspectos fundamen-
tais sobre a evolução dos componentes de nossos computadores, o que fez com
que você recebesse a informação desta aula de forma fundamentada. Leve, em
sua mente, os conceitos aqui expostos, pois irá usá-los como, no mínimo, “pano
de fundo” para o desenvolvimento de aplicações, preparação de conteúdos,
ministração de palestras e seminários e os estudos da maioria das disciplinas que
serão vistas neste curso e que sejam relacionadas ao computador moderno.
Anotações
Aula 3
Sistemas posicionais de numeração
Exemplo
Exemplos
Exemplos
Exemplos
Exemplos
(11011)2:
b = 2 (base do número)
n = 5 – 1 = 4 (quantidade de algarismos – 1)
1x24 + 1x23 + 0x22 + 1x21 + 1x20
16 + 8 + 0 + 2 + 1 = (27)10
(3D9)16 :
b = 16 (base do número)
n = 3 – 1 = 2 (quantidade de algarismos – 1)
3x162 + Dx161 + 9x160
3x162 + 13x161 + 9x160
768 + 208 + 9 = (985)10
Exemplo
(125)10 : ( ? )2 15 ÷ 2 = 7 e resto = 1
125 ÷ 2 = 62 e resto = 1
7 ÷ 2 = 3 e resto = 1
62 ÷ 2 = 31 e resto = 0
3 ÷ 2 = 1 e resto = 1
31 ÷ 2 = 15 e resto = 1
1 < 2 (base desejada)
125 2
1 6
62 22
2
0 3
31 12
2
1 1
15 52
2
1 7 2
sentido da leitura
1 3 2
1 1
(125)10 = (1111101)2
Exemplo
(1010011011)2
0010 1001 1011
2 9 B
Exemplo
(54B)16
5 4 B
Exemplo
(1010011011)2
001 010 011 011
1 2 3 3
Exemplo
(543)8
5 4 3
Exemplo
(543)8
5 4 3
1 6 3
Exemplo
(1F4B)16
1 F 4 B
1 7 5 1 3
onde:
b = base do número (exemplo: base 2, 8, 10 e 16)
n = quantidade de algarismos da parte inteira –1
an = algarismos de acordo com sua posição
m = quantidade de algarismos da parte fracionária
Vejamos alguns exemplos de conversão de números fracionários de outras
bases para a base 10.
Exemplos
Exemplos
parte fracionária:
0 1
7,42710 = 111,012
Estamos chegando ao fim desta aula. Nela expusemos que existem vários
sistemas de numeração. Entre esses sistemas de numeração, os de representação
posicional (atribuição de pesos para cada posição de algarismo) se destacam
pela facilidade de realização de operações aritméticas, que serão estudadas na
próxima aula.
Nesta aula, vimos que o ser humano desde sempre teve a necessidade de
quantificar coisas, para isso foram criados os sistemas numéricos. Com as repre-
sentações numéricas, torna-se possível realizar tarefas antes complexas de forma
trivial. Entre as várias formas de representações, destacam-se a decimal (com
dez símbolos de representações), a binária (com dois símbolos) – amplamente
utilizada nos computadores, a octal (com oito símbolos) e a hexadecimal (com
dezesseis símbolos). Explicamos como se realizam conversões entre essas quatro
formas de representação, que obedecem a uma única lei: a lei de formação.
Basicamente, a lei de formação atribui pesos para as posições de cada algarismo
HEX: 4 9
OCT: 1 1 1
BIN: 1 0 0 1 0 0 1
DEC: 64 32 16 8 4 2 1 = 73
(Devemos somar os valores decimais somente onde o valor em binário é
equivalente a 1).
Se você conseguiu resolver essas atividades, significa que compreendeu os
sistemas de representação numérica de base 2, 8, 10 e 16 e suas conversões,
que são os objetivos desta aula.
GATES, Bill. A estrada do futuro. São Paulo: Companhia das Letras, 1995.
IDOETA, Ivan V.; CAPUANO, Francisco G. Elementos de eletrônica digital.
28. ed. São Paulo: Érica, 1998.
LOURENÇO, Antonio C. et al. Circuitos digitais. São Paulo: Érica, 1996.
WEBER, Raul F. Fundamentos de arquitetura de computadores. 3. ed. Porto
Alegre: Sagra Luzzatto, 2004.
Aula 4
Operações aritméticas no sistema
binário de numeração
4.2.1 Complemento de 1
Outra maneira de representar números binários é o complemento de 1. Para
encontrar o valor simétrico de um número binário na notação complemento de
1, basta inverter todos os bits que o compõem, ou seja, onde for 0 substitui por
1, e onde for 1 substitui por 0. Por exemplo:
• 0001 = 1, invertem-se todos os bits e tem-se 1110 = –1;
• 0101 = 5, invertem-se todos os bits e tem-se 1010 = –5.
Essa notação também descreve um intervalo de representação simétrico. Ela
tem a mesma desvantagem de apresentar dois valores diferentes para o zero. A
figura dois, a seguir, apresenta os valores em complemento de 1 e o seu corres-
pondente em decimal.
4.2.2 Complemento de 2
Com a finalidade de encontrar um intervalo de representação que tenha
apenas um valor para zero, foi desenvolvida a notação complemento de 2.
Para se chegar à representação em complemento de 2, faz-se o complemento
de 1 (ou seja, invertem-se todos os bits do número) e soma-se um ao resultado.
Por exemplo:
Saiba mais
PRIMEIRO SEGUNDO
RESULTADO DA SUBTRAÇÃO
OPERANDO OPERANDO
0 0 0
0 1 1, vai 1 para ser subtraído no dígito seguinte
1 0 1
1 1 0
* * *
14 = 1 1 1 0
–7 = 0 1 1 1
7= 0 1 1 1
7 = 00111
2 = 00010
7 – 2 => 00111 – 00010 => 00111 + (11101 + 00001) => 00111 + 11110 => 100101
1 0 1 1 Multiplicando
X 1 0 1 0 Multiplicador
0 0 0 0
+ 1 0 1 1
+ 0 0 0 0
+ 1 0 1 1
1 1 0 1 1 1 0
4.7.2 Multiplicação
Para se realizar uma multiplicação, primeiramente verifica-se se uma das
mantissas a operar é zero; caso afirmativo, o resultado é zero;
Se não houver zeros:
• some os expoentes;
• multiplique as mantissas;
• normalize o resultado.
4.7.3 Divisão
Para se realizar uma divisão, primeiramente verifique se uma das mantissas
a operar é zero; caso afirmativo:
• se o divisor for zero, é impossível e dispara uma exceção de divisão
por zero;
• se o dividendo for zero, o resultado será igual a zero;
0 1 1 1 0 0 1 1
(vai um) 1 1 1 1 1 1
0 1 1 1 0 0 1 1
+ 0 1 1 1 0 1 0 1
1 1 1 0 1 0 0 0
Anotações
Aula 5
Classificação de software
Saiba mais
Como você viu, o acesso ao código fonte é um dos pilares para a caracteri-
zação de um software livre. Isso não significa que não seja comercial, muito pelo
contrário. A idéia de se ganhar dinheiro com software livre não está na venda de
produtos fechados, mas sim na venda de serviços de qualidade que estão, a todo
o momento, expostos, sendo colocados à prova e ao julgamento da comunidade
(MOLINARI, 2007).
Um software, quando se diz livre, geralmente está regido pela GPL (General
Public License), que consiste na designação da licença para software livre criada
por Richard Stallman no final da década de 1980, regido pela Free Software
Foundation. É utilizado por grandes projetos, como o do sistema operacional
Linux (FSF, [s.d.]). Assim essa vertente da classificação de software pode ser divida
em duas subdivisões, que são: Open Source e Livre Comercial, tratados a seguir.
Lembre: nem sempre um software gratuito é livre, e nem todo software livre deixa comple-
tamente de ser comercial.
Saiba mais
Anotações
Aula 6
Noções básicas de redes de
computadores e banco de dados
Para o aprendizado desta aula, é necessário que você tenha força de vontade
para conhecer novas tecnologias. Por isso procure saber mais sobre o que será
falado aqui em sites relacionados com estas duas áreas: redes de computadores
e bancos de dados.
Saiba mais
Podemos observar que o meio de transmissão entre cada uma dessas interli-
gações de computadores é diferenciado, como veremos na seção a seguir.
Saiba mais
Saiba mais
Saiba mais
Aula 7
O profissional de informática
Saiba mais
Saiba mais
c) Analista de sistemas
É responsável pelo levantamento das necessidades do cliente e pela
elaboração de um modelo conceitual do sistema a ser desenvolvido. É o
projetista de sistemas. Fazendo-se analogia com engenharia civil, esse
profissional projeta a “planta” dos sistemas, indicando detalhes técnicos
e algoritmos.
d) Auditor de sistemas
É o profissional encarregado em auditar sistemas e redes corporativas,
identificar fraudes e outros tipos de irregularidade, além de analisar
políticas de uso e de segurança.
e) Programador Web
É o profissional responsável pelo desenvolvimento de aplicações para
Web , em termos de implementação de software. Sua principal atividade
é o desenvolvimento de aplicações para internet e intranets, além de
sítios de comércio eletrônico, por exemplo.
f) Webmaster
É o responsável pela estrutura, projeto e gerência de aplicações Web,
desde equipes envolvidas com essas aplicações até a infra-estrutura.
Esse projeto de lei, mesmo com pouco tempo, é tido como polêmica e, diante
disso, a SBC se posicionou por meio de uma correspondência para o Senado
Federal. Veja o conteúdo completo do fato exposto pela SBC (2008, [s.p.]):
atenta aos recentes acontecimentos a respeito do Projeto de Lei
607/2007, que trata da Regulamentação da Profissão, a SBC enviou
correspondência para a Senadora Patrícia Saboya, Presidente da
Comissão de Assuntos Sociais, solicitando Audiência Pública.
Em sua correspondência, a SBC justificou o pedido de Audiência
Pública devido à existência de opiniões diversas e muito diver-
gentes e que, nessa audiência, os diversos pontos de vista, tanto
da SBC quanto de outras organizações sociais, poderão ser
apresentados e debatidos amplamente, possibilitando um melhor
encaminhamento do assunto por parte dos Senadores.
Anotações
Equipe EADCON
Coordenador Editorial William Marlos da Costa
Apresentação
Procuramos apresentar os conteúdos por meio de uma linguagem
simples, sem, contudo, descuidar das reflexões teóricas, tão necessárias
à compreensão da realidade. Assim, você deverá compreender mais facil-
mente este assunto, estando pronto para se posicionar como um profissional
de informação, capaz de interagir e dialogar interdisciplinarmente com as
demais áreas da sociedade e não simplesmente imergir em conceitos pura-
mente computacionais.
Estruturamos nossas aulas da seguinte forma: primeiramente, eviden-
ciamos os condicionantes históricos que propiciaram o surgimento da socio-
logia. Logo após, mostramos as transformações pelas quais a sociedade
passou, desde a Revolução Industrial até o surgimento da sociedade da infor-
mação. Nesta sociedade, cada setor é influenciado pela informatização,
assim procuramos evidenciar as alterações no cotidiano dos cidadãos devido
aos impactos das Tecnologias da informação e da Comunicação (TIC). Em
seguida, procuramos analisar as implicações culturais do desenvolvimento
das tecnologias digitais de informação e de comunicação. Também nos preo-
cupamos em descrever os novos desafios exigidos pelo mercado de trabalho
da sociedade do século XXI. Por fim, buscamos suscitar algumas discussões
sobre a ética e exclusão digital.
Desejamos sucesso na disciplina e em todo o curso, lembrando-lhe
que o material aqui apresentado é uma pequena parte, diante da infi-
nidade de possibilidades de aprendizagem que o mundo atual lhe
oferece. Bons estudos!
Prof.ª Eleusa Maria Leão
Prof. Marcelo Ribeiro de Oliveira
EMENTA
Fundamentos de sociologia. Impactos da informática sobre a sociedade.
Mercado de trabalho e a situação atual da informatização da sociedade
brasileira nos seus vários setores. O profissional de informática e a ética
profissional. O futuro da informática e da sociedade.
Plano de Ensino
OBJETIVOS
• Possibilitar o exercício do espírito crítico e reflexivo a respeito
das questões éticas, políticas, sociais e econômicas surgidas na
Sociedade da Informação.
• Identificar as principais características da sociedade baseada no
paradigma da informação e comunicação.
• Possibilitar a reflexão sobre os fundamentos teóricos que embasam o
uso da informação e a aplicação dela e das tecnologias no mercado
de trabalho global, bem como na atual sociedade brasileira.
CONTEÚDO PROGRAMÁTICO
• Fundamentos de sociologia
• Impactos da informática sobre a sociedade
• Mercado de trabalho e a nova economia global
• Situação atual da informatização da sociedade brasileira
• O profissional de informática
• O futuro da informática
BIBLIOGRAFIA BÁSICA
LIMA, Frederico O. A sociedade digital: o impacto da tecnologia na sociedade,
na cultura, na educação e nas organizações. Rio de Janeiro: Qualitymark,
2000.
RUBEN, Guilhermo; WAINER, Jacques; DWYER, Tom. Informática, organizações
e sociedade no Brasil. São Paulo: Cortez, 2003.
SCHAFF, Adam. A sociedade informática: as conseqüências sociais da segunda
revolução industrial. São Paulo: Brasiliense, 2001.
BIBLIOGRAFIA COMPLEMENTAR
CASTELLS, Manuel. A sociedade em rede. 9. ed. São Paulo: Paz e Terra, 2006.
MASIERO, Paulo César. Ética para computação. São Paulo: Edusp, 2001.
ROVER, Aires José. Direito, sociedade e informática: limites e perspectivas da
vida digital. Florianópolis: Fundação Boiteux, 2000.
Aula 1
Fundamentos de Sociologia
passava ao longo do século XIX (mudanças estas que vinham ocorrendo desde
o final da Idade Média, como já comentamos), por meio de métodos diversos.
Portanto, estes pensadores analisaram, por meio de perspectivas diferentes, a
mesma realidade, a sociedade capitalista.
Vamos agora conhecer um pouco sobre cada um deles, deixando claro que
todos procuram entender como se dá a relação indivíduo-sociedade.
• Émile Durkheim (1858-1917), teórico francês, discípulo de Comte, foi o
primeiro a buscar desenvolver um método e definir o objeto de estudo
da sociologia.
Durkheim buscou analisar a relação indivíduo-sociedade tendo como
ponto de partida a força que a sociedade exerce sobre o indivíduo.
Para ele, “a sociedade é um conjunto de normas de ação, pensamento
e sentimento que não existem apenas nas consciências dos indivíduos,
mas que são construídas exteriormente (grifo do autor), isto é, fora das
consciências individuais” (TOMAZI,1998, p. 18). Portanto, segundo
este autor, ao viver em sociedade, os homens se defrontam com uma
série de normas e regras de conduta que não foram criadas por eles,
mas que lhes são impostas, de modo que o não cumpri-las implica algum
tipo de sanção. Várias situações do nosso dia-a-dia servem para ilustrar
o que esse teórico nos aponta: o modo de vestir, a imposição da língua
nacional, o cumprimento das leis, evidenciam a pressão que a sociedade
faz sobre o indivíduo, adaptando-o ao que a sociedade julga como
certo. Um outro exemplo é o uso dos avanços tecnológicos nas transa-
ções comerciais, tais como a Internet. Na perspectiva durkheimiana, os
empresários podem, ou não, se utilizar destas ferramentas, mas, caso
não o façam podem sofrer uma série de problemas que tornarão inviá-
veis seus negócios.
• Max Weber (1864-1920), teórico alemão, procurou analisar a relação
indivíduo-sociedade, partindo do indivíduo, centrando seus estudos nas
ações individuais. Para Weber, a sociedade deve ser compreendida a
partir da análise das ações individuais, ou seja, segundo ele, os indiví-
duos fazem escolhas, na medida em que atribuem significado às suas
ações. Dessa forma, somente iremos entender as ações individuais se
identificarmos os motivos que levam os indivíduos a agir. Portanto, para
Weber, a sociedade não é algo superior ou exterior ao individuo, mas
um conjunto de ações reciprocamente referidas. Assim, se na perspec-
tiva durkheimiana, um empresário adota certo uso de tecnologia em
virtude da pressão que a sociedade exerce sobre ele, na concepção
weberiana, é o indivíduo, que motivado por valores, razão, estados
emocionais ou tradição, faz as escolhas que julgar necessárias e mais
produtivas (TOMAZI, 1998).
Saiba mais
2. Nesta aula você teve oportunidade de entrar em contato com as teorias dos
clássicos da sociologia. Procure demonstrar, na forma de texto, as principais
diferenças entre estes autores.
Na atividade um, com certeza, você deve ter dito que esta revolução
provocou profundas transformações em toda a sociedade européia, face
ao avanço das tecnologias. Deve também ter evidenciado que as máquinas
passaram a substituir o trabalho humano e que as terras e ferramentas concen-
traram-se nas mãos dos burgueses, provocando a acumulação de riquezas
e convertendo grandes massas humanas, oriundas do meio rural, em meros
trabalhadores despossuídos. Assim, você deve ter afirmado que a revolução
industrial criou um abismo entre os que detiam os meios de produção e os assa-
lariados. Com certeza você argumentou que toda esta situação de insatisfação
levou trabalhadores e teóricos a questionar tal realidade, contribuindo assim,
para o surgimento da sociologia.
Na atividade dois, você acertou a questão caso tenha dito que esses teóricos
se diferenciam bastante na forma como analisam a relação indivíduo-sociedade.
Você deve ter apontado que Emile Durkheim faz todas as suas análises partindo
da força que a sociedade exerce sobre o indivíduo , ao passo que Max Weber
tem como ponto de partida as ações sociais, ou seja, o indivíduo fazendo esco-
lhas. Já Karl Marx, desenvolve sua teoria tomando como elemento-chave a forma
com os homens se relacionam para produzir.
Na atividade três, você acertou caso tenha escolhido a letra (a). Somente
estão corretas as assertivas I e II. A assertiva três está incorreta, pois os ilumi-
nistas buscavam explicar os problemas sociais de maneira racional e objetiva,
fugindo dos posicionamentos normativos e finalistas, comuns aos pensadores
medievais e da Antiguidade.
Na atividade quatro, se você escolheu a letra (d), acertou. Durkheim ressalta,
em sua teoria, a força que a sociedade exerce sobre o indivíduo, por meio da
imposição de normas e regras de conduta. Já Weber faz o contrário: são as
escolhas individuais que serão observadas. E Marx faz todas as suas análises
evidenciando a maneira como os homens se relacionam para produzir.
Anotações
Aula 2
A sociedade da informação
Para acompanhar esta aula, você deve analisar os impactos provocados pela
utilização das tecnologias tanto nas sociedades industriais, quanto nas desenvol-
vidas sob o paradigma da informação. É preciso entender o modo como o conheci-
mento passa a ser ofertado no decorrer da evolução tecnológica pela qual passou
e, naturalmente, ainda passará. Esta é de fundamental importância para reflexão
sobre a rápida mudança de idéias pela qual a sociedade passa em função do
nível de avanço tecnológico já alcançado. Este conhecimento pode ser adquirido
a partir da leitura da bibliografia básica e complementar desta disciplina.
Saiba mais
Saiba mais
Saiba mais
1. Nos dias atuais, estamos rodeados de pequenos detalhes tecnológicos que nos
configuram participantes de uma sociedade alterada pela tecnologia. Cite,
explicando, alguns destes detalhes alteradores de nosso cenário social.
IV. A flexibilização, que faz com que tecnologias antigas sigam a tendência
de se fundirem à tecnologia da informação.
V. A convergência de tecnologias denota a grande capacidade de configu-
ração e reconfiguração inerente a essa sociedade.
corretas. A afirmativa II está errada, pois o novo meio tecnológico molda prati-
camente todos os processos da vida dos cidadãos. Também as afirmativas IV e
V estão incorretas, pois a definição da alternativa (IV) explica, na realidade, a
convergência enqua nto a definição da alternativa (V) explica a flexibilização.
Se você conseguiu responder corretamente as atividades, então os nossos
objetivos nesta aula foram atingidos.
CARMO, Paulo Sérgio do. O trabalho na economia global. São Paulo: Moderna,
1998.
CASTELLS, M. A questão urbana. Rio de Janeiro: Paz e Terra, 1983.
______. Fim de milênio: a era da informação – economia, sociedade e cultura.
4. ed. São Paulo: Paz e Terra, 2007a. v. 3.
______. A sociedade em rede – a era da informação: economia, sociedade e
cultura. 10. ed. São Paulo: Paz e Terra, 2007b. v.1.
GREENSTEIN, M.; FEINNAN, T. Electronic commerce: security, risk management
and control. Boston: McGraw-Hill, 2000.
HALL, Stuart. A identidade cultural na pós-modernidade. 6. ed. Rio de Janeiro:
DP&A, 2001.
Revolução Industrial. Disponível em: <http://www.algosobre.com.br/historia/
revolucao-industrial.html>. Acesso em 03 ago. 2008.
Anotações
Aula 3
Situação atual da informatização da
sociedade nos seus vários setores
Para acompanhar esta aula, você precisa saber o conteúdo das aulas
passadas, que apresentaram uma visão histórica dos impactos da informática
sobre a sociedade. Além disso, é importante que você analise a sociedade atual
para identificar como as tecnologias da informação e comunicação têm impac-
tado a vida das pessoas.
Agora, tente comparar este estilo de vida com um estilo à moda antiga: o
cidadão acorda com o canto do galo, levanta cedo, pois a viagem será a pé
e será longa: a vila aonde ele irá trabalhar fica à 10km de onde mora, (2h de
caminhada), não poderá levar muito peso além dos 10Kg de produtos que levará
para o outro vilarejo. Ele se despede dos seus e vai ao trabalho. Ao chegar lá,
trabalha em contato direto com seus clientes, compradores de seus produtos.
Logo ele terá que voltar e o trabalho é bastante “corrido”, pos isso, não pode
anotar o nome dos clientes, apenas lembrar-se daqueles com quem tem mais
contato e talvez com quem almoce ao meio dia, e será muito difícil se encon-
trarem em outro lugar a não ser onde ele está agora. No fim da tarde é hora de
voltar: após duas horas de caminhada (que bom que não choveu!) seguidas de
um jantar e uma conversa com a família, a cama lhe espera. Boa noite.
Veja que, curiosamente e incrivelmente, o cidadão do primeiro caso pode
ser considerado um super-herói, se comparado com o cidadão do segundo
caso: possui supervelocidade para viajar grandes distâncias, superaudição e
supervoz para se comunicar com pessoas a centenas e milhares de quilômetros
de distância, supermemória para se lembrar de muitas informações de prati-
camente todos os seus contatos, superpercepção para prever o tempo e assim
se prevenir das intempéries naturais. Como todo bom super herói, o cidadão
impactado pelas tecnologias da informação já não percebe que todas estas
inovações lhe conferem estes “super poderes”: convive com elas como se fossem
extensões de seu corpo.
Possuir “super poderes” pode ter suas desvantagens. Explico: poder viajar
pelo mundo sem sair de casa a partir da internet tem causado o aumento do
individualismo e uma introspecção do cidadão, de forma a não se sociabi-
lizar com os entes mais próximos. Isso significa que um adolescente poderá
ter centenas de contatos espalhados pelo mundo, porém nunca ter um contato
físico com estes e, ao mesmo tempo, nunca ter contato físico com seus vizinhos
e outros cidadãos próximos, ou seja, aqueles que fisicamente estariam dispo-
níveis para um contato não virtual. Os cidadãos “super-heróis” de hoje (todos
aqueles que são impactados pela tecnologia da informação) tem um dia-a-dia
repleto de compromissos e tarefas profissionais que duram o dia todo, tais
quais aquelas citadas no exemplo do palestrante, dado anteriormente. Logo,
o contato físico e casual é minimizado. Por causa de nossas muitas atividades,
acabamos por não conhecer nossos vizinhos, principalmente se morarmos em
grandes centros urbanos, onde todos acordam muito cedo para ir ao trabalho
e retornam muito tarde, já na hora de dormir. Pessoas de uma mesma rua,
ou até mesmo um mesmo prédio, têm dificuldades de se conhecer e talvez
nunca o façam. Os estabelecimentos comerciais já estão centrados em atendi-
mento rápido e eficaz. Acabamos por não encontrarmos, nos grandes centros,
aquele famoso “Manoel da padaria” que sempre bate um bom papo com os
fregueses. Uma vez que “tempo é dinheiro” e a quantidade de clientes em
Saiba mais
As crianças, em especial, por serem mais jovens, devem ser orientadas sobre
como as tecnologias poderão servir de base para o aprendizado e, da mesma
forma, educar, alertando-as para os perigos do mau uso da internet e outras
formas nocivas de uso das tecnologias. Assim, é possível afirmar, também, que o
governo que pretender democratizar a informação precisará planejar maneiras
de alcançar toda a extensão de sua jurisdição, usando para isso várias mídias,
se necessário, a fim de alcançar o maior número possível de cidadãos.
Anotações
Aula 4
Cibercultura: a interconexão
Para acompanhar esta aula, é importante que você tenha visto as aulas ante-
riores e identificado as transformações pelas quais as sociedades têm passado,
face aos impactos provocados pela revolução industrial e tecnológica. É preciso
também que você analise e pense a respeito de como o novo paradigma age
sobre a vida das pessoas. Será que todas as mudanças econômicas ocorridas
modificam a cultura dessa sociedade? Existe uma cibercultura? Se posicione e
reflita sobre este novo contexto em qual a humanidade está inserida.
Para Castells (2007), surge uma nova sociedade quando e se uma transfor-
mação estrutural puder ser observada nas relações de produção, de poder e de
experiência, de modo que estas transformações modifiquem substancialmente as
formas sociais de espaço e tempo e ao aparecimento de uma nova cultura. Na
aula passada, discutimos as principais transformações econômicas ocorridas na
sociedade, face às inovações tecnológicas. Verificamos que o modo de viver das
pessoas (isso inclui você e eu) tem sido transformado com tantos avanços tecno-
lógicos (Orkut e outras redes sociais virtuais, sms, telemedicina, teletrabalho,
e-commerce, youtube, ensino a distância). O novo paradigma sob o qual a
sociedade está organizada age diretamente no modo como as pessoas se rela-
cionam, seja em nível pessoal (amizades, namoro, encontros e outras reuniões
sociais de caráter pessoal), seja em nível de lazer (games massivos online, chats,
fã-clubes virtuais, fóruns sobre esportes, etc.) e nas relações profissionais (tele-
conferência, teletrabalho, telemedicina, etc.) ou em qualquer outro nível social.
Nesta aula, analisaremos como tais mudanças estruturais afetaram as supe-
restruturas, levando ao aparecimento de uma nova cultura, a cibercultura.
Saiba mais
Ainda segundo Castells (2003), o uso do e-mail aumenta a vida social com
a família e os amigos, e amplia os contatos sociais. Além disso, evidencia que
as pesquisas deixam claro que usuários da Internet tendem a ter redes sociais
maiores que os não-usuários.
A citação anterior nos permite afirmar que estamos vivendo uma época em
que está presente uma “noção de espaço, em que o físico e virtual se influenciam
um ao outro, lançando as bases para a emergência de novas formas de sociali-
zação, novos estilos de vida e novas formas de organização social” (CARDOSO
citado por CASTELLS, 2003, p. 110).
Castells citando Waller (2000) afirma que a Internet está sendo usada para
redefinir as relações de família, numa sociedade em que as pessoas estão expe-
rimentando novas formações familiares.
A partir do que foi exposto acima, você pode perceber que a prática do
individualismo em rede parece estar redefinindo as fronteiras e o significado de
instituições tradicionais de sociabilidade, entre elas, a família. Bem como está
também levando os indivíduos a construírem formas de sociabilidade em torno
de interesses específicos, na medida em que podem participar de certas comuni-
dades virtuais no momento e da forma que querem.
Saiba mais
Fonte: <
<http://veja.abril.com.br/180407/p_096.shtm>
http://veja.abril.com.br/180407/p_096.shtm>ll.
http://veja.abril.com.br/180407/p_096.shtm>
2. Gilberto Gil em sua música A Rede nos diz que “criar meu web site, fazer
minha home page, com quantos gigabytes, se faz uma jangada, um barco
que veleje”. Construa um pequeno texto discutindo como os termos da internet
estão disseminados na sociedade e como isto faz parte da cibercultura.
Na atividade um, você deve ter dito que as tecnologias e o uso das mesmas
não podem ser compreendidas isoladamente. Tanto suas descobertas, inova-
ções quanto o uso estão sempre ligadas a um contexto social e cultural. Assim,
para analisarmos as principais questões que permeiam a sociedade atual, não
podemos somente olhar para as transformações e inovações técnicas, mas pensar
a sociedade como um todo, na qual aspectos técnicos, políticos, econômicos e
sociais estão extremamente entrelaçados. Assim, é inconcebível pensarmos as
tecnologias como (ordem das causas) e a cultura (sofredora dos efeitos). Nesse
sentido, são os mesmos seres humanos que inventam, produzem, utilizam as
técnicas e fazem a interpretação das mesmas.
Na atividade dois, você deve teve ter dito que a cibercultura é um conjunto de
técnicas (materiais e intelectuais), de práticas, de atitudes, de modos de pensamento
e de valores que se desenvolvem juntamente com o crescimento do ciberespaço.
Você deve ter afirmado que estamos vivendo numa época em que o físico e o virtual
se influenciam um ao outro, lançando as bases para a emergência de novas formas
de socialização, novos estilos de vida e novas formas de organização social.
Na atividade três, a resposta correta é a (a), pois o que vimos em nossas
aulas é que, de modo geral, o corpo de dados não sustenta a tese de que o uso
da Internet leva a menor interação social e maior isolamento social. A letra (b)
está incorreta, na medida em que contraria totalmente o que foi dito na letra a.
As letras (c) e (d) estão incorretas. De modo geral, as pesquisas afirmam que a
internet pode provocar o isolamento social, desde que seu uso se dê acima de
um limiar que permita a conciliação com outras atividades.
Na atividade quatro, a resposta certa é a (d). Diretamente, a digitalização
da informação pode ser aproximada da virtualização. A cibercultura é um
conjunto de técnicas (materiais e intelectuais), de práticas, de atitudes, de modos
de pensamento e de valores que se desenvolvem juntamente com o crescimento
do ciberespaço. Segundo Lévy, a cibercultura, diferentemente de outras formas
culturais anteriores, expressa o surgimento de um novo universal que se constrói
sobre a indeterminação de um sentido global qualquer.
Anotações
Aula 5
Mercado de trabalho
Saiba mais
Saiba mais
Saiba mais
Figura 2 Internet: portas abertas para Na visão de Peter Drucker (2000), se, por
novas oportunidades. um lado, a chegada da ferrovia transformou a
maneira como o homem percebia a distância,
transformando profundamente economia geográ-
fica (encurtando o mundo), a telemática (teleco-
municações + informática) está “eliminando” defi-
nitivamente a distância (planificação do mundo
em um mapa de nós interconectados) e criando
uma única economia e um único mercado. Por
isso, empresas e pessoas precisam criar idéias,
já considerando a ausência de uma unidade de
lugar, devido ao novo paradigma ser marcado
pela informação comunicada rapidamente pela
grande rede. Assim, os novos negócios que
surgem podem ser definidos como negócios da
era digital. Provedores de internet, revendedores
de domínios e serviços de hospedagem de sítios,
servidores de jogos online, enciclopédias virtuais
(você se lembra do fato de que, ter uma enci-
clopédia, composta por vários e grossos livros
de capa dura, em casa, era algo chique?), agendas online,
enfim, tudo que puder ser informatizado e disposto na rede torna-se
um produto lucrativo. O ambiente global torna-se mais competitivo e
cruel para algumas empresas que não consigam se contextualizar; porém, o
leque de opções é vasto e existem inúmeros espaços a serem explorados por
empresa, pessoas e por você, aluno!
A internet é cada dia mais usada para interação entre diversas catego-
rias de pessoas, empresas e governos, como na lista anterior. A partir dessas
possibilidades, podemos pensar: será que as cidades deixarão de existir, com
o avançar dessas relações cada vez mais virtuais? Tal pensamento causou
o chamado mito do fim das cidades. Castells (2003, p. 185) declara que o
planeta inteiro está sendo “reorganizado em torno de gigantescos nós metro-
politanos, que absorvem uma proporção crescente da população urbana”. Ele
também afirma (2002, p. 502) que “um conjunto de nós interconectados forma
uma rede” e
nessa rede, nenhum lugar existe por si mesmo, já que as posições
são definidas pelos intercâmbios de fluxos da rede. Conseqüente-
mente, a rede de comunicação é a configuração espacial
fundamental: os lugares não desaparecem, mas sua lógica e
seu significado são absorvidos na rede. A infra-estrutura tecno-
lógica que constrói a rede define o novo espaço como as ferro-
vias definiam as ‘regiões econômicas’ e os ‘mercados nacionais’
na economia industrial; ou as regras institucionais de cidadania
específicas das fronteiras (e seus exércitos tecnologicamente avan-
çados) definiam ‘cidades’ nas origens mercantis do capitalismo e
da democracia.
Anotações
Aula 6
Cyberprofissional,
cyberoportunidades
Para acompanhar esta aula, você deve estar por dentro dos assuntos estu-
dados nas aulas passadas. Entender às exigências do mercado de trabalho
significa estar de “guarda alta”, preparado para encarar os desafios que o
mesmo nos propõe a cada dia. Saiba que o mercado de informática está de
portas “escancaradas”. Hoje, praticamente, não há risco de desemprego para o
profissional da informação, mas, os grandes salários e menores cargas horárias
estarão reservados para aqueles que melhor exercerem suas competências, seu
nível de empregabilidade, como profissional da informação.
Saiba mais
Saiba mais
Muitos que vêem a área de TI como sendo enfadonha e complicada, tornando-se uma
profissão exclusivamente para “Nerds
“Nerds
Nerds”,
”, acabam perdendo uma ótima oportunidade de
qualificação e emprego, além de enganarem-se profundamente no quesito da interdiscipli-
naridade da TI: é possível associar a ela as mais diversas áreas, desde a automação da
fabricação de palitos de fósforo, cultura de abelhas, seqüenciamento genético e estudos
de curas para doenças, previsualizações do “antes e depois” de salões de beleza e medi-
cina estética, jogos eletrônicos e sistemas de comércio eletrônico de utensílios e enfeites
feitoss a partir do capim dourado (produto típico do estado do Tocantins) às viagens
feito
submarinas e espaciais, com direito a fotos das profundezas dos oceanos, da superfície
lunar e marciana, bem como dos demais planetas que forem explorados ou capturados
pelas lentes de satélites computadorizados. De acordo com Cardoso (2008), a palavra
“desemprego” não existe no dicionário da tecnologia da informação. Afirma, ainda, para
felicidade de muitos candidatos a um cargo público, que a relação entre candidato vaga
é de um para um. O autor enfatiza a agressividade das empresas de TI, no momento
de buscar um novo talento. Por exemplo: a grande companhia IBM, desde 2007, firma
parcerias com escolas do ensino médio para que estas possam incluir em seus currículos
aquelas disciplinas que abordam as suas necessidade de mão-de-obra.
Ter uma relação de emprego de “um para um” significa, para o profissional
de TI, risco praticamente inexistente de desemprego. Você, talvez, já possa cons-
tatar essa “feliz” realidade, por exemplo, quando alguém, sabendo que você
está cursando TADS (Tecnologias em Análise e Desenvolvimento de Sistemas),
logo se aproximando, pergunta-lhe se você pode desenvolver um “programinha”
para controlar tal processo (padaria, escolinha, loja de confecção, “home page”,
etc.). Tal fenômeno é bom para o trabalhador, servindo de incentivo para que se
recicle e continue estudando e se aperfeiçoando nas áreas de TI, mas, também,
reflete uma necessidade do país de desenvolver-se nesta área.
Na área privada, uma gama enorme de oportunidades existem, sítios de
grandes empresas como Google, IBM, Microsoft, Sun, Xerox, etc., chegam até
fazer propaganda para atrair o profissional até o seu domínio. Grupos de discussão
sobre tecnologias, como o Java-br, ou de desenvolvedores C++, Delphi, PHP,
“.Net” e outras tecnologias estão recheados de informações sobre a tecnologia
e, freqüentemente, propostas de emprego em diversas empresas que oferecem,
até urgentemente, vagas para profissionais de TI que dominam a tecnologia em
discussão no grupo. Sobre este aspecto, Tossulino (2008) declara que, na reali-
dade, é o mercado que se encontra em rápido crescimento e, por isso, requer,
cada vez mais, profissionais qualificados, experientes e efetivos. O autor também
se refere à concorrência e à competição, afirmando que, atualmente, estas não
se dão apenas no sentido de se buscar mais clientes, mas, também, de se buscar
profissionais. Assim, as empresas que oferecem a melhor política de benefícios,
bons ambientes e condições de trabalho, plano de cargos e salários e uma ótima
remuneração são aquelas que ganham a disputa pelos melhores profissionais.
Mesmo assim, muitos jovens “cyberempreendedores” preferem abrir seu próprio
negócio, a ter um emprego em empresas desse porte, e, assim, causar sua própria
disrupção no mercado (lembre-se de nossos estudos sobre os impactos das TIC na
economia). Vale à pena lembrar que grandes empresas nasceram de uma maneira
informalmente conhecida como “fundo de garagem”: Jovens detentores do “cyber-
conhecimento”, com pouco ou nenhum capital, e de índole empreendedora, produ-
zindo seu próprio produto em “secreto” e divulgando-o na hora em que entenderem
estarem prontos para surpreender no mercado. São exemplos de empresas que
nasceram assim: Microsoft, IBM, Cisco. Para não acharem que apenas estrangeiras
conseguem tal feito, citamos aqui a empresa brasileira Locaweb (www.locaweb.
com.br), hoje, grande empresa de hospedagem de sites. Ela começou em 1998
com duas pessoas e um servidor. Hoje, é referência em hospedagem de sites com
mais de 500.000 sites hospedados.
Na área governamental, existe enorme demanda por funcionários. Um
emprego público é uma opção bastante visada para pessoas que objetivam uma
carreira segura, sem a possibilidade de “surpresas” financeiras ou para aqueles
que pensam em constituir uma base, um degrau, onde pisarão antes de tentar
iniciativas mais ousadas, sendo, assim, uma sábia opção. No Brasil, milhões de
pessoas realizam concursos públicos, sendo grande parte delas, profissionais da
informação. A concorrência por vagas públicas de TI é grande. Queiroz (2008)
refere-se à alta concorrência por cargos de TI, declarando sobre um concurso reali-
zado recentemente, em 2005, da SERPRO – Serviço Federal de Processamento
de Dados, a concorrência era de 23.333 inscritos para 1.980 vagas, ou seja,
11,7 candidatos por vaga. Já na PRODESP – Companhia de Processamento de
Dados de São Paulo, em seu processo de seleção realizado em 2004, a concor-
rência foi de 30 pessoas por vaga, aproximando-se da disputada concorrência
do vestibular de medicina da USP (32,43 candidatos por vaga).
A figura a seguir mostra um panorama de algumas das muitas oportuni-
dades de TI na área pública, exemplificando algumas instituições que oferecem
vagas para diversos cargos, acompanhados de suas remunerações.
Anotações
Aula 7
O futuro da sociedade:
algumas questões
Para participar e compreender bem esta aula, é importante que você pare
e reflita sobre os usos das tecnologias da informação e comunicação, notada-
mente, às questões relativas ao uso da Internet. É importante que você reflita
sobre as questões éticas que permeiam essa sociedade. É necessário também
que você analise as condições de acesso à Internet, bem como as ações que têm
sido desenvolvidas para possibilitar a inclusão digital.
autores, discutir sobre estes assuntos. Assim, optamos por estruturar nossa
aula da seguinte forma: inicialmente, discutiremos sobre a ética; em seguida,
faremos algumas análises a respeito da inclusão e exclusão digitais e finaliza-
remos com algumas proposições de como as transformações econômicas têm
afetado o caráter das pessoas.
Saiba mais
forma, quando um cidadão não tem acesso às TIC, não se trata de ele simples-
mente não ter acesso a uma tecnologia, e sim a uma instituição social, resul-
tando, portanto, em exclusão social, somada às outras formas de desigualdade
e exclusão já existentes. Portanto, esta questão, aparentemente simples, torna-se
complicada se a submetermos a uma análise mais atenta.
Com relação ao acesso à Internet, que sem dúvida tem aumentado bastante
nos últimos anos, Castells (2003) afirma que há diferenças de acesso de acordo
com a renda da família, grupos étnicos, nível educacional e com o fato de ter ou
não deficiências físicas. Há também uma significativa disparidade no acesso à
Internet entre crianças de diferentes grupos de renda, o que poderá ter conseqü-
ências consideráveis para o futuro.
Segundo Albino (2008), pesquisas feitas pelo Instituto Brasileiro de Geografia
e Estatística (IBGE), em 2006, evidenciam a gravidade da exclusão digital no
Brasil e mostram que, apesar de todo o desenvolvimento tecnológico, as pessoas
das classes D e E, que correspondem à metade da população brasileira, não têm
acesso ao computador. Apenas 12,46% da população brasileira tem acesso
a computadores e somente 8,31% estão conectados à Internet (IBGE, 2006).
Ainda segundo ele, a maioria destes poucos incluídos digitais, cerca de 97%,
se concentra na área urbana, acentuando ainda mais o desnível e deixando
as zonas rurais praticamente na escuridão digital. Esses percentuais expõem o
cenário de exclusão digital em que vive grande parte da população brasileira.
Para que ocorra um verdadeiro processo de inclusão, há que se reconhecer
que muito mais do que consumidores as pessoas são cidadãos. Na palavras de
Lévy (2007, p. 238),
é preciso favorecer de todas as formas adequadas a facilidade
e a redução dos custos de conexão. Mas o problema do ‘acesso
para todos’ não pode ser reduzido às dimensões tecnológicas e
financeiras geralmente apresentadas. Não basta estar em frente
de uma tela, munido de todas as interfaces amigáveis que se possa
pensar, para superar uma situação de inferioridade. É preciso antes
de mais nada estar em condições de participar ativamente dos
processos de inteligência coletiva que representam o principal inte-
resse do ciberespaço. Os novos instrumentos deveriam servir priori-
tariamente para valorizar a cultura, as competências, os recursos e
os projetos locais, para ajudar as pessoas a participar de coletivos
de ajuda mútua, de grupos de aprendizagem cooperativa.
Nos dias atuais, o mercado é dinâmico demais para permitir que as coisas
sejam feitas do mesmo jeito, ano após ano, ou que se faça a mesma coisa por um
longo tempo. Na opinião de Sennett (2007, p.82), as pessoas “são fortemente
impelidas a interpretar seu trabalho como refletindo sobre si mesmas, como indi-
víduos. O capitalismo de curto prazo corrói o caráter das pessoas, “sobretudo
aquelas qualidades de caráter que ligam os seres humanos uns aos outros, e
dão a cada um deles um senso de identidade sustentável” (SENNETT, 2007, p.
27). Para este autor, a flexibilidade causa ansiedade: as pessoas não sabem os
riscos que serão compensados, que caminhos seguir. O comportamento flexível
que possibilita sucesso aos trabalhadores está enfraquecendo seu caráter de um
modo que não há remédio prático.
Saiba mais
Anotações
Equipe EADCON
Coordenador Editorial William Marlos da Costa
Apresentação
tradução de algoritmos para uma linguagem que o computador possa
entender. Mas, para isso, é preciso conhecer e dominar conceitos importantes
relativos à programação, de maneira geral, e também aspectos da linguagem
utilizada.
Qualidades como atenção, organização e persistência são importantes
para um programador. Essas qualidades em conjunto com o poder e a simpli-
cidade da linguagem C podem fazer com que, ao final desta disciplina,
sejamos considerados programadores, ainda que iniciantes.
Serão abordados nas sete aulas os principais conceitos dessa linguagem
para que, a partir dos conteúdos trabalhados, você possa alçar vôo com as
próprias asas e trilhar os caminhos da programação em linguagem C.
Bom trabalho!
Prof. Carlos Henrique Corrêa Tolentino
EMENTA
Programação em Linguagem C. Estruturas de dados homogêneas e
heterogêneas. Modularização de Algoritmos.
OBJETIVOS
• Introduzir a atividade de programação.
Plano de Ensino
CONTEÚDO PROGRAMÁTICO
• Conceitos básicos da linguagem C
• Operadores
• Estruturas de Controle – Decisão e repetição
• Modularização em C: uso de Funções
• Estruturas de dados homogêneas (vetores e matrizes) e heterogê-
neas (estruturas)
• Manipulação de strings
BIBLIOGRAFIA BÁSICA
DEITEL, H. M.; DEITEL, P. J. Como programar em C. Rio de Janeiro: LTC, 1999.
HERBERT, S. C Completo e Total. São Paulo: Makron Books, 1997.
MIZRAHI, V. V. Treinamento em Linguagem C - Módulos 1 e 2. Rio de Janeiro:
Makron Books, 1993.
BIBLIOGRAFIA COMPLEMENTAR
ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de.
Fundamentos da programação de computadores: algoritmos, Pascal e C/C++.
São Paulo: Pearson Prentice Hall, 2003.
ORTH, Afonso Inácio. Algoritmos e programação com resumo das linguagens
Pascal e C. Porto Alegre: AIO, 2001.
ZIVIANI, Nivio. Projeto de algoritmos: com implementações em Pascal e C.
2. ed. São Paulo: Thomson, 2004.
Aula 1
Introdução à programação
em linguagem C
Esta primeira aula representa o nosso primeiro contato com uma linguagem
de programação real. Para esta disciplina, foi escolhida a Linguagem C. A ativi-
dade de programação pode ser descrita como a transcrição de algoritmos para
uma linguagem de programação que possa ser executada por um computador.
Dessa maneira, um dos requisitos para iniciar a atividade de programação é
estar em dia com a prática no desenvolvimento de algoritmos, como foi estudado
na disciplina de Lógica de Programação.
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890
+-*/\=|&!?#%(){}[]_‘“.,:<>
<tipo_de_dados> <nome_da_variável>;
int x;
int numero1, numero2;
float media; char ch1;
1.2.4 Operadores
• Aritméticos
OPERADOR AÇÃO
+ Soma (inteira e ponto flutuante)
- Subtração ou Troca de sinal (inteira e ponto flutuante)
* Multiplicação (inteira e ponto flutuante)
/ Divisão (inteira e ponto flutuante)
% Resto de divisão (de inteiros)
++ Incremento (inteiro e ponto flutuante)
-- Decremento (inteiro e ponto flutuante)
• Lógicos
OPERADOR AÇÃO
&& E lógico (do inglês AND)
|| OU lógico (do inglês OR)
! NÃO lógico (do inglês NOT)
• Relacionais
OPERADOR AÇÃO
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
== Igual a
!= Diferente de ou “não igual a”
• Atribuição
OPERADOR AÇÃO
Atribui à variável do lado esquerdo o valor do lado direito
=
do operador.
• Operadores de endereços
OPERADOR AÇÃO
& retorna o endereço de uma variável
retorna o conteúdo de uma variável ponteiro, que será vista
*
nas aulas posteriores
Outros operadores importantes serão apresentados em momentos oportunos.
Por enquanto, você pode usar os que já foram apresentados para criar uma
grande quantidade de programas simples em linguagem C.
1.3.1 Bibliotecas
Se observarmos bem, veremos que as palavras reservadas e os comandos
da linguagem C não apresentam alguns recursos básicos de um programa, por
exemplo, comandos de entrada ou saída de dados. Essas funções estão, geral-
mente, disponíveis nas bibliotecas C padrão (SHILDT, 2001). Em outras pala-
vras, as bibliotecas são repositórios de funções que podem ser usadas pelos
programadores para diversos fins, como entrada e saída de dados, cálculos
matemáticos, tratamento de cadeias de caracteres, entre outros.
As bibliotecas são incluídas em um programa por meio de uma diretiva de
compilação, que é um comando enviado para o compilador, fazendo com que as
funções de uma determinada biblioteca fiquem disponíveis para o programador.
Uma biblioteca pode ser incluída em um programa da seguinte maneira:
scanf(“<string de formatação>”,&variável)
ESPECIFICADOR FORMATO
%c char
%e
float em formato exponencial
%E
%g float. C escolhe melhor maneira de exibição entre normal e
%G exponencial
%s string
%p endereço de um ponteiro
%n quantos caracteres a função printf exibiu
b) Leitura de caracteres
Para ler um único caractere do teclado, podemos usar as funções getch( )
ou getche( ), declaradas na biblioteca conio.h. A diferença entre essas duas
funções é que a função getch( ) não apresenta na tela o caractere digitado, e a
função getche( ) apresenta. Veja exemplos de utilização a seguir.
tados são muito importantes para um programa. Para executar essa tarefa, a
linguagem C oferece diversas opções, como a função printf. A sintaxe geral do
comando printf pode ser vista a seguir.
e) Exibindo um caractere
Para exibir um único caractere na tela, podemos usar a função putchar( ),
que está no arquivo de cabeçalho stdio.h. Sua sintaxe é:
putchar(variável)
printf(“Teste”);
Saiba mais
1. Escreva um programa que solicite ao usuário que digite dois valores e apre-
sente na tela a soma, a subtração e a multiplicação desses valores.
2. Qual das alternativas a seguir contém somente palavras que não podem ser
usadas como identificadores?
a) void, int, numero, option c) num1, num2, op, valor1
b) void, int, char, opção d) int, float, if, while
3. Por que não podemos usar duas variáveis com o mesmo nome, mesmo que
tenham tipos diferentes?
4. Qual das alternativas a seguir contém apenas funções para entrada de dados?
a) printf, puts, putchar c) scanf, gets, getch
b) read, write, put d) void, int, char
#include <stdio.h>
int main( )
{
int valor1, valor2, soma, subt, mult;
printf(“\nSoma = %d\n”,soma);
printf(“Subtracao = %d\n”,subt);
printf(“Multiplicacao = %d\n”,mult);
return;
}
Anotações
Aula 2
Estruturas de controle:
condicionais
uma por vez (pelo menos como estudamos até agora). Porém, dependendo dos
valores de entrada de um programa, pode ser que se deseje produzir saídas
diferentes, então um teste condicional é necessário, ou seja, é preciso verificar se
as entradas correspondem a uma ou a outra saída possível para o programa.
Um algoritmo que usa um teste condicional pode seguir rumos diferentes,
como ilustra a figura a seguir.
Saiba mais
2.2.1 If
O comando if é uma estrutura de controle condicional que faz com que,
dependendo de um teste, um trecho do programa seja executado ou não. Veja
a sintaxe do comando, observando os comentários.
#include <stdio.h>
int main( )
{
int x, y;
printf(“digite um valor para x: ”);
scanf(“%d”, &x);
if ( x > y)
{
printf(“x é maior”);
}
return;
}
Observe que existe apenas um único comando dentro do boco if. Nesse
caso, não seria necessário iniciar o bloco com “{“ e fechá-lo com “}”. Isso
somente é realmente necessário quando existe mais de um comando interno
ao bloco. Vamos observar dois exemplos sem muita utilidade prática, mas que,
didaticamente, são adequados para ilustração.
Primeiro exemplo:
...
scanf(“%d”, &n); // leitura de valor para n
scanf(“%d”, &m); // leitura de valor para m
Aqui é realmente necessária a presença dos caracteres “{“ e “}” para aber-
tura e fechamento do bloco if, pois existem dois ou mais comandos internos ao
bloco. Reescrevendo o exemplo que ilustra a Figura 1, temos:
...
if ( x > y) // teste condicional
printf(“x é maior”); // único comando interno
...
2.2.2 If – Else
O comando if pode ser complementado pelo comando else, do inglês: se
não. Dessa maneira, fica especificado um bloco de comandos para ser execu-
tado quando o resultado do teste condicional for verdadeiro, e outro bloco de
comandos para ser executado especificamente quando o teste tiver valor falso.
A Figura 2 a seguir nos ajuda a entender essa afirmação.
...
if ( x > y)
{
printf(“x é maior”);
}
else
{
Vale ressaltar que, assim como o if, o else também pode conter diversos
comandos internos ao bloco e esse bloco deve sempre ser iniciado e finalizado
com “{“ e “}”, respectivamente, quando tiver dois ou mais comandos. Da mesma
forma que o if, se contiver apenas um comando, não é necessário usar “{“ e “}”
para abrir e fechar o bloco de comandos.
...
if ( x > y) // primeiro teste lógico
{
printf(“x é maior”);
}
else
{
if( x == y ) // if aninhado
{
printf(“iguais”);
}
else // else aninhado
{
printf(“x é menor”);
}
}
...
switch( expressão )
{
case constante 1: comandos
break;
case constante 2: comandos
break;
...
case constante n: comandos
break;
}
#include <stdio.h>
int main()
{
int x, y;
char opcao;
printf(“digite o primeiro numero:”);
scanf(“%d”,&x);
printf(“digite o segundo numero:”);
scanf(“%d”, &y);
printf(“escolha uma opcao:\n”);
printf(“1 – soma\n”);
printf(“2 – subtracao\n”);
printf(“3 – divisao\n”);
printf(“4 – multiplicação\n”);
printf(“escolha: “);
opcao = getch();
switch(opcao)
{
case ‘1’: printf(“soma = %d”, x + y);
break;
case ‘2’: printf(“subtracao = %d”, x - y);
break;
case ‘3’: printf(“multiplicacao = %d”, x * y);
break;
case ‘4’: printf(“divisao = %d”, x / y);
break;
}
return;
}
b) if(x < 5)
comando;
else
comando;
d) if(x == 2)
comando;
#include <stdio.h>
int main( )
{
int valor1;
printf(“informe um valor numerico: “);
scanf(“%d”,&valor1);
if( (valor1 % 2) == 0 )
printf(“Numero par\n”);
else
printf(“Numero impar\n”);
return;
}
#include <stdio.h>
#include <conio.h>
int main( )
{
int valor1;
char op;
#include <stdio.h>
#include <conio.h>
int main( )
{
int valor1;
char op;
printf(“informe um valor numerico: “);
scanf(“%d”,&valor1);
printf(“Escolha uma opcao: 1 - quadrado; 2 - cubo”);
op = getch();
switch(op)
{
case ‘1’:
printf(“\n%d ao quadrado = %d\n”, valor1,
valor1*valor1);
break;
case ‘2’:
printf(“\n%d ao cubo = %d\n”, valor1,
valor1*valor1*valor1);
break;
}
return;
}
Anotações
Aula 3
Estruturas de controle: repetição
A não ser que se conheça alguma função nativa da linguagem que implemente
essa operação, será necessário utilizar uma estrutura de repetição. Nesta aula,
estudaremos as estruturas for, while e do-while. Cada uma com características
específicas que podem nos ser úteis em diversas situações. Então, vamos nessa!
3.1.1 For
Na maioria das linguagens de programação, o laço for é caracterizado por
ter uma condição pré-definida que permite determinar a quantidade de vezes que
o corpo do laço será repetido. Em linguagem C, esse tipo de laço oferece uma
flexibilidade maior (SCHILDT, 2001). A sintaxe desse comando é a seguinte:
#include <stdio.h>
int main()
{
int base, expoente, i; // i é a variável de controle
int potencia = 1; // receberá o resultado
printf(“digite o valor da base:”);
scanf(“%d”,&base);
printf(“digite o valor do expoente:”);
scanf(“%d”, &expoente);
3.1.2 While
O while é um laço cuja execução depende exclusivamente de um teste condi-
cional. A sua sintaxe é apresentada a seguir:
while(condição)
{
comandos;
}
A condição é um teste condicional que deve ser satisfeito para que o corpo
do laço seja executado. Note que, sendo um teste condicional, essa condição
pode, também, depender de uma variável de controle, ou ainda de um valor
digitado pelo usuário do programa. Vamos ver um exemplo de sua utilização.
#include <stdio.h>
int main()
{
int num; // declaração de variável
printf(“Digite um numero:”);
scanf(“%d”, &num);
while(num >= 0) // laço e condição de parada
{
printf(“Num ao quadrado = %d:”,num * num);
printf(“Digite um numero:”);
scanf(“%d”, &num);
}
return;
}
#include <stdio.h>
int main()
{
int n1, n2; // declaração de variável
printf(“Digite um numero:”);
scanf(“%d”, &n1);
printf(“Digite outro numero:”);
scanf(“%d”, &n2);
Você já deve ter percebido que esse programa imprime na tela todos os
valores inteiros entre n1 e n2. Note que o usuário informa os dois valores inicial-
mente e, na seqüência, o laço é executado sem a intervenção do usuário.
Assim como o laço for, o corpo do laço while pode não ser executado
nenhuma vez, dependendo do teste que é feito no início. Porém existe um tipo
de laço que sempre executa pelo menos uma vez. São as estruturas de repetição
com teste no final.
3.2.1 Do-While
A sintaxe do comando do-while é a seguinte:
do
{
comandos
}while(condição);
Uma das utilizações mais comuns dos laços com teste no início são os menus
de opção nos quais uma resposta inválida provoca a repetição do menu (SHILDT,
2001). Vejamos e seguinte exemplo.
#include <stdio.h>
int main()
{
int x, y;
char op;
printf(“escolha: “);
op = getch();
switch(opcao)
{
case ‘1’: printf(“soma = %d”, x + y);
break;
case ‘2’: printf(“subtracao = %d”, x - y);
break;
case ‘3’: printf(“multiplicacao = %d”, x * y);
break;
case ‘4’: printf(“divisao = %d”, x / y);
break;
}
return;
}
plicação e ‘4’ para divisão. Depois do laço existe um comando de seleção (switch)
para que uma das operações seja executada. Porém, caso o usuário informe
uma opção diferente daquelas que são esperadas, nenhuma das operações irá
executar. Para evitar essa situação, existe um teste no final do laço que verifica se
a opção informada corresponde a uma das esperadas. O usuário irá digitar nova-
mente a opção até que ela corresponda a uma opção válida para o programa.
Outro detalhe importante é que, ao contrário das outras estruturas de controle
vistas até agora, após a condição no comando do-while, é necessário finalizar
o comando com o “;”.
3.3 Considerações
As estruturas de repetição contêm, assim como as estruturas condicionais,
comandos de desvio de fluxo. Entretanto esses desvios são direcionados a trechos
que se repetem dentro do programa, sendo muito úteis em uma grande quanti-
dade de situações.
Em termos de sintaxe dos comandos de repetição, vale lembrar que, a
exemplo dos condicionais, somente é necessário utilizar os símbolos “{“ e “}”
para abertura e fechamento dos blocos de comandos internos quando esses
blocos contiverem dois ou mais comandos. Vejamos alguns trechos de código
que exemplifiquem essa afirmação.
...
for(i=0; i<15; i++)
printf(“iteração numero %d”,i);
...
...
while ( (x % 2) != 0)
x = x * 2;
...
...
do
n = n +5;
while(n < 50);
Note que esses exemplos são apenas trechos de programas e não podem ser
executados da maneira como foram apresentados. Para que executem normal-
mente, deve-se completá-los de acordo com a estrutura de um programa em
linguagem C apresentado na aula um.
3. Escreva um programa, solicite que o usuário informe valores inteiros até que
seja informado um valor negativo e apresente a soma de todos os valores
digitados antes do valor negativo ser informado, para que ele não seja
contabilizado também.
Os objetivos desta aula estão ligados aos conceitos e utilização das estru-
turas de repetição. Assim vamos verificar se os objetivos foram atingidos por
meio da correção das atividades.
Na atividade um, devemos implementar um programa que determine o
fatorial de um número. Logo devemos recordar o que é o fatorial. Fatorial é um
conceito da matemática, e o fatorial de um número é a multiplicação dele por
todos os inteiros menores do que o próprio número, até atingir o valor 0. Por
definição, o fatorial de 0 é 1. Exemplo: 5! = 5 x 4 x 3 x 2 x 1 = 120.
O programa que soluciona essa atividade deve utilizar um laço de repetição
que efetua as sucessivas multiplicações. Veja a solução a seguir.
#include <stdio.h>
int main( )
{
int n, i, fat=1;
printf(“\nFatorial = %d\n”,fat);
return;
}
#include <stdio.h>
int main( )
{
int n, soma=0;
printf(“Soma = %d”,soma);
return;
}
Observe que o valor numérico é informado pelo usuário antes do teste condi-
cional, e que essa leitura é feita novamente dentro do laço while. Nesse caso,
isso é necessário, pois, se o primeiro valor digitado for menor do que zero, o
corpo do laço não deverá executar nenhuma vez, ao contrário das estruturas
com teste no final.
A atividade quatro pode ser comentada por alternativas. A primeira está
incorreta, pois o aninhamento de comandos condicionais e de repetição é muito
utilizado em programação. A segunda está, também, incorreta, pois nem todos
os comandos podem ser usados em qualquer parte do programa, por exemplo,
a inclusão de bibliotecas. A terceira afirmação está correta, pois se o teste lógico
sempre retornar verdadeiro, o laço se repetirá indefinidamente. E como a terceira
alternativa está correta, a quarta está incorreta.
Anotações
Aula 4
Matrizes e vetores
#include <stdio.h>
#include <conio.h> // para a função getch()
int main( )
{
int num, cont=0;
char op;
float media, soma = 0;
do
{
printf(“digite um número:”);
scanf(“%d”, &num); // numero informado pelo
usuário
Observe o programa e note que os valores digitados pelo usuário são armaze-
nados na variável num, acumulados na variável soma e a quantidade de valores
informados é armazenada na variável cont. Após somar o valor de cada número
digitado e incrementado o contador (cont), o usuário tem a opção de informar mais
um valor ou sair do laço de repetição. Ao sair do laço, é impresso na tela a soma de
todos os valores dividida pela quantidade, o que caracteriza a média aritmética.
A única ressalva a ser feita nesse programa é que, se desejar efetuar alguma
outra operação sobre os valores digitados, apenas teremos a soma desses valores.
Não teríamos como saber qual foi o primeiro, o segundo, ou o quinto valor digitado.
Qual seria a solução? Declarar uma variável para cada valor digitado pelo usuário?
Essa solução seria inviável por algumas razões, tais como um número de
variáveis possivelmente muito grande para manipular. Outra alternativa seria
agrupar os valores digitados em uma estrutura que permitisse acessá-los poste-
riormente. Considerando que todos os valores seriam do mesmo tipo, essa estru-
tura poderia ser chamada de homogênea. Em programação existem dois tipos
de estruturas homogêneas bastante conhecidas: vetores e matrizes. Esses são
conceitos importantes que estudaremos nesta aula.
4.1 Matrizes
Segundo Schildt (2001), uma matriz é uma coleção de variáveis do mesmo
tipo que é referenciada por um nome comum. Um elemento específico em uma
matriz é acessado por meio de um índice, que sempre é um número inteiro.
Como qualquer variável de um programa, uma matriz ocupa posições na
memória computador. Sendo uma coleção de variáveis, uma matriz pode ocupar
diversas posições de memória para abrigar todas as variáveis que compõem a
matriz. Uma característica interessante das matrizes é que cada um dos elementos
ocupam posições contíguas (subseqüentes) na memória.
Em Linguagem C, uma matriz pode ter uma ou mais dimensões. A próxima
sessão fala sobre matrizes unidimensionais, que também conhecemos como
vetores ou arrays.
tipo nome_do_vetor[tamanho];
Nessa declaração o tipo especifica o tipo de cada um dos elementos que irão
compor o vetor. O nome_do_vetor é um identificador comum que referencia o con-
junto de elementos. E o tamanho indica a quantidade de elementos que irão compor
a estrutura. Vejamos alguns exemplos de declaração de vetores em Linguagem C.
float numeros[10];
int vet_int[5];
int vetor2[8];
#include <stdio.h>
#include <conio.h> // para a função getch()
int main( )
{
int i, num;
int vetor_int[10]; // vetor capaz de armazena 10
valores inteiros
float media, soma =0;
printf(“\nVALORES\n”);
...
for(i=0; i< 10; i++) // primeiro laço de repetição
{
printf(“digite um número:”);
scanf(“%d”, &vetor_int[i]);
soma = soma + vetor_int[i]; //soma dos números
digitados
Note que a leitura do valor na função scanf o símbolo “&” indica a posição
de memória da variável que irá armazenar o valor informado. Note, também,
que os valores são armazenados nas posições já indicadas pelo índice.
Quando estudamos vetores, é natural que surjam questionamentos como
“Qual o limite máximo para o tamanho de um vetor?” ou ainda “Se tem 10 posi-
ções reservadas, é obrigado que se utilize todas?”.
Saiba mais
Conteúdo = 10 15 25 35 45
Índice = 0 1 2 3 4
int mat_int[3][3];
Colunas
0 1 2
0
Linhas 1
2
Assim como em vetores, cada uma das posições de uma matriz pode ser
acessada individualmente por meio de índices. Nesse caso, dois índices são
necessários para indicar um elemento, um correspondente à linha, e outro corres-
pondente à coluna.
Podemos descrever ainda uma matriz como sendo um vetor de vetores.
Note que cada linha da matriz é um conjunto de elementos do mesmo tipo, que
podem ser acessados por meio de seus índices. Esse mesmo raciocínio pode ser
usado para descrever uma matriz com mais de duas dimensões. A quantidade
de dimensões de uma matriz pode variar de acordo com as necessidades dos
programadores. Vejamos um exemplo de programa, puramente didático, utili-
zando matrizes.
#include <stdio.h>
int main()
{
int mat_inteiros[3][3]; // matriz de 3 linhas e 3
colunas
int i,j; // índices para linhas e colunas
} // fim do primeiro laço
} // fim do segundo laço
#include <stdio.h>
#include <conio.h>
/* constantes */
#define MAX 15 // máximo de elementos
#define MEDIA 4 // número da coluna que armazena a média
int main(){
float mat_alunos[MAX][5], soma; // declaração da matriz
int quant, i, j; // e outras variáveis
}
mat_alunos[i][MEDIA] = soma/4; // determina a
média e ar-
printf(“\n”); // mazena na pos. 4 de
ca-
} // da linha da matriz
// fim do laço 2
que cada iteração do laço varia o índice das colunas, até a coluna 3, já que a
coluna 4 é reservada para a média das notas. Após informar as quatro notas,
a média é determinada e armazenada na posição 4 de cada linha, de acordo
com o especificado na constante MEDIA. Esse processo se repete quant vezes,
até que as notas e médias de todos os alunos sejam armazenadas na matriz.
Antes de finalizar o programa, os dados são apresentados na tela, também
utilizando dois laços para variar linhas e colunas. Chamamos atenção para o
comando printf usado para apresentar as notas e a média. Note que, na string
de formatação é usado “%.2f”. O “2” para indicar que os valores do tipo float
devem ser apresentados apenas com duas casas decimais.
Esse programa inclui uma prática comum em programação: o tratamento de
erros. Considerando que há um limite de armazenamento para uma matriz, não
é adequado que o usuário informe valores além do que pode ser armazenado.
Em contrapartida, o trabalho de preencher toda a matriz, quando em alguns
casos pode haver poucos alunos, pode incomodar o usuário. Por isso é solici-
tado ao usuário que informe a quantidade de alunos. Porém o usuário pode se
equivocar e informar um valor além da quantidade máxima. Nesse programa,
não há problemas, pois o programa irá ultrapassar o laço 1 somente quando
uma quantidade válida de alunos for informada.
#include <stdio.h>
int main()
{
Anotações
Aula 5
Estruturas (struct) e tipos definidos
pelo programador
Para que os objetivos desta aula sejam atingidos, é necessário que se domine
a declaração de variáreis e os tipos de dados, conceitos estudados na nossa
primeira aula.
5.1 Struct
Em linguagem C, uma estrutura é uma coleção de variáveis referenciadas
pelo mesmo nome, fornecendo uma maneira conveniente de se ter informações
struct nome_da_estrutura
{
campos
};
Essa declaração cria uma variável chamada p1 do tipo struct pessoa. Cada
variável desse tipo terá dois campos, nome e idade. O identificador p1 indica
a variável, e cada um dos campos é referenciado por seu próprio nome. Uma
variável do tipo struct pessoa também pode ser declarada no momento da defi-
nição da estrutura. Seguindo esse método, a declaração da variável p1 pode
ser feita como segue.
struct // definição 3
{
char nome[30];
int idade;
} p1;
#include <stdio.h>
int main()
{
printf(“Digite o nome:”); // leitura pelo teclado
gets(p1.nome); // do campo nome
return;
}
#include <stdio.h>
int main()
{
printf(“Digite o nome:”); // leitura pelo teclado
return;
}
numerico valor1;
typedef struct
{
char nome[30];
float nota1;
float nota2;
float media;
} aluno;
Essa declaração define uma estrutura com quatro campos e cria o nome
aluno como um identificador de tipo para essa estrutura. Assim é possível a
seguinte declaração:
aluno a1;
Saiba mais
#include <stdio.h>
#include <conio.h>
/* constantes */
#define MAX 15 // máximo de elementos
int main()
{
aluno vet_alunos[MAX]; // declaração do vetor
int quant, i; // e outras variáveis
printf(“Nome: “);
scanf(“%s”,&vet_alunos[i].nome); // lê o nome
do aluno
printf(“Nota 1: “);
scanf(“%f”,&vet_alunos[i].nota1); // lê uma
nota
printf(“Nota 2: “);
scanf(“%f”,&vet_alunos[i].nota2); // lê uma nota
vet_alunos[i].media=(vet_alunos[i].nota1+vet_alunos[i].
nota2)/2;
printf(“\n”);
}
// fim do laço 2
struct tempo
{
int horas;
int minutos;
};