Sistemas Operativos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2006/2007 Breve Introdução à Linguagem C.

Slides:



Advertisements
Apresentações semelhantes
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Advertisements

Programação II Estruturas de Dados
Programação para Engenharia I
Alocação Dinâmida de Memória
Algoritmos e Estrutura de Dados I
Alocação Dinâmica de Memória
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade de Brasília
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Linguagem C Strings.
Linguagem C Strings.
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Tratamento de Ficheiros
Revisão da Linguagem C.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Curso de Nivelamento LCG
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
DAVID ANDERSON CARDOSO DANTAS
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Prof. Ricardo Santos PONTEIROS
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Linguagem C : Ponteiros
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Ambiente de Execução - Rotinas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Introdução à Linguagem C
Algumas notas sobre a linguagem de programação C
Linguagens de Programação
Algoritmos e Estruturas de Dados
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
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.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
 2000 Prentice Hall, Inc. All rights reserved. 1 Capítulo 8 - Caracteres e Strings Sumário 8.1Introdução 8.2Conceitos Fundamentais de Strings e Caracteres.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
Algoritmo e Estrutura de Dados I Aulas 12 – Linguagem C Strings Márcia Marra
Profa. Maria Augusta Constante Puget
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Estruturas Homogêneas – Vetores e Matrizes
Profa. Maria Augusta Constante Puget
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Linguagem de Programação
Programação em C Aula 9.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

Sistemas Operativos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2006/2007 Breve Introdução à Linguagem C

2 Bibliografia C How to Program, 5th Edition by Deitel & Associates Prentice Hall, August 2006 ISBN The C Programming Language, 2nd Edition by Kernighan & Ritchie Prentice Hall, March 1988 ISBN

3 Cálculo de uma Raíz Quadrada Qual o algoritmo para calcular a raiz quadrada de um número x? “Método Babilónico”

4 Programa de Cálculo da Raíz Quadrada

5 Compilar e Executar $ gcc –Wall raiz.c –o raiz $./raiz

6 Notas #include Inclui a biblioteca “stdio” (Standard IO) #define ERRO_MAXIMO Definição de uma constante Inexistência de classes As funções (métodos) existem directamente no ficheiro Controlo de fluxo de execução / tipos Semelhante ao Java main() / printf() main()  Função principal do programa e seu ponto de entrada printf()  Permite escrever dados para o ecrã

7 Tipos de Dados Básicos O tamanho de cada tipo de dados varia de plataforma para plataforma. sizeof(datatype)  Retorna o tamanho, em bytes do tipo de dados

8 Controlo de Fluxo de Execução

9 Tabelas double pessoas[10]; Cria uma tabela de 10 elementos do tipo double na stack Acesso como em Java (pessoas[i]) O tamanho é pré-definido e fixo! double matrix[3][3]; pessoas  matrix  [0][0][0][1][0][2][1][0][1][1][1][2][2][0][2][1][2][2]

10 Pequeno exemplo com tabelas simples

11 Notas As tabelas quando são declaradas têm de indicar o tamanho dos dados que vão conter! Para ultrapassar esta limitação tem de se utilizar ponteiros (mais sobre isso daqui a pouco…) scanf(“%d”, &variavel_int)  Lê do teclado um inteiro scanf(“%lf”, &variavel_double)  Lê do teclado um double O & representa o endereço da variável destino. Isto é, um ponteiro (mais sobre isso daqui a pouco…) media = 0.0; desvio_padrao = 0.0; Inicialização EXPLÍCITA de variáveis!!! O C não inicializa as variáveis automaticamente.

12 Strings char nome[6] = “JORGE”; A tabela tem de conter 6 elementos: Cinco para os caracteres: ‘J’, ‘O’, ‘R’, ‘G’, ‘E’ Um para o terminador da string: ‘\0’ char nome[] = “JORGE”; char nome[] = { ‘J’, ‘O’, ‘R’, ‘G’, ‘E’, ‘\0’ }; char* nome = “JORGE”; Funções úteis: #include strcpy(), strncpy(), strcmp(), strncmp(), strcat(), strncat(), strstr(), strchr(), sprintf()

13 Ponteiros (1) Um ponteiro representa um endereço de memória, permitindo aceder a outras variáveis ou buffers explicitamente reservados int* ptr;  ptr é um ponteiro para uma variável inteira ptr  é o ponteiro (endereço) em si *ptr  valor apontado por ptr &var  representa o endereço da variável var NULL  ponteiro nulo (não aponta para nada)

14 Exemplo Simples – Notação // Um inteiro int idade = 20; // Um ponteiro para um inteiro int* ptrIdade = NULL; // Uma atribuição... ptrIdade = &idade; // Acesso à idade original... printf(“%d”, *ptrIdade); “20” idade (0x5490) 0 ptrIdade (0x6000) 0x5490 ptrIdade (0x6000) // Acesso à idade original... *ptrIdade = 30; “30” idade (0x5490) (Nota para a versão impressa: este slide contém uma uma animação em que o 20 originalmente em idade passa a 30)

15 Quiz

16 Alocação dinâmica de memória As tabelas têm de ter um tamanho fixo Para resolver esse problema, utiliza-se: Alocação dinâmica de memória Ponteiros void* malloc(size_t total_size) Reserva total_size size bytes retornando um ponteiro para a zona de memória reservada. É necessário converter o ponteiro retornado num ponteiro “real” void free(void* ptr) Liberta a zona de memória apontada por ptr, anteriormente reservada

17 Exemplo de uso de memória dinâmica Notas: Muitas vezes é possível utilizar os ponteiros como se fossem tabelas, assim como usar tabelas como se fossem ponteiros Ao utilizar ponteiros como tabelas, o compilador gera o código para aceder correctamente aos valores apontados pelos índices. Exemplo: tabela[i] é equivalente a *((char*) tabela + sizeof(double)*i) Ao utilizar-se um ponteiro directamente, fazendo-se aritmética com o mesmo, os avanços são em múltiplos do tipo de dados base. Exemplo: tabela[2] é equivalente a *(tabela+2), que é sensivelmente equivalente a *((char*) tabela + sizeof(double)*i) (na verdade é um “bug” subtil…)

18 Passagem de parâmetros por referência Por vezes é necessário ter funções cujos argumentos sejam passados por referência… Função que troca dois valores passados como argumento Função que calcula os quadrados de elementos passados numa tabela, por referência

19 CUIDADO Nunca retornar referências para memória reservada na stack!!!!

20 Possível solução Existem outras soluções possíveis (e até mais seguras)… Qual é o problema desta abordagem?

21 Estruturas Uma estrutura permite agrupar a informação em blocos Há diferentes formas de o fazer, todas equivalentes Original Abreviada Mais prática

22 Estruturas e Ponteiros Quando se utilizam estruturas e ponteiros, existe um operador especial de acesso: -> É equivalente escrever: ptrPessoa->nome ou (*ptrPessoa).nome

23 Mais um exemplo de ponteiros… Uma lista ligada é uma estrutura de dados que permite armazenar um número arbitrário de elementos não pré-definidos Consiste num encadear de elementos, em que cada elemento possui um ponteiro para o próximo elemento 30 list value next 20 value next 10 value next NULL

24 Programa (Parte I)

25 Programa (Parte II) NOTA: É muito mais fácil adicionar “à cabeça” do que no final da lista! TODO: Implementar as funções: remove_list(), remove_element(), is_present() A memória não está a ser liberta no final do programa!!!

26 Leitura e Escrita básica de disco Existem dois tipos de leitura e escrita: Baixo nível: open()/close()/read()/write() Alto nível: fopen()/fclose()/fprintf()/fscanf()/fread()

27 write_random_int_file()

28 print_int_file()

29 » Now this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning « Winston Churchill