Algoritmos e Estruturas de Dados I (AEDI) Introdução - AEDI. Prof. Paulo Henrique Pisani

Documentos relacionados
Ponteiros e Alocação de Memória

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores II. Cap. 5 Vetores

Cap. 3 Entrada e Saída e Controle de Fluxo

Programação Estruturada

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Introdução à Programação

Introdução a Programação de Jogos

Programação Estruturada

Introdução à Linguagem C

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Programação de Computadores II. Cap. 4 Funções

Ponteiros. Baseado nos slides do Prof. Mauro.

Métodos Computacionais

3. Linguagem de Programação C

Tópicos em C. Eliade F. Lima

Programação Estruturada

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Funções em Linguagem C Parte II

Estrutura de Programas e Tipos de Dados Simples

Estruturas Dinâmicas - Ponteiros Parte I

Estruturas Dinâmicas - Ponteiros

ECT1203 Linguagem de Programação

Módulo 3 Controle de Fluxo

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

3. Linguagem de Programação C

Carlos Eduardo Batista. Centro de Informática - UFPB

Linguagem C Princípios Básicos (parte 1)

Aula 03: Introdução a C

Introdução à Programação

Apontadores/ponteiros

Linguagem C: Elementos fundamentais

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Ponteiros e Tabelas. K&R: Capítulo 5

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Variáveis e Operadores em C

Fundamentos de Programação

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Faculdade de Computação

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

Conhecendo a Linguagem de Programação C

Introdução a Programação. Tipos Estruturados de Dados

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Introdução à Computação

INF 1007 Programação II

Introdução à Computação (IC) Linguagem C: Variáveis e Constantes

Exercícios Capítulos 5 e 6

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

ponteiros INF Programação I Prof. Roberto Azevedo

Aula 1 Apresentação do Curso

Linguagem de Programação C

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Tópicos Cap. 3 Entrada e Saída e Controle de Fluxo Livro printf e scanf if e? while for switch break continue Entrada e Saída Entrada e Saída

Aula 17: Ponteiros e Alocação Dinâmica em C

Ponteiros. prof. Fabrício Olivetti de França

Vetores e matrizes. MCTA028 Programação Estruturada. Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

Programação de Computadores IV

Programação: Vetores

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Cap. 2 Expressões na linguagem C

Linguagem C: Introdução

Linguagem de Programação. Thiago Leite Francisco Barretto

4. Estruturas Fundamentais de Programação em C

Estruturas dinâmicas Ponteiros

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Módulo 5 Vetores e Alocação Dinâmica

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Linguagem C: funções e ponteiros. Prof. Críston Algoritmos e Programação

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

SSC304 Introdução à Programação Para Engenharias. Variáveis e I/O em C. GE4 Bio

Linguagem C Introdução. Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux

Tópicos de hoje: Cap. 2 Expressões na linguagem C. Bits, Bytes e Palavras. Variáveis e Constantes. Números inteiros num Byte

Programação de Computadores II

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

INF 1007 Programação II

Mais sobre Ponteiros em C

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Ponteiros. Considere um carteiro recém-chegado na vila Na vila, a referência para se encontrar a casa é pelo morador

Aula 08: Funções (Parte II)

Fundamentos de Programação

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 2

Introdução a Computação

Introdução à Computação MAC0110

6 Alguns conceitos e comandos em programação

Aula 03 - Linguagem C

Transcrição:

Algoritmos e Estruturas de Dados I (AEDI) Introdução - AEDI Prof. Paulo Henrique Pisani fevereiro/2019

Algoritmos e Estruturas de Dados I Ementa: Breve introdução à linguagem C; Noções básicas de análise de complexidade de tempo de algoritmos; Estruturas lineares: busca e ordenação; Árvores de busca; Árvores balanceadas.

Algoritmos e Estruturas de Dados I Detalhes sobre regras da disciplinas (cronograma, avaliação, material, etc) disponíveis em: https://folivetti.github.io/teaching/2019-summerteaching-1 A presença nas aulas será controlada por lista de presença; Plantão de atendimento (dias e horários no link acima); Cadastre-se no Piazza da disciplina (veja no link acima).

Algoritmos e Estruturas de Dados I Na aula de hoje, repassaremos alguns tópicos básicos sobre linguagem C, assim como uma introdução ao ambiente de programação.

Revisão C

Programa mínimo #include <stdio.h> int main() { printf("abc"); return 0; Para compilar: gcc teste.c o teste.exe Código-fonte Programa objeto Para executar:./teste.exe

Programa (realmente) mínimo int main() { return 0; Para compilar: gcc teste.c o teste.exe Código-fonte Programa objeto Para executar:./teste.exe

Tipos de dados int Atualmente, é o long int short int Inteiro de 2 bytes (-32.768 a 32.767) long int Inteiro de 4 bytes (-2^31 a 2^31-1) long long int Inteiro de 8 bytes (-2^63 a 2^63-1) unsigned int unsigned short int unsigned long int Versões dos tipos inteiro sem sinal unsigned long long int float double Ponto flutuante de 4 bytes Precisão dupla de 8 bytes

Tipos de dados Importante! Atenção aos limites dos tipos! int Atualmente, é o long int short int Inteiro de 2 bytes (-32.768 a 32.767) long int Inteiro de 4 bytes (-2^31 a 2^31-1) long long int Inteiro de 8 bytes (-2^63 a 2^63-1) unsigned int unsigned short int unsigned long int Versões dos tipos inteiro sem sinal unsigned long long int float double Ponto flutuante de 4 bytes Precisão dupla de 8 bytes

Tipos de dados char 1 byte (-128 a 127) unsigned char 1 byte (0 a 255) Não há um tipo String. Strings são representadas por vetores de char (e o último char é o \0 ). Também não há tipo booleano! Podemos usar int ou char: Valor = 0 -> FALSO Valor!= 0 -> VERDADEIRO

Declaração de variáveis int main() { int num_matricula = 1234; return 0; int num_matricula = 1234 Tipo Identificador Inicialização

int main() { Cuidado! A linguagem C é case-sensitive, ou seja: A identificador num_matricula é diferente de Num_matricula! int num_matricula = 1234; return 0; int num_matricula = 1234 Tipo Identificador Inicialização

Saída Exemplos: %d int %ld %lld long int long long int %f float %lf double %c char #include <stdio.h> int main() { printf("abc"); int num = 507; printf("%d", num); printf("%d\n", num); %s String (vetor de char) printf("a sala do professor eh a %d\n", num); printf("%c + %c = %d\n", 'A', 'B', num); return 0; %p Ponteiro (endereço de memória)

Entrada Exemplos: #include<stdio.h> int main() { printf("digite um numero inteiro:\n"); int num_int; scanf("%d", &num_int); return 0; &num_int Há um & antes do identificador da variável!!! O scanf recebe os endereços de memória das variáveis. O & serve para obter o endereço de memória da variável num_int. Quando trabalharmos com ponteiros, veremos que nem sempre é necessário usar o &.

Conversão de tipo Atenção com operações envolvendo tipos fracionários! float num; num = 5 / 2; num = 5 / 2.0; num = 5 / ((float) 2); 2 2.5 2.5

Inicialização de variáveis Sempre inicialize variáveis em C! Quando uma variável é declarada, o programa apenas reserva um espaço de memória para ela: Mas o espaço alocado não é inicializado! Portanto, uma variável não inicializada pode ter qualquer valor!

Sempre inicialize variáveis! Qual a saída deste programa? #include<stdio.h> int main() { int num; printf("%d\n", num); return 0;

Sempre inicialize variáveis! Qual a saída deste programa? #include<stdio.h> int main() { int num; Variável não foi inicializada! A saída será o que estiver na área alocada! Pode ser qualquer valor! printf("%d\n", num); return 0;

Vetores É um conjunto de variáveis do mesmo tipo: Referenciada por um mesmo identificador; Cada elemento é acessado por meio de um índice. Declarar vetor: <tipo> <nome>[<tamanho>]; Exemplos int idades[10]; double vetor2[5]; int valores[3] = {10, 20, 30;

Vetores são armazenados em posições consecutivas na memória! int vetor[8]; 0x100 0x104 0x108 0x10C 0x110 0x114 0x118 0x11C Endereço de memória do primeiro elemento do vetor. Observe que cada elemento tem 4 bytes (tamanho de um int = sizeof(int) ) Este vetor ocupa 8 * 4 = 32 bytes Ou seja, tamanho * sizeof(<tipo>)

Matriz é um vetor de vetores Internamente, a matriz é um vetor unidimensional, em que cada elemento é um vetor unidimensional.

Percurso em Matrizes Percorre colunas int i, j; int matriz[4][3]; for (int j = 0; j < 3; j++) for (int i = 0; i < 4; i++) matriz[i][j]; Percorre cada elemento na coluna

Dicas gerais

Escopo de variáveis O escopo de uma variável determina de onde ela pode ser acessada; Em C, existem dois escopos principais: Variáveis locais: acessíveis apenas localmente (pela função); Variáveis globais: acessíveis a partir de qualquer parte do código.

#include<stdio.h> double resultado; void calcula_quadrado(double num) { resultado = num * num; double calcula_soma(double n1, double n2) { double r; r = n1 + n2; return r; int main() { int a = 2, b = 3; resultado = calcula_soma(a, b); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); Variável global A variável resultado pode ser acessada a partir de qualquer função! Variável local da função calcula_soma Variáveis locais da função main Variáveis locais são acessíveis apenas da função onde forma declaradas. return 0;

#include<stdio.h> double resultado; void calcula_quadrado(double num) { resultado = num * num; double calcula_soma(double n1, double n2) { double r; r = n1 + n2; return r; int main() { int a = 2, b = 3; resultado = calcula_soma(a, b); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); O que será impresso? return 0;

#include<stdio.h> double resultado; void calcula_quadrado(double num) { resultado = num * num; double calcula_soma(double n1, double n2) { double r; r = n1 + n2; return r; O que será impresso? int main() { int a = 2, b = 3; resultado = calcula_soma(a, b); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); calcula_quadrado(resultado); printf("%.2lf\n", resultado); return 0; 5.00 25.00 625.00 Veja que o uso de variáveis globais dificulta a leitura do código (e pode levar a erros de programação). Portanto, evite variáveis globais ao máximo!

Inicialização de variáveis Sempre inicialize variáveis em C! Quando uma variável é declarada, o programa apenas reserva um espaço de memória para ela: Mas o espaço alocado não é inicializado! Portanto, uma variável não inicializada pode ter qualquer valor!

Importante! Observe o estilo de codificação adotado nos slides: Indentação; Posição das chaves; Nomenclatura de variáveis. Também use nomes representativos para variáveis! Evite usar tmp1, tmp2, aux1, aux2, aux50, etc.

Indentação Cuidado ao indentar vários blocos de código!!! void funcao_teste(int param1) { int a = param1; if (param1 > 0) { int b = 0; int i; for (i = 0; i < 10; i++) { int c = i * i; b += c; printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c);

Indentação Cuidado ao indentar vários blocos de código!!! void funcao_teste(int param1) { int a = param1; if (param1 > 0) { int b = 0; int i; for (i = 0; i < 10; i++) { int c = i * i; b += c; printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c);

Indentação Cuidado ao indentar vários blocos de código!!! void funcao_teste(int param1) { int a = param1; if (param1 > 0) { int b = 0; int i; for (i = 0; i < 10; i++) { int c = i * i; b += c; printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c); printf("%d %d %d", a, b, c);

Depuração E quando meu programa não funcionar?

Depuração E quando meu programa não funcionar? Esta é uma excelente oportunidade para encontrar o erro e aprender como evitá-lo! Aplique técnicas de depuração (debug). Quando o programa segue algumas simples boas práticas (e.g. indentação correta, nomes significativos para variáveis, etc), o código fica mais legível: Ocorrem menos erros de codificação; É mais fácil encontrar os erros.

Ambiente de programação

Ambiente de programação Utilizaremos o gcc IDE: Editor de texto (e.g. gedit, vim, etc) VS Code Codeblocks

Material Complementar Kernighan & Ritchie. C A Linguagem de Programação Padrão ANSI. Ed. Campus

Referências Slides do Prof. Paulo H. Pisani: Programação Estruturada (Q3/2018) Slides do Prof. Fabrício Olivetti: http://folivetti.github.io/courses/programacaoestrutur ada/ Slide do Prof. Monael Pinheiro Ribeiro: https://sites.google.com/site/aed2018q1/ PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre, RS: Bookman, 2012. CELES, W.; CERQUEIRA, R.; RANGEL, J. L. Introdução a Estruturas de Dados. Elsevier/Campus, 2004.