1. Programação estruturada em C++: extensões ao C

Documentos relacionados
Programação estruturada em C++: extensões ao C. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005)

Programação Estruturada em C++: Extensões ao C

Programação Estruturada em C++: Extensões ao C. Breve Historial

Conceitos Básicos de C

Operações com Arquivos

Conceitos Básicos da Linguagem C++ Prof. Leonardo Barreto Campos 1

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

Aula 28: Arquivos de texto

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C1105 INTRODUÇÃO À PROGRAMAÇÃO EM C

Introdução à linguagem C

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

Conceitos Básicos de C

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS CURSO DE ENGENHARIA ELECTROTÉCNICA/INDUSTRIAL

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2007/2008

Introdução à linguagem C++

Puca Huachi Vaz Penna

Introdução a UML. Exercício:

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

The Cyclops Project. Introdução: C++

Sumário. Ficheiros. Ficheiros

Orientação a Objetos. Programação em C++

Carlos Eduardo Batista. Centro de Informática - UFPB

Introdução à Linguagem C. K&R: Capitulo 1. Introdução IAED, 2014/2015 2

1/24 FICHEIROS DE TEXTO

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

A linguagem C (visão histórica)

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Introdução e Conceitos

Por que programar? Programação de Computadores Introdução a C++ É tudo questão de automatizar coisas. Alan de Freitas

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

Computação e Programação Exame Época de recurso

Básico: estrutura de programa, sintaxe Interface com linha de comando

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

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

Aula 26: Estruturas heterogêneas

Objectivos. Observar os tipos fornecidos pelo C++ Explicar as regras sintácticas para nomes de identificadores Estudar variáveis e constantes

Física Computacional 11 Classes

Programando em C++ Histórico da Linguagem C

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Introdução à Programação em C Input / Output

Fundamentos de Programação

Linguagem de Programação C. Arquivos

Introdução à Programação em C (II)

Fundamentos de Programação. Linguagem C++ Introdução, identificadores, tipos de dados. Prof. Bruno E. G. Gomes IFRN

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

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

Linguagem de Programação. Thiago Leite Francisco Barretto

Introdução à linguagem C++

Aula 27: Estruturas heterogêneas e alocação dinâmica

Overloading de Operadores

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2011/2012

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Aula 10 Comandos de Repetição

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

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Computação e Programação Aula prática nº 5. Enunciados dos problemas

DEM-Sec.Sistemas Tipos Abstractos de Informação 2006 / Programação

Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

Computação e Programação

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

Aula 14: Funções Passagem de Parâmetros por Referência

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

Aula 01 Algoritmos e lógica de programação e introdução ao C++

PROGRAMAÇÃO JAVA. Parte 3

Aula 8 Comandos de Seleção

Programação com Classes em C++ (Parte 2)

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

C/C++; biblioteca stdio

Mestrado em Engenharia Física Tecnológica

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

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas

Programação Estruturada

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 1: Visão Geral

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA DE CIÊNCIAS E TECNOLOGIA. ECT1203 Linguagem de Programação Turma Prof.

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB

Orientação a Objetos - Programação em C++

Linguagem C. André Tavares da Silva.

O que é um apontador em C (type pointer in C)?

Linguagem C (continuação)

Introdução ao C++ Ambientes de Desenvolvimento Avançados. 2 de Outubro de 2002 ADA / DEI - ISEP 2002/2003 1

Programação Orientada a Objetos CLASSES E OBJETOS

Manipulação de Streams e arquivos

Introdução à Programação em C

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

Structs, Ponteiros e Arquivos. Prof. Maurício Dias

Alguns conceitos de C++ que usaremos neste curso (para quem já conhece C) Suponha que se queira criar uma função que soma 1 numa variável inteira.

CCO 016 / COM 110 Fundamentos de Programação

Programação de Computadores II

Computação e Programação

Programação científica C++

Computação e Programação

Linguagens de Programação

Fundamentos de Programação

Fundamentos de Programação

Transcrição:

1 FEUP/LEEC/AED/2002-2003 1. Programação estruturada em C++: extensões ao C João Pascoal Faria (versão original) Cristina Ribeiro (versão 2002/2003) Introdução à programação estruturada em C++ (extensões ao C) 1972 1978 1983 1988 1995 Breve historial Primeira versão da linguagem C criada nos laboratórios Bell (da AT&T) por Dennis Ritchie, e implementada num computador DEC PDP-11, baseada nas linguagens B e BCPL C clássico descrito no livro "The C Programming Language", por Brian Kernighan e Dennis Ritchie, dos laboratórios Bell Primeira versão da linguagem C++ (pelo menos com esse nome), uma extensão ao C (sobretudo com facilidades de programação orientada por objectos) criada por Bjarne Stroustrup nos laboratórios Bell (da AT&T) C standard (ANSI C) descrito na segunda edição do livro de Kernighan e Ritchie e aprovado pelo comité ANSI (aprovado pelo comité ISO em 1990) A linguagem de programação Java é criada na Sun Microsystems, baseada em C e C++ e incorporando características doutras linguagens orientadas por objectos (em geral é mais "limpa" mas menos eficiente que C++) 2 1997 C++ standard descrito na 3ª edição do livro "The C++ Programming Language" de Bjarne Stroustup e aprovado pelo comité ISO em 1998 2001 Criada a linguagem C# na Microsoft, baseada em Java e C++ Extensões C++ 1

O meu primeiro programa em C++ 3 directiva para incluir header file (.h) da biblioteca standard iostream (streams de entrada e saída de dados) função principal de qualquer programa em C++ #include <iostream> standard output stream (normalmente o ecrã) envia o dado da direita para o stream da esquerda cout << "hello, world\n"; return 0; segue-se a convenção habitual de a função main retornar 0 em caso de sucesso helloworld.cpp \n representa o caracter de mudança de linha (newline) sequências começadas com \ são sequências de escape No ecrã aparece: hello, world O meu segundo programa em C++ 4 // calcula o máximo e a média de um conjunto de valores reais #include <iostream> // para usar "cout" e "cin" Quantos valores são? 4 cout << "Quantos valores são? "; x1? 18 int n; x2? 15.5 cin >> n; x3? 14.5 float soma = 0.0, maximo; x4? 17 for (int i = 1; i <= n; i++) máximo=18 média=16.25 cout << "x" << i << "? "; float x; cin >> x; soma += x; // mesmo que soma = soma + x if (i == 1 x > maximo) maximo = x; cout << "máximo=" << maximo << "\n"; cout << "média=" << soma / n << "\n"; return 0; Extensões C++ 2

Primeiras extensões ao C 5 No exemplo anterior notam-se as seguintes extensões declaração de variáveis em qualquer ponto de um bloco (a variável existe até terminar a execução do bloco) declaração de variáveis na parte de inicialização do ciclo for (a variável existe até terminar a execução do ciclo) comentários começados com // (terminam no fim da linha) entrada e saída de dados mais segura e simples com streams Notar, no entanto, que o C é um subconjunto do C++, pelo que todas as features do C continuam disponíveis Entrada e saída de dados com streams cout << exp1 << exp2 <<... escreve (insere) no stream de saída os valores das expressões indicadas cout é o standard output stream (normalmente conectado ao ecrã) "<<" está definido para tipos de dados built-in e pode ser definido para tipos de dados definidos pelo utilizador cin >> var1 >> var2 >>... lê (extrai) do stream de entrada valores para as variáveis da direita cin é o standard input stream (normalmente conectado ao teclado) ">>" está definido para tipos de dados built-in e pode ser definido para tipos de dados definidos pelo utilizador salta caracteres "brancos" (espaço, tab, newline, carriage return, vertical tab e formfeed), que servem para separar os valores de entrada 6 cout.put(c) - escreve um carácter no stream de saída cin.get()- lê um carácter do stream de entrada; não salta caracteres brancos; retorna EOF se encontrar o fim do stream (no teclado é normalmente indicado com ctrl-z em Windows e ctrl-d em Unix) Extensões C++ 3

Entrada e saída de dados com streams 7 cout << endl - Escreve carácter de mudança de linha e despeja o buffer de saída cin.eof() testa se chegou ao fim do stream de entrada cerr standard error (para escrever mensagens de erro) operador ">>" devolve falso se falhar leitura if (! (cin >> x) ) cerr << "Erro na leitura de x\n"; cin, cerr são variáveis do tipo istream (input stream) definidas em "iostream.h" cout é uma variável do tipo ostream (output stream) definida em "iostream.h" Manipulação de ficheiros com streams 8 // Programa que copia o conteúdo do ficheiro f1 para o ficheiro f2 #include <fstream> ifstream origem ("f1"); // define variável e abre ficheiro // para leitura if (!origem) cerr << "Erro a abrir ficheiro f1\n"; return -1; ofstream destino ("f2"); // idem, para escrita if (!destino) cerr << "Erro a abrir ficheiro f2\n"; return -1; char c; while ( (c = origem.get())!= EOF ) destino.put(c); if (!origem.eof()!destino /*em bool dá false após erro*/) cerr << "Erro\n"; return -1; return 0; // ficheiros são fechados automaticamente Extensões C++ 4

Manipulação de ficheiros com streams 9 #include <fstream> ifstream stream de input sobre ficheiro ofstream stream de output sobre ficheiro f.open(nome) abre o ficheiro com o nome indicado f.close() fecha o ficheiro O tipo string 10 #include <string> // definições no espaço de nomes std #include <iostream> // idem using namespace std; // traz nomes de std para global string primeiro, ultimo, completo; cin >> primeiro; // lê (pára em espaço, tab ou newline) cin >> ultimo; // idem if (primeiro == ultimo) // compara cout << "Primeiro e último nome iguais!\n"; completo = primeiro + " " + ultimo; // concatena e copia cout << completo; // escreve return 0; Mais prático que usar arrays de caracteres! Extensões C++ 5

O tipo string (cont.) Inicialização: string mes = "Janeiro"; string mes("janeiro"); s.length() dá o comprimento da string s chama o membro-função length no objecto s s[i] refere-se ao caracter que se encontra na posição i da string s (0 <= i <= s.length()-1) Comparação de strings faz-se com operadores de comparação habituais (>, >=, <, <=, ==,!=) getline(cin,s) lê uma linha do input para a string s o primeiro argumento também pode ser do tipo ifstream (ficheiro) 11 O tipo string (cont.) s1 += s2 concatena s2 no fim de s1 s2 pode ser do tipo string, char * ou char s.substr(i,n) devolve substring de tamanho n e início na posição i de s segundo argumento pode ser omitido (nesse caso é até ao fim da string) s1.find(s2) devolve a posição inicial da primeira ocorrência de s2 em s1 ou string::npos se não existir nenhuma ocorrência de s2 em s1 s2 pode ser do tipo string ou char * s.c_str() dá a string em C (tipo char *) E muito mais! 12 Extensões C++ 6

Manipulação de ficheiros com streams (1) 13 #include <iostream> #include <fstream> #include <string> void copy( const string & entrada, const string & saida) if( entrada == saida ) cerr << "Entrada igual a saida" << endl; return; // abrir stream de input ifstream instream( entrada.c_str()); if(! instream ) cerr << "Entrada ilegal" << endl; return; // abrir stream de output ofstream outstream( saida.c_str()); if(! outstream ) cerr << "Saida ilegal" << endl; return; Manipulação de ficheiros com streams (2) 14 // e copiar char ch; while( instream.get(ch)) if (! outstream.put(ch)) cerr << "Erro de escrita!" << endl; return; int main(int argc, char* argv[]) string file1, file2; if(argc < 3) return; file1 = string(argv[1]); file2 = string(argv[2]); copy(file1, file2); Extensões C++ 7

Manipulação de strings (1) 15 #include <iostream> #include <string> using namespace std; int main (int argc, char* argv[]) string filename, basename, extname, tmpname; const string suffix("tmp"); /* for each command-line argument * (which is an ordinary C-string) */ for (int i=1; i<argc; ++i) // process argument as file name filename = argv[i]; // search period in file name string::size_type idx = filename.find('.'); if (idx == string::npos) // file name does not contain any period tmpname = filename + '.' + suffix; Manipulação de strings (2) 16 else /* split file name into base name and extension * - base name contains all characters before the period * - extension contains all characters after the period */ basename = filename.substr(0, idx); extname = filename.substr(idx+1); if (extname.empty()) // contains period but no extension: append tmp tmpname = filename; tmpname += suffix; else if (extname == suffix) // replace extension tmp with xxx tmpname = filename; tmpname.replace (idx+1, extname.size(), "xxx"); else // replace any extension with tmp tmpname = filename; tmpname.replace (idx+1, string::npos, suffix); // print file name and temporary name cout << filename << " => " << tmpname << endl; Extensões C++ 8

Manipulação de strings (2) 17 else /* split file name into base name and extension * - base name contains all characters before the period * - extension contains all characters after the period */ basename = filename.substr(0, idx); extname = filename.substr(idx+1); if (extname.empty()) // contains period but no extension: append tmp tmpname = filename; tmpname += suffix; else if (extname == suffix) // replace extension tmp with xxx tmpname = filename; tmpname.replace (idx+1, extname.size(), "xxx"); else // replace any extension with tmp tmpname = filename; tmpname.replace (idx+1, string::npos, suffix); // print file name and temporary name cout << filename << " => " << tmpname << endl; O tipo bool 18 Em C, não existem booleanos, existe apenas a convenção 0 é falso 0 é verdadeiro Em C++ existe o tipo bool As constantes deste tipo são true e false Booleanos são convertíveis implicitamente para inteiros seguindo as convenções do C Operadores lógicos e de comparação dão resultado do tipo bool Extensões C++ 9

O programa 2 formas para definir o programa C++ int 19 int main(int argc, char* argv[]) Notas Tipo de retorno é requerido: int implícito está a ser abandonado Instrução return é opcional; return 0 é implícito no final Passagem de argumentos por referência 20 // Troca valores de variáveis passadas na chamada void troca(int & x, int & y) int temp = x; x = y; y = temp; Uma variável do tipo T & (referência para T) é uma referência (alias ou nome alternativo) para um objecto do tipo T // Testa a função anterior int a = 1, b = 2; troca(a, b); // troca valores de a e b cout << "a =" << a << '\n'; cout << "b =" << b << '\n'; a=2 b=1 Mais simples do que trabalhar com apontadores! a: b: 1 2 2 1 x: y: troca(a, b) temp: 1 Usar quando se pretende que a função chamada altere valores de variáveis passadas na chamada Extensões C++ 10

Passagem de argumentos por valor 21 // Função inútil!! void troca(int x, int y) int temp = x; x = y; y = temp; // Testa a função anterior int a = 1, b = 2; troca(a, b); //??? cout << "a =" << a << '\n'; cout << "b =" << b << '\n'; troca(a, b) a: b: 1 2 x: y: 1 2 2 1 temp: 1 a=1 b=2 Simulação de passagem por referência com apontadores 22 // Função troca com apontadores em vez de referências void troca(int *xptr, int *yptr) int temp = *xptr; *xptr = *yptr; *yptr = temp; // Testa a função anterior int a = 1, b = 2; troca(&a, &b); // troca valores de a e b cout << "a =" << a << '\n'; cout << "b =" << b << '\n'; Passa o endereço da variável Permite que a função chamada altere o valor (conteúdo) da variável Pouco útil, porque é mais simples usar referências! a: 1 2 b: 2 1 troca(&a, &b) xptr: yptr: temp: 1 Mais complicado do que trabalhar com referências! Extensões C++ 11

Testar passagem de argumentos (1) 23 // Does not work void swapwrong( int a, int b ) int tmp = a; a = b; b = tmp; // C Style -- using pointers void swapptr( int *a, int *b ) int tmp = *a; *a = *b; *b = tmp; // C++ Style -- using references void swapref( int & a, int & b ) int tmp = a; a = b; b = tmp; Testar passagem de argumentos (2) 24 // Simple program to test various swap routines int main( ) int x = 5; int y = 7; swapwrong( x, y ); cout << "x=" << x << " y=" << y << endl; swapptr( &x, &y ); cout << "x=" << x << " y=" << y << endl; swapref( x, y ); cout << "x=" << x << " y=" << y << endl; return 0; Extensões C++ 12

Namespaces 25 Limitam escopo de nomes Como se podem qualificar os identificadores Directamente usando o prefixo do namespace std::cout << std::hex << 3.4 << std::endl; Declaração using suprime prefixo em identificadores seleccionados using std::cout; using std::endl; cout << std::hex << 3.4 << endl; Directiva using torna todos os identificadores do namespace globais using namespace std; cout << hex << 3.4 << endl; Resumo de extensões ao C 26 Comentários começados em // (vão até ao fim da linha) Definição de variáveis a meio de um bloco e na parte de inicialização da instrução for Biblioteca alternativa de entrada e saída de dados baseada em streams, mais segura e mais simples Tipo string (da biblioteca standard) mais fácil de usar do que as strings built-in herdadas do C Tipo bool com valores true e false Passagem de arguments por referência (dispensa apontadores) Namespaces para limitar escopo de nomes Extensões C++ 13