Ficha Unidade Curricular:

Linguagens De Programao I

Docente:

Rui Silva Moreira

Grau Acadmico:

Doutor

Categoria Funcional:

Professor Associado

Curso:

Engenharia Informtica

Ciclo De Estudos:

1 Ciclo

Ano Lectivo:

2015-2016

Semestre Curricular:

1 Semestre

N. Total ECTS:

7

N. ECTS Contacto:

3

Tipologia Das Aulas:

Terico-Prtica (TP) e Prtica-Laboratorial (PL)

 

 

 

 

 

 

 

 

 

 

 

 

1        Introduo

A linguagem C surgiu no inicio da dcada de 70 nos Bell Telephone Laboratories e foi utilizada como linguagem de desenvolvimento do sistema Unix. por isso considerada uma linguagem de sistema, com um mbito de aplicao alargado. Foi mais tarde normalizada pelo American National Standards Institute (ANSI) e considerada actualmente uma linguagem genrica de ampla utilizao.

Esta unidade curricular pretende que os alunos consigam compreender e expressar-se algoritmicamente atravs da linguagem C. Inicialmente os conceitos bsicos da linguagem so introduzidos (cf. tipos de dados, operadores e expresses, estruturas de controlo, estruturao de funes, vectores, estruturas, apontadores e gesto de memria, etc.) de modo a que os alunos consigam analisar, compreender e desenvolver programas em C. Posteriormente, pretende-se que os alunos dominem a implementao de estruturas de dados lineares com recurso a apontadores (cf. pilhas, listas ligadas, etc.) e ficheiros (cf. de texto e binrios), mecanismos vulgarmente utilizadas na modelizao e desenvolvimento de solues concretas. Os alunos devero ser capazes de compreender fluentemente qualquer programa em C e utilizar todas as potencialidades da linguagem para definir estruturas de dados e desenvolver os algoritmos necessrios resoluo de mltiplos problemas de programao.

2        Distribuio das Horas de Trabalho

ECTS:

Presencial: 7

No Presencial: 0

Total (Presencial + No Presencial): 7

 

Tipologia:

(x) Formao Especfica

( ) Formao Bsica

( ) Unidade Curricular de Opo

( ) Projecto de Graduao

 

Parcela                 (Horas)

Terica                                                                     

Terico-Prtica: 32

Prtica                                                                      

Prtica Laboratorial: 32

Ensino Clnico                                     

Seminrio                                             

Trabalho de Campo: 10

Estgio                                                                      

Orientao Tutorial: 10

Avaliao:

 

Nota: 1 ECTS = 26 horas

3        Requisitos Prvios

Algoritmia e Programao

4        Competncias / Resultados da Aprendizagem

Lista de competncias a alcanar no final da unidade curricular de acordo com o formato dos Descritores de Dublin:

1.     Conhecimento e capacidade de compreenso:

1.1.  Domnio da sintaxe e da semntica da linguagem C

1.2.  Capacidades de abstraco e de raciocnio na elaborao de programas em C

1.3.  Domnio das tcnicas e mtodos de estruturao e desenvolvimento de aplicaes e projectos em C

1.4.  Domnio da correcta utilizao de tipos de dados, operadores e expresses, estruturas de controlo, estruturao dos programas em funes, vectores, estruturas de dados e apontadores

1.5.  Domnio da implementao de estruturas de dados lineares com recurso a apontadores (cf. pilhas, listas ligadas, etc.) e ficheiros (cf. de texto e binrios)

2.     Aplicao de conhecimentos e compreenso:

2.1.  Conhecimentos para utilizar/aplicar a linguagem C na modelizao e implementao de programas em C para problemas reais

2.2.  Conhecimentos para compreender e interpretar fluentemente diferentes tipos de programas em C

2.3.  Conhecimentos para utilizar/aplicar a linguagem C na implementao de estruturas de dados dinmicas

2.4.  Conhecimentos para utilizar/aplicar tipos estruturados e ficheiros na resoluo de problemas reais

3.     Realizao de julgamento/tomada de decises:

3.1.  Capacidade para definir e escolher estruturas de dados alternativas

3.2.  Capacidade para definir e escolher a estruturao de programas

3.3.  Capacidade para definir e escolher solues algortmicas adequadas

3.4.  Capacidade para definir e escolher solues de armazenamento persistente de dados

4.     Comunicao:

4.1.  Capacidade de descrever/explicar um programa ou funo

4.2.  Capacidade para estruturar e desenvolver programas em grupo

4.3.  Capacidades de apresentao e justificao de solues desenvolvidas

5.     Competncias de auto-aprendizagem:

5.1.  Capacidade/curiosidade para conhecer e aprofundar conhecimentos sobre a utilizao de linguagens de programao

5.2.  Capacidades de autonomia e de auto-disciplina para procurar solues alternativas e ultrapassar autonomamente dificuldades inerentes ao desenvolvimento de programas

5        Contedos Programticos

0.     Apresentao

0.1.   Enquadramento e Objectivos

0.2.   Metodologia e Sistema de Avaliao

0.3.   Contedo Programtico e Bibliografia

1.     Introduo programao em C

1.1.   Ambiente de programao

1.1.1.     Plataforma de desenvolvimento (CodeBlocks)

1.1.2.     Criao de projectos

1.1.3.     Ciclo de desenvolvimento

1.1.4.     Execuo de programas

1.2.   Conceitos bsicos em C

1.2.1.     Estrutura dos programas

1.2.2.     Entrada e sada standard de dados

1.3.   Variveis e tipos de dados

1.3.1.     Tipos de dados primitivos

1.3.2.     Declarao e atribuio

1.3.3.     Operadores e expresses

1.4.   Estruturas de controlo bsicas

1.4.1.     Execuo condicional (if-else; switch)

1.4.2.     Ciclos (for, while, do-while)

1.4.3.     Controlo da execuo (break, continue)

2.     Estruturao dos programas em funes

2.1.   Definio de funes

2.2.   Passagem de parmetros por valor

2.3.   Variveis locais

2.4.   Valores de retorno

2.5.   Recursividade

3.     Vectores e Strings

3.1.   Declarao e inicializao de vectores

3.2.   Passagem de vectores por parmetro

3.3.   Definio de constantes e macros

3.4.   Cadeias de caracteres (Strings)

3.5.   Funes de manipulao de Strings

3.6.   Vectores multi-dimensionais

4.     Apontadores

4.1.   Declarao e inicializao apontadores

4.2.   Aritmtica de apontadores

4.3.   Apontadores e vectores (Arrays)

4.4.   Passagem de vectores para funes

4.5.   Passagem de parmetros por referncia

4.6.   Apontadores para apontadores

5.     Estruturas de dados

5.1.   Declarao de estruturas de dados (struct)

5.2.   Declarao e inicializao de variveis do tipo struct

5.3.   Declarao de tipos de estruturas (typedef)

5.4.   Operadores sobre estruturas

5.5.   Passagem de estruturas como parmetros de funes

5.6.   Alocao/libertao dinmica de memria

6.     Apontadores e estruturas de dados dinmicas

6.1.   Estruturas com apontadores

6.2.   Implementao de pilhas (Stack) com listas ligadas

6.3.   Implementao de filas (Queue) com listas ligadas

6.4.   Algoritmos de ordenao e pesquisa

7.     Ficheiros

7.1.   Entrada e sada de dados (streams)

7.2.   Ficheiros standard (stdin, stdout, stderr)

7.3.   Modos de abertura de ficheiros

7.4.   Ficheiros de texto

7.5.   Ficheiros binrios

7.6.   Ficheiros de acesso aleatrio

8.     Conceitos avanados

8.1.   Instrues ao pr-processador

8.2.   Variveis de registo (register)

8.3.   Variveis do tipo enum

8.4.   Variveis do tipo union

8.5.   Apontadores para funes

8.6.   Funes e variveis static

8.7.   Organizao de projectos em vrios ficheiros

6        Metodologia de Ensino-Aprendizagem e Execuo de ECTS

Designao da unidade lectiva; Horas Contacto (HC) - (T+TP+P+L+TC+OT); Horas de Estudo Individual (HEI); ECTS; Bibliografia (B)

1. Apresentao; HC:1; HEI;ECTS;B:

2. Introduo programao em C; HC: 6; HEI: 8; ECTS: 0,5; B: [1], [2], [3]

3. Estruturao dos programas em funes; HC: 6; HEI: 8; ECTS: 0,5; B: [1], [2], [3]

4. Vetores e Strings; HC: 8; HEI: 18; ECTS: 1; B: [1], [2], [3]            

5. Apontadores; HC: 8; HEI: 18; ECTS: 1; B: [1], [2], [3]

5. Estruturas de dados; HC: 10; HEI: 16; ECTS: 1; B: [1], [2], [3], [4], [5]

7. Apontadores e estruturas dados dinmicas; HC: 12; HEI: 26; ECTS: 1,5: B: [1], [2], [3], [4], [5]

8. Ficheiros; HC: 8; HEI: 18; ECTS: 1: B: [1], [2], [3]

9. Conceitos avanados; HC: 6; HEI: 8; ECTS: 0,5; B: [1], [2], [3]

 

TOTAL

Horas Contacto (TP+PL): 84

Horas Estudo Individual: 98

Horas Totais: 182

ECTS: 7

N ECTS = N horas/26

7        Sistema de Avaliao

O sistema de avaliao desta disciplina segue na generalidade o regulamento pedaggico da UFP e define em especfico as seguintes regras de clculo:

 

1 - Avaliao contnua

A avaliao compreende duas componentes: uma componente Terico-Prtica (TP) e uma componente Prtica-Laboratorial (PL). A classificao final da disciplina ser calculada atravs da seguinte expresso:

 

Nota final = 50% Nota Componente TP + 50% Nota Componente PL

 

Componente Terico-Prtica (TP)

A componente TP realiza-se de forma contnua durante o semestre e inclui os seguintes elementos de avaliao:

 

Dois testes terico-prticos de avaliao individual: incidem sobre os conhecimentos leccionados at ao momento em que so realizados. Um teste realiza-se a meio do semestre e o outro no fim do semestre em data a indicar. Os testes incluiro perguntas sobre a sintaxe e semntica da linguagem C, exerccios de interpretao ou escrita de programas ou instrues em C e a implementao de determinadas estruturas de dados e algoritmos utilizando a linguagem C.

 

A falta aos momentos de avaliao ser convertida numa nota 0 (zero) para efeitos de clculo da classificao. A classificao obtida na componente TP ser calculada atravs da seguinte expresso:

 

Nota Componente TP = 50% 1 Teste + 50% 2 Teste

 

Componente Prtica Laboratorial (PL)

A componente PL realiza-se de modo contnuo durante as aulas e atravs da realizao de projectos prticos realizados individualmente ou em grupo (mximo 2 alunos), sobre um ou mais temas propostos durante o semestre. A avaliao da componente PL inclui os seguintes elementos de avaliao:

 

Um teste prtico de avaliao individual: incide sobre os conhecimentos leccionados at ao momento em que so realizados. O teste realiza-se em data a indicar e incluir exerccios de implementao de estruturas de dados e algoritmos utilizando a linguagem C.

 

Projecto: no final do semestre (em data a especificar) os alunos devero entregar um relatrio com todas as estruturas de dados e as funes C que implementam a totalidade do projecto proposto. Os alunos tero que marcar presena em duas ou mais sesses de discusso/anlise dos trabalhos propostos durante as horas de atendimento para acompanhamento do projecto e/ou esclarecimento de dvidas. Devero fazer ainda, em sala de aula, uma defesa e demonstrao das solues desenvolvidas.

 

A falta aos momentos de avaliao ser convertida numa nota 0 (zero) para efeitos de clculo da classificao. A classificao obtida na componente PL ser calculada atravs da seguinte expresso:

 

Nota Componente PL = 40% Teste + 60% Projecto.

 

O acesso s pocas de exame, relativas apenas componente TP, faz-se de acordo com o regulamento pedaggico. A componente PL no pode ser efectuada por exame.

 

2 - Exames

Os exames sero realizados de acordo com o regulamento pedaggico da UFP nos perodos previstos no cronograma e incidiro sobre a totalidade da matria includa no programa da disciplina. O docente poder solicitar o desenvolvimento de trabalhos com apresentao oral de modo a melhor aferir o nvel de conhecimentos e competncias alcanadas pelos alunos. A classificao final do aluno ser calculada utilizando a equao indicada acima.

8        Bibliografia

[1] L. Damas, Linguagem C, 10 Edio, FCA, 1999.

[2] M. S, Fundamentos de Programao usando C, FCA, 2004.

[3] B. Kernighan & D. Ritchie, The C Programming Language, Prentice-Hall International, 1988.

[4] J. Tremblay & P. Sorensen, Introduction to Data Structures Applications, McGraw-Hill, 1984.

[5] J. Vasconcelos & J. Carvalho, Algoritmia e Estruturas de Dados: Programao nas linguagens C e Java, Centro Atlntico, 2005.

9        Recursos Didcticos

Computador Porttil

CodeBlocks (http://www.codeblocks.org/)

10    Resumo

Introduo programao em C: ambiente de programao; estruturao dos programas; variveis e tipos de dados primitivos; operadores e expresses; controlo do fluxo de execuo. Estruturao dos programas em funes: passagem de parmetros por valor, variveis locais e funes recursivas. Vectores e Strings: declarao e inicializao de vectores; passagem de vectores por parmetro; funes de manipulao de Strings e vectores multi-dimensionais. Apontadores: declarao e inicializao de apontadores; aritmtica de apontadores; apontadores e vectores; passagem de parmetros por referncia e apontadores para apontadores. Estruturas de dados: declarao de tipos e estruturas de dados (struct); declarao e inicializao de variveis do tipo struct; passagem de estruturas como parmetros de funes; alocao/libertao dinmica de memria. Apontadores e estruturas de dados dinmicas: implementao de pilhas e filas com listas ligadas. Ficheiros: entrada e sada de dados e streams de ficheiros (stdin, stdout, stderr); ficheiros de texto e binrios; Ficheiros sequenciais e de acesso aleatrio. Conceitos avanados: instrues ao pr-processador; variveis de registo, enumerao e unio; apontadores para funes; funes e variveis estticas.

11    Abstract

Introduction to C programming: programming environment, structuring programs; variables and primitive data types; operators and expressions; flow control. Structuring programs into functions: passing parameters by-value, local variables and recursive functions. Arrays and Strings: declaring and initializing arrays; passing arrays as parameters; functions for string manipulation and multi-dimensional arrays. Pointers: declaring and initializing pointers; pointer arithmetic; pointers and arrays; passing parameters by-reference and pointer to pointers. Data structures: declaring types and data structures; declaring and initializing variables of type struct; operators on structures; passing structures as functions parameters; dynamic memory allocation/deallocation. Pointers and dynamic data structures: implementing stacks and queues with linked lists. Files: I/O data streams; text and binary files; sequential and random access files. Advanced concepts: pre-processor instructions; variables of type register, enum and union; pointers to functions; static variables and functions.

 


 

12    ECTS

Course Title:

Linguagens de programao I / Programming languages I

Code

Language of Instruction

PT

Assessment Method

Avaliao contnua

Continue evaluation

Level of Course

Licenciatura

Undergraduate

Number of Credits

 

Year of Studies

1 Ciclo, 1 ano

Name of Lecturer

Rui Moreira

Winter Semester     X

Spring Semester      ð

 

Total Hours:

175

Course Objectives:

Programao de estruturas de dados e algoritmos em C.

 

Programming da structures and algorithms in C.

Course Description:

1. Introduo programao em C

2. Estruturao dos programas em funes

3. Vectores e Strings

4. Apontadores

5. Estruturas de dados

6. Apontadores e estruturas de dados dinmicas

7. Ficheiros

8. Conceitos avanados

 

1. Introducing to C programming

2. Structuring programs into functions

3. Vectors and strings

4. Pointers

5. Data structures

6. Pointers and dynamic data structures

7. Files

8. Advanced concepts

 

 

 

 

 

 

 

 

 

 

Obligatory Reading

[1] L. Damas, Linguagem C, 10 Edio, FCA, 1999.

[2] M. S, Fundamentos de Programao usando C, FCA, 2004.

[3] B. Kernighan & D. Ritchie, The C Programming Language, Prentice-Hall International, 1988.

Supplementary Reading

[4] J. Tremblay & P. Sorensen, Introduction to Data Structures with Applications, McGraw-Hill, 1984.

[5] J. Vasconcelos & J. Carvalho, Algoritmia e Estruturas de Dados: Programao nas linguagens C e Java, Centro Atlntico, 2005.

Method of Teaching

Aulas terica e prticas / Theoretical and practical classes

Prerequisites

Conhecimentos de estruturas de dados e algoritmia

Knowledge of data structures and algorithms

Assessment method

 

 

 

 

 

Exames & projectos / Exams & projects

Responsible person

Rui Moreira

e-mail: rmoreira@ufp.edu.pt

 

 

 


 

Modelo A3ES: LP1

 

1        Objetivos de Aprendizagem (conhecimentos, aptides e competncias a desenvolver pelos estudantes) – 1000 caracteres

Esta unidade curricular pretende que os alunos consigam compreender e expressar-se algoritmicamente atravs da linguagem de programao C. Inicialmente os conceitos bsicos da linguagem so introduzidos (cf. tipos de dados, operadores e expresses, estruturas de controlo, estruturao de funes, vectores, estruturas, apontadores e gesto de memria, etc.) de modo a que os alunos consigam analisar, compreender e desenvolver programas em C. Posteriormente, pretende-se que os alunos dominem a implementao de estruturas de dados lineares com recurso a apontadores (cf. pilhas, listas ligadas, etc.) e ficheiros (cf. texto e binrios), bem como de mecanismos vulgarmente utilizadas na modelizao e desenvolvimento de solues concretas em C. Os alunos devero ser capazes de compreender fluentemente qualquer programa em C e utilizar todas as potencialidades da linguagem para definir estruturas de dados e desenvolver os algoritmos necessrios resoluo de mltiplos problemas de programao.

Learning Goals (knowledge, skills and competences to be developed by students)

This course intents students may understand and algorithmically express themselves through the C programing language. Initially the basic concepts of the language are introduced (cf. data types, operators and expressions, control structures, structuring functions, vectors, structs, pointers and memory management, etc.) so that students can analyze, understand and develop programs in C. Thereafter, it is intended that students master the implementation of linear data structures using pointers (cf. stacks, linked lists, etc.) and files (cf. text and binary), as well as mechanisms commonly used in the modeling and development of practical and concrete C solutions. Students should be able to fluently understand any C program and make full use of the language for defining data structures and develop the algorithms needed to solve multiple programming problems.

2        Contedos Programticos – 1000 caracteres

1. Introduo programao em C

2. Estruturao dos programas em funes

3. Vectores e Strings

4. Apontadores

5. Estruturas de dados

6. Apontadores e estruturas de dados dinmicas

7. Ficheiros

8. Conceitos avanados

 

Program Content

1. Introducing to C programming

2. Structuring programs into functions

3. Vectors and strings

4. Pointers

5. Data structures

6. Pointers and dynamic data structures

7. Files

8. Advanced concepts

 

3        Demonstrao da coerncia dos contedos programticos com os objetivos de aprendizagem da unidade curricular – 1000 caracteres

 

Os contedos programticos esto coerentes com os objectivos de aprendizagem na medida em que abordam todos os temas sobre a linguagem C que devero ser dominados pelos alunos no final da unidade curricular.  Em particular comea-se por abordar os conceitos fundamentais inerentes aos tipos de dados e estruturao de programas em C. Particulariza-se inicialmente o estudo na manipulao de vetores e strings e posteriormente abordam-se os apontadores bem como a sua aplicao na passagem de parmetros por referncia e na definio e manipulao de estruturas de dados dinmicas. Todos os temas abordados so exemplificados com a aplicao em vrios exerccios concretos. Os objectivos da aprendizagem esto portanto alinhados com os temas abordados tanto ao nvel terico-prtico como prtico, sendo aplicados em exemplos concretos variados tanto nas aulas como em trabalhos para casa.

 

Demonstration of the consistency between the syllabus and the learning objectives of the course

 

The contents are consistent with the learning objectives since they addresses all the issues about the C programming language that must be mastered by the students at the end of the course. In particular it begins by addressing the fundamental concepts inherent to applications structure and data types used on C programs. Initially the study particularizes the manipulation of vectors and strings and afterwards addresses pointers as well as its application for passing parameters that reference out scope variables (passage by reference) and defining and manipulating dynamic data structures. All covered topics are exemplified with applications in several practical exercises. The learning objectives are therefore aligned with the themes addressed both at practical and theoretic-practical levels, and applied in various concrete examples both in the classroom and in homework assignments.

 

 

4        Metodologias de ensino (avaliao includa) – 1000 caracteres

 

Esta unidade curricular est organizada em aulas terico-prticas (TP) e prticas (PR). A metodologia de ensino utilizada no mbito das aulas TP baseia-se na exposio oral dos contedos programticos e na sua imediata exemplificao em aplicaes e exerccios concretos sobre os temas abordados. Paralelamente, no contexto das aulas prticas laboratoriais, os alunos tm oportunidade de  aplicar e desenvolver mais exerccios que complementam a base de experincias com o desenvolvimento e estruturao de funes e programas em C. A avaliao contnua, contemplando em partes iguais a componente TP e PR. A componente TP avaliada por dois exames realizados durante o semestre. A componente PR avaliada pela realizao de um exame e pela implementao de um projeto prtico cujos requisitos so propostos durante o semestre.

Teaching methodologies (including evaluation)

This course is organized into theoretic-practical (TP) and practical (PR) classes. The teaching methodology used within the TP classes is based on the oral presentation of contents and immediate exemplification with concrete applications and exercises on the topics covered. In parallel, in the context of laboratory classes, students have the opportunity to apply and further develop exercises that complement the experience basis regarding the development and structuring of functions and programs in C. The assessment is continuous, covering in equal parts the TP and PR components. The TP component is assessed by two exams during the semester. The PR component is assessed through an exam and the implementation of a practical project whose requirements are proposed during the semester.

 

5        Demonstrao da coerncia das metodologias de ensino com os objetivos de aprendizagem da unidade curricular – 3000 caracteres

 

As metodologias de ensino aplicadas nesta unidade curricular procuram levar os alunos a contactar e dominar os conceitos mais importantes para o desenvolvimento de aplicaes  na linguagem de programao C. Procura-se ainda que os alunos desenvolvam competncias prticas na estruturao de aplicaes e desenvolvimento de programas em C. As aulas terico-prticas e em particular as aulas prticas laboratoriais permitem um contato permanente com a implementao e estruturao de aplicaes com base em funes, facilitando portanto o progresso gradual no desenvolvimento de aplicaes em C. Esta experincia e contato com contextos prticos especficos e concretos permite ainda melhorar o conhecimento e aplicao da linguagem C, sendo essencial para aumentar o progresso tcnico e as competncias de programao dos estudantes.

Demonstration of the consistency between the teaching methodologies with the learning objectives of the course

Teaching methodologies applied in this course seek to lead students to contact and master the most important concepts for the development of applications using the C programming language. We intend also that students develop practical skills in structuring applications and development of programs in C. The theoretic-practical classes and in particular the laboratory classes allow permanent contact with the structuring and implementation of applications mainly based on functions, thus facilitating the gradual progress in the development of applications in C. This experience and contact with specific and concrete practical contexts allows also to improve the knowledge and the application of the C language, thus being essential to increase the technical progress and programming skills of students.

 

6        Bibliografia de consulta/existncia obrigatria – 1000 caracteres

[1] L. Damas, Linguagem C, 10 Edio, FCA, 1999.

[2] M. S, Fundamentos de Programao usando C, FCA, 2004.

[3] B. Kernighan & D. Ritchie, The C Programming Language, Prentice-Hall International, 1988.

[4] J. Tremblay & P. Sorensen, Introduction to Data Structures Applications, McGraw-Hill, 1984.

[5] J. Vasconcelos & J. Carvalho, Algoritmia e Estruturas de Dados: Programao nas linguagens C e Java, Centro Atlntico, 2005.