Fundamentos de Programação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Programação II Estruturas de Dados
Programação Básica em Java
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Linguagem C Estruturas de Controle de Fluxos
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Esquema básico do hardware
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Revisão da Linguagem C.
Estrutura de decisão e repetição em JAVA
Programação I Caderno de Exercícios Nome.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
JAVA: Conceitos Iniciais
Tecnologias Especificas Informática
Computadores Tipos e estrutura interna
Introdução a Computação e Cálculo Numérico
Unidade I: “Dê um mergulho rápido”
PROGRAMAÇÃO I UNIDADE 1.
Linguagem de Programação II Parte IX
PCI- Introdução à Computação
Introdução a Programação
Seminário 1: Revisão de C
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
PCI- Introdução a linguagem C
Sistemas Operacionais I
Introdução a aplicativos Java
O Portal do Estudante de Computação
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Sistemas Operacionais
3. Introdução à Linguagem C
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Algumas notas sobre a linguagem de programação C
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Introdução à INFORMÁTICA
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Conceitos Básicos de Informática
Fundamentos de Programação
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
JAVA Sintaxe.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Aula Prática 3 Funções Monitoria Introdução à Programação.
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
ALGORITMIA. ALGORITMO Conjunto de instruções ou acções que ao serem executadas, permitirão realizar uma determinada tarefa.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 2 Variáveis e Atribuições.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
SISTEMAS DE INFORMAÇÃO
Profa. Maria Augusta Constante Puget
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS LINGUAGEM DE PROGRAMAÇÃO I Aula /08/2011 Professor Leomir J. Borba-
Introdução à Computação
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Programação estruturada unidade 2
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 02 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Linguagem de Programação
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Estrutura de Dados Prof. André Cypriano M. Costa
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Transcrição da apresentação:

Fundamentos de Programação Prof. Dr. Alexandre C. B. Ramos INTRODUÇÃO A INFORMÁTICA O COMPUTADOR SISTEMA OPERACIONAL O HARDWARE Copyright, 2011 © Alexandre C. B. Ramos

I - Introdução à Informática 1. O Computador Quando falamos de computador, a primeira imagem que vem a nossa mente é o Hardware entretanto este, sozinho, não tem nenhuma utilidade. Para que possamos utilizar um computador é necessário que tenhamos tanto o equipamento quanto os programas, isto é, o Software.

2. Sistema Operacional Um Sistema Operacional - SO é um software que permite ao ser humano utilizar o hardware. Além de funcionar como interface homem/máquina, facilitando o uso do computador, o SO permite gerenciar os recursos básicos do computador (hardware, software e dados).

2.1 Qual a importância do SO para o aluno? Futuros Gerentes, Consultores Analistas de Sistemas: poderão ser solicitados a selecionar ou recomendar SO; e Em outros casos: o conhecimento do funcionamento do SO facilitam o desenvolvimento de qualquer sistema, além do mais programadores eficientes devem pelo menos compreender a base do SO.

2.2 O Sistema Operacional e o usuário A partir da criação do SO, não mais existe a necessidade de o programador se envolver com a complexidade do hardware para poder trabalhar, ou seja, a parte física do computador tornou-se transparente para o usuário, que passa a enxergar a máquina como sendo apenas o SO, como se o hardware não existisse. A essa visão modular e abstrata dá-se o nome de Máquina Virtual.

3. Hardware Um computador é constituído por um conjunto de componentes interligados: processadores, memória, registradores, além de outros dispositivos físicos. Esses componentes podem ser agrupados em três subsistemas básicos: UCP, Memória e Periféricos.

3.1 Unidade Central de Processamento - UCP Sua função é unificar o sistema controlando as funções realizadas por cada unidade funcional. A UCP também executa todos os programas do sistema que estão armazenados na memória principal.

3.2 Memória Principal Ou (primária ou real), é a parte do computador onde são armazenadas as instruções e dados. Ela é composta por unidades de acesso chamadas células, sendo cada célula composta por um determinado número de bits (binary digit). O bit é a unidade básica de memória, podendo assumir os valores 0 ou 1.

3.2 Memória Principal Muitos computadores utilizam o byte (8 bits) como tamanho de célula, porém encontramos computadores com células de 16, 32, e 64 bits. O acesso ao conteúdo de uma célula é realizado através da especificação de um número chamado endereço. Quando um programa deseja ler ou escrever um dado numa célula, deve primeiro especificar qual o endereço de memória desejado, para depois realizar a operação.

3.2 Memória Principal Quanto a volatilidade as memórias podem ser: RAM - Random Access Memory, memória volátil e que constitui quase a totalidade de memória principal de um computador; e ROM - Read Only Memory, memória não volátil cujo o conteúdo já vem pré-gravado do fabricante e se mantém mesmo quando o computador é desligado. Uma variação da ROM é a EPROM- Erasable Programmable ROM, que permite a regravação após a exposição de luz ultravioleta.

4. Dispositivos de Entrada e Saída São dispositivos utilizados para permitir a comunicação entre o computador e o mundo externo. Através desses dispositivos, a UCP e a memória principal podem se comunicar, tanto com usuários quanto com memórias secundárias, a fim de realizar qualquer tipo de processamento.

4. Dispositivos de Entrada e Saída Os dispositivos de entrada e saída (E/S) podem ser divididos em duas categorias: 1. Dispositivos que são usados como memória secundária, como discos e fitas magnéticas, se caracterizam por armazenar de três a quatro vezes mais informações que a memória principal, são de baixo custo, mas possuem tempo de acesso de quatro a seis vezes maior que o tempo de acesso da memória principal.

4. Dispositivos de Entrada e Saída 2. Dispositivos que servem como interface homem-máquina, como teclados, monitores de vídeo, impressoras, ploters entre outros. O desenvolvimento de interfaces mais amigáveis permite que as pessoas sem conhecimento específico sobre informática possam utilizar o computador.

II - Programação e solução de problemas Para que o computador possa ajudar a resolver os nossos problemas de uma forma eficiente devemos programa-lo. O objeto final da programação é um programa, que é a especificação da seqüência de passos que a máquina deve executar para alcançar a solução do problema.

1. Usando o Computador A tarefa de programação pode compreender os seguintes passos: 1. Descrever o problema de uma forma clara e precisa, especificando bem QUAL É O PROBLEMA; 2. Descobrir uma solução, transformando O QUE É desejado em COMO chegar ao que se deseja na forma de uma rotina executável;

1. Usando o Computador 3. Escrever a solução numa linguagem de programação de modo que possa ser executada NUM COMPUTADOR; e 4. Verificar a correção do programa, mostrando que o programa satisfaz os requisitos do problema.

1. Usando o Computador Exercício: seja a seguinte situação: “Durante uma viagem de automóvel um motorista percebeu que o pneu dianteiro do seu veículo está furado.”descrever o problema e a solução indicando O QUE E COMO FAZER para resolver o problema.

2. Algoritmos O termo ALGORITMO vem da palavra ÁRABE ALKHARIZMI, originária do nome de um matemático persa chamado: ABU JA’FAR MOHAMMED IBN MUSA AL KHOWARIZMI, autor de um livro-texto sobre matemática no século IX.

2. Algoritmos Um ALGORITMO é uma receita para um processo computacional e consiste de uma série de operações primitivas, interconectadas devidamente, sobre um conjunto de objetos (Constantes e Variáveis) Constante: um objeto cujo valor não se altera ao longo do algoritmo e pode ou não ter um nome Variável: objeto que tem um nome e um valor e que pode ser alterado pelo algoritmo durante sua execução Operações primitivas: eqüivale a um pequeno conjunto de operações necessárias e suficientes para resolver um problema computacional

2. Algoritmos Exemplo de Operações Primitivas: Obtenha(Nome,Salario): carregar as informações nome e salário para a memória do computador; Forneça(Nome,Salario): enviar as informações nome e salário da memória para o vídeo ou impressora; Guarde(Nome,Salario): enviar as informações nome e salário da memória para um dispositivo de armazenagem;

2. Algoritmos Recupere(Nome,Salario): enviar as informações nome e salário do dispositivo de armazenagem para a memória do computador; Atribua(“João da Silva”, Nome): fazer com que a variável nome receba o valor “João da Silva”; Calcule(Total Bruto - Total de Descontos): avalia uma expressão aritmética; Avalie(Total Líquido < Total de Descontos): avalia uma expressão lógica, enviando um resultado que pode ser verdadeiro(+) ou falso(-);

3. Fluxogramas Corresponde a uma forma gráfica muito comum utilizada para representar um algoritmo, indicando a seqüência em que as primitivas devem ser executadas.

3. Fluxogramas Primitivas Gráficas: Início/Fim do programa Processamento Decisão

3. Fluxogramas Em um fluxograma as operações primitivas aparecem envolvidas por retângulos, com exceção da primitiva AVALIE, a qual é envolvida por um losango. As operações são interligadas por SETAS (-->).

3. Fluxogramas Exemplo: Dados dois números inteiros positivos A e B, calcular o valor absoluto de A - B. Resposta em forma de texto: nesse caso devemos realizar os seguintes passos: 1. Obter os valores de A e B; 2. Verificar qual deles é o maior; 3. Subtrair o número menor do número maior; e 4. Apresentar o valor resultante.

3. Fluxogramas Resposta em forma gráfica: Início Obtenha A,B A < B C <-- B - A C <-- A - B Forneça C Fim

3. Fluxogramas - Exercícios 1. Calcular o produto de 10 por 7. Início PROD <-- 10*7 Forneça PROD Fim

Linguagem C Alexandre C. B. Ramos

Linguagem C Tópicos de estudo Entrada e saída de dados Bases numéricas Estruturas de seleção Estruturas de repetição Matrizes/vetores Operadores lógicos Funções internas e subprogramas

Bibliografia Básica Schildt, Herbert.Turbo C - Guia do Usuário. McGraw-Hill Complementar Schildt, Herbert.C completo e total. McGraw-Hill Kelly-Bootle, Stan.Dominando o Turbo C. Editora Ciência Moderna. Deitel & Deitel. C++ Como Programar. Bookman.

Ambiente de programação Para a edição de programas, compilação e execução utilizaremos o ambiente Turbo C, especificamente a IDE (Integrated Design Environment) que funciona a partir dos sistemas operacionais DOS e WindowsXX. A IDE é uma interface de desenvolvimento prática e eficiente que vai facilitar bastante o desenvolvimento dos programas em C. Maiores detalhes do funcionamento da IDE, principais menus e comandos de edição e compilação estão disponíveis em Turbo C - Guia do Usuário.

Conceitos básicos da linguagem C

Identificadores Usados para nomear as variáveis, as funções e os rótulos dos programas. A linguagem C: reconhece os 31 primeiros caracteres do nome; e diferencia as maiúsculas e as minúsculas. O identificador sempre começa por letra Normalmente: maiúsculas  constantes minúsculas  variáveis Exemplo: Corretos Errados cont 1cont teste23 alô! Alto_balanco alto..balanço

Palavras reservadas O nome deve ser diferente das seguintes palavras reservadas: int char float void enum short long signed unsigned double struct union typedef sizeof auto register static extern const volatile goto if else switch case default break while do for continue return

Paralelo entre Pascal e C Program Area; # include <stdio.h> uses crt; void main ( ) var A, L: real; { Begin float A, L; write (“Digite o lado: “); printf (“ Digite o lado: ”); readln (L); scanf (“%f”, L); if L < 0 then if L < 0 write (“ O lado deve ser positivo!”) printf (“ O lado deve ser positivo!”); else else begin { A:= L * L; A = L * L; writeln (“ A área é: “, A); printf (“ A área é: %f”,A); end; } End. }

Tipos e tamanhos Tipos simples: char: caracter (1 byte) int: inteiro (>= 2 bytes dependendo da máquina) float: ponto flutuante, precisão simples (>= 6 bytes, dep. Máq.) Qualificadores: short: se aplica ao tipo int long: se aplica a int e float signed: se aplica a char e int unsigned: idem char e int Variáveis Tipos simples: char, int, float e double Tipos compostos: estruturas, tabelas, uniões etc. Domínio de validade: auto, static, extern e register. Sintaxe: [classe] [qualificador] tipo nome_variavel [=valor];

Constantes Declaração simples: # define NUM_MAX_CARACT 100 # define MENSAGEM “alo, alo, Terezinha” # define CR ‘\n’ # undef MENSAGEM Qualificadores 3.14 tipo “double” 3.14f ou 4.14F tipo “float” 1.3e-3 ou 1.3E-3 tipo double 074 tipo inteiro, em octal 3l ou 3L tipo inteiro longo 255u ou 255U tipo inteiro, sem sinal 3.14l ou 3.14L tipo d”double” longo 0x3b ou 0X”b tipo inteiro, hexadecimal

Constantes Domínio de validade: da definição da constante até o final do arquivo ou até encontrar a diretiva #undef da constante Constantes do tipo caracter devem ser escritas entre apóstrofos (por exemplo: `l`, `a`, `x`, `\n`, `\t`) Representação de caracteres ASCII não imprimíveis: nova linha = `\n` tabulação = `\t` espaço p/trás = `\b` retorno do carro = `\r` página segui nte = `\f ` barra de fração revertida = `\\` apóstrofo = `\’` null = `\0` bell = ‘\a’ formfeed = `\f ` haspas = `\” ` interrogação = `\?` caracter definido pelo seu valor ASCII (em octal) = `\ddd`, ex.: `121` caracter definido pelo seu valor ASCII (em hexa] = `\xdd`, ex.: `\x2a`

Operadores Operadores aritméticos (multiplicativos e aditivos): +, -, *, /, % (resto de divisão inteira) Operadores bit a bit: & (e), | (ou), ^ (ou-exclusivo) Operadores de deslocamento: << (esquerda), >> (direita) Operadores relacionais: <,<=, >, >= Operadores de igualdade: ==, != Operadores lógicos: && (e), || (ou) Operadores unários: *p : conteúdo de p &v : endereço de v -e : menos e !e : negação (booleana) de e ~e : complemento bit a bit de e ++v : v = v + 1 -v : v = v - 1 v++ : retorna v e depois v = v + 1 v- : etorna v e depois v = v - 1 (tipo)v : converte v para o tipo sizeof(e) : numero de bytes ocupado por e sizeof(tipo) : n° de bytes ocupado por um objeto do tipo definido

Operadores Operadores de atribuição: =, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= Operador vírgula: x = y++, z; equivale a y = y + 1; x = z Operador condicional: exp ? exp1 : exp2 Exemplo: x = (a > b) ? a : b; equivale a: Se a é maior que b, então x = a; senão x = b

Precedência e ordem de avaliação Operador Avaliação ( ) [ ] -> . esq->dir ! ~ ++ --(tipo) * & sizeof dir->esq * / % esq->dir + - esq->dir <<>> esq->dir < <=> >= esq->dir == != esq->dir & esq->dir ^ esq->dir | esq->dir && esq->dir || esq->dir ? : dir -> esq = += -= etc. dir -> esq , esq-> dir

Instruções de controle Observações preeliminares: uma instrução é sempre terminada por “ ; “ comentários: /* isto é um comentário */ as chaves { e } são usadas para agrupar declarações e instruções em um bloco, o qual é sintaticamente equivalente a uma única instrução, exemplo: While (n != 2) { /* bloco*/ x = y + z; n = n / 2; } um bloco nunca termina com }; variáveis podem ser declaradas dentro de qualquer bloco (e tem validade só dentro do bloco).

Instrução if Caso mais simples: if (expressão) instrução Caso completo: if (expressão) instrução; else if (expressão) instrução; ..... else instrução;

Exemplo

Instrução switch Sintaxe: switch (expressão) { case expr-constante: instr; instr; break; default: instr; }

Instrução while Caso mais simples: while (expressão) instr; Caso geral: while (expressão) { instr; instr; } A instrução “break” faz sair da malha “while”. Exemplo: while (i++ != 10) { soma += x[i]; if (soma >= 100.) break; } A instrução “continue” faz com que a iteração seguinte da malha seja realizada imediatamente, exemplo: while (i++ < 10) {if (x[i] == ‘\n’) continue; y[i] = y[i]; }

Instrução do/while Caso simples: do instrução; while (expressão); Caso geral: do { instrução; ..... } As instruções break e continue também são aplicáveis ao do/while.

Instrução for Sintaxe: for (expr1; expr2; expr3) { instr; ... instr; } A instrução “for” é equivalente a: expr1; while (expr2) { .... expr3; } As instruções “break” e “continue” também são aplicáveis a malha for.

Instrução goto Sintaxe: goto rotulo ... Rotulo: instr; instr;

Funções Generalidades A linguagem C é baseada no conceito de blocos de construção, que são chamados de funções. O nome de uma função sofre as mesmas restrições que o nome de uma variável. Como também ocorre com as variáveis, um tipo é sempre associado a uma função (tipo do valor de retorno) tipos básicos: void, char, int, float, double qualificadores: short, long, signed, unsigned, exemplo: short int func () Retorno de valor: return expr; Declaração de uma função: float calc (int, float); definição de uma função: foat calc (n, x) int n; float x; {corpo da função } não se pode definir uma função no interior de um bloco {.....}

Função main O programa principal é uma função cujo nome é “main” A função “main” pode ser do tipo: main () { ...... } Ou do tipo: main (argc, argv) int argc; char *argv; { .......... } O valor contido em “argc” corresponde ao número de argumentos recebido da linha de comando Por sua vez, “argv” corresponde à tabela de argumentos da linha de comando, exemplo: cp arq1 arq2 cp: nome do programa arq1 e arq2 : argumentos argc = 3 argv = [ “cp”, “arq1” , “arq2”]

Alocação do espaço de memória Classe auto alocação por “default” alocação feita no momento da declaração liberação no final do bloco (variável local) ou no final do programa (variável global) Classe static alocação feita na declaração liberação no final do programa uma variável local, declarada “static”, guarda seu valor de uma chamada a outra da função (conceito de permanência do valor) uma variável global, declarada “static” , só é acessível por funções contidas dentro do arquivo onde foi declarada (conceito de privacidade) Classe extern a variável é alocada em um outro arquivo

Alocação de espaço de memória Classe register deve ser empregado somente com as variáveis automáticas (“auto”) classe de alocação normalmente empregadas para as variáveis utilizadas de maneira intensiva o compilador é livre de atribuir um registrador do processador à variável ou de ignorar a solicitação não se pode, evidentemente, tentar obter o endereço de uma variável do tipo “register” como regra geral, as variáveis de classe “register” são do tipo “char” ou “int”

Definição de tabelas (arrays) Uma tabela é um conjunto de elementos de mesmo tipo. Declaração: [classe] [qualificador] tipo tabela [n° elementos]; Inicialização: tipo tabela[ ] = {val1, val2, ...} Exemplos: char v[10]; static double x[20]; int stat[ ] = { -1, -1, 0, 1}; Acesso a um elemento de uma tabela, exemplos: y = x[10]; ss = stat [2*i-3]; Tabelas multidimensionais int tab[2] [3] [4]; ou double pos[3] [3];

Estruturas Uma estrutura corresponde a um conjunto de uma ou mais variáveis, eventualmente de tipos diferentes e agrupadas sob um mesmo nome Exemplos de declarações de estruturas (“struct” define o tipo estrutura) declara a estrutura “x” (tipo “num_complexo”), alocando para a mesma 2 campos do tipo double: struct num_complexo { double parte_real; double parte_imag; } x; declara a estrutura “data”, alocando para a mesma inteiros: struct { int dia; int mês; int ano; } data; Acesso aos membros de uma estrutura: data.dia = 18;

Exemplos de programa em C Converte o caracter de entrada em octal; Imprime o tamanho dos tipos de base do C; Conversor de temperatura Fahrenheit para Celsius; Conta caracteres brancos, tabulações e retornos à linha; Verifica se uma dada palavra esta contida dentro de uma frase; Variáveis globais e locais; Exemplo de classe static; Exemplo de classe extern;

Processos Definições iniciais: Programa: arquivo executável Processo: programa em execução Lista de argumentos: recebida pelo programa quando este é colocado em execução, exemplo: main (int argc, char *argv[ ] ) Lista de variáveis de ambiente: também recebida pelo programa quando este é colocado em execução main (int argc, char *argv[ ], char *envp[ ]) exemplo: programa que imprime a lista de variáveis de ambiente recebidas Formato das varáveis de ambiente: var = string Ultima string da lista de variáveis de ambiente: obrigatoriamente NULL, isto é, (char *) 0 Outras maneiras de se obter as variáveis de ambiente: uso da variável externa “environ” uso da função “getenv”

Processos

Processos

Processos

Processos Identificador do processo Identificador do processo pai Cada processo possui um único identificador de processo (“PID”, inteiro) Para um processo obter o seu PID, ele deve chamar a função “getpid()” Identificador do processo pai Cada processo possui um processo pai Para obter o PID do processo pai, deve ser chamada a função “getppid()”