Trabalho CeC++
37 pág.

Trabalho CeC++


DisciplinaCaracterísticas das Linguagens de Programação I7 materiais123 seguidores
Pré-visualização5 páginas
da Programação Estruturada (Hehl, 1986):\u201cQualquer algoritmo pode ser escrito combinando-se blocos formados pelas estruturas de controle acima\u201d. (MARTHA, Luiz Fernando. Fundamentos de Programação Estruturada em C)
Um exemplo de decisão em C:
if (a > b)
{
 z = a;
}
else
{
 z = b;
}	
4.1.2	Programação Imperativa de C
	Programação imperativa descreve a computação como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar.
Exemplo em C:
float potencia(double val, unsigned pow)
{ double ret_val = 1.0;
 unsigned i;
 for(i = 0; i < pow; i++)
 ret_val *= val;
return(ret_val);
}
4.1.3	Programação Procedural de C
	A Programação Procedural constitui-se de chamadas a procedimentos, rotinas, subrotinas, métodos, ou funções.
Exemplo em C:
#include <stdio.h>
int main()
{
	potencia(5, 3)
 return 0;
}
4.2	Paradigmas característicos de C++
A Linguagem C++ foi desenvolvida para aceitar diversos paradigmas. O seu diferencial com relação a Linguagem C é permitir a Programação Orientada a Objetos (POO). 
4.2.1	Programação Orientada a Objetos em C++
A programação orientada a objetos implementa um conjunto de classes que definem os objetos presentes no software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.
Exemplo em C++:
class Passaro 
{
public:
 virtual void MostraNome()
 {
 std::cout << &quot;um passaro&quot;;
 }
 virtual ~Passaro() {}
};
 
class Cisne: public Passaro 
{ 
public:
 void MostraNome()
 {
 std::cout << &quot;um cisne&quot;; 
 }
};
 
int main()
{
 Passaro* passaro = new Cisne;
 
 passaro->MostraNome(); 
 
 delete passaro;
}
5	SINTAXE E SEMÂNTICA
5.1	Escopo de Variáveis
Escopo é o nível em que um dado pode ser acessado. É um contexto que delimita os valores e expressões as quais estão associados. O tipo de escopo vai determinar quais tipos de entidades este pode conter e como estas são afetadas, em outras palavras, a sua semântica. Normalmente, o escopo é utilizado para definir o grau de ocultação da informação, isto é, a visibilidade e acessibilidade às variáveis em diferentes partes do programa. 
Tanto C quanto C++ são Case-Sensitive, isto é, há diferença entre maiúsculas e minúsculas.
5.1.1	Escopo de C
	As variáveis em C podem ser declaradas basicamente de três maneiras: dentro de uma função, fora de uma função, e como parâmetro de uma função. Essas maneiras de declaração fazem com que as variáveis sejam chamadas de locais, globais ou parâmetros formais, respectivamente. 
5.1.2	Escopo de C++
	Um diferencial da Linguagem C++ é a implementação do operador de escopo. É permitido declarar variáveis de escopo global e local com mesmo nome, para isso utiliza-se o operador de resolução de escopo simbolizado por :: 
Exemplo:
#include<iostream.h>
#include<conio.h>
int x=3;		// variável de escopo global
	
int main()
{
 int x=0;		// variável de escopo local
 cout << &quot;utilização da variável de escopo global: &quot;<< ::x << endl;
 cout << &quot;utilização da variável de escopo local : &quot;<< x << endl;
return 0;
}
5.2	Palavras Reservadas
5.2.1	Em C
A lista de palavras reservadas está definida na Tabela 1 abaixo:
	auto
	double
	int
	long
	break
	else
	long
	switch
	case
	enum
	register
	typedef
	char
	extern
	return
	union
	const
	float
	short
	unsigned
	continue
	for
	signed
	void
	default
	goto
	sizeof
	volatile
	do
	if
	static
	while
Tabela 1
5.2.2	Em C++
A lista de palavras reservadas está definida na Tabela 2 abaixo:
	alignas (since C++11)
alignof (since C++11)
and
and_eq
asm
auto(1)
bitand
bitor
bool
break
case
catch
char
char16_t(since C++11)
char32_t(since C++11)
class
register
reinterpret_cast
wchar_t
while
virtual
void
	enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
xor
xor_eq
volatile
unsigned
using(1)
union
	return
short
signed
sizeof
static
static_assert(since C++11)
static_cast
struct
switch
template
this
thread_local(since C++11)
throw
true
try
typedef
typeid
typename
or_eq
private
protected
public
	compl
const
constexpr(since C++11)
const_cast
continue
decltype(since C++11)
default(1)
delete(1)
do
double
dynamic_cast
else
noexcept(since C++11)
not
not_eq
nullptr (since C++11)
operator
or
Tabela 2
5.3	Tipos de Dados Primitivos
5.3.1	Em C
	Os tipos básicos de dados em C são: char, int, float, double e void, como mostrado na Tabela 3, com seus respectivos intervalos e tamanhos. Uma característica peculiar da Linguagem C é de não possuir um tipo string. Para utilizar strings em C é necessário declarar uma variável como sendo um vetor de caracteres. Outra característica incomum em C é que não possui tipo boolean, para criar uma variável lógica basta associar os valores de 0 ou 1 para ela.
Tabela 3
5.3.2	Em C++
	Os tipos básicos de dados em C++ são: char, int, float, double, void, boolean e wchar_t, como mostrado na Tabela 4, com seus respectivos tamanhos e descrições. 
	Tipo
	Descrição
	Tamanho
	bool
	Valores Aceitos true ou false
	1 byte ou 8 bits
	char
	Intervalos de -128 a 127
	1 byte ou 8 bits
	int
	Intervalos de -2.147.483.648 a 2.147.483.647
	4 bytes ou 32 bits
	float
	Intervalos de 1,2e-38 até 3,4e+38.
	4 bytes ou 32 bits
	double
	Intervalos de 2,2e-308 a 1,8e+308
	8 bytes ou 64 bits
	long
	Intervalos de -2.147.483.648 a 2.147.483.647
	4 bytes ou 32 bits
	wchat_t
	Intervalos de -32.768 a 32.767
	4 bytes ou 32 bits
Tabela 4
#include <iostream.h>
#include <stdlib.h>
int main(){
 cout << &quot;bool &quot; << sizeof(bool) << endl;
 cout << &quot;char &quot; << sizeof(char) << endl;
 cout << &quot;int &quot; << sizeof(int) << endl;
 cout << &quot;float &quot; << sizeof(float) << endl; 
 cout << &quot;long &quot; << sizeof(long) << endl;
 cout << &quot;double &quot; << sizeof(double) << endl;
 cout << &quot;wchar_t &quot; << sizeof(wchar_t) << endl;
 return 0;}
5.3.3	Modificadores de tipos
Com a exceção do tipo void os tipos básicos de dados podem ter vários modificadores precedendo-os. Um modificador é usado para alterar o significado do tipo base para adequá-los melhor às necessidades da situação. São eles: signed, unsigned, long, short. As combinações possíveis são mostradas na Tabela 5 abaixo.
	Sequência
	Bytes ocupados
	Faixa (ou intervalo)
	short int
signed int
signed short int
wchat_t
signed wchar_t
	
2
	
-32.768 a 32.767
	unsigned short int
unsigned wchar_t
	2
	0 a 65.535
	int
long int
signed long int
	
4
	
-2.147.483.648 
até 2.147.483.647
	unsigned int
unsigned long int
	4
	0 a 4.294.967.295
	char
signed char
	1
	-128 a 127
	unsigned char
	1
	0 a 255
	bool
	1
	true ou false
	float
	4
	1,2e-38 a 3,4e+38
	double
long float
	8
	2,2e-308 a 1,8e+308
Tabela 5
5.4	Regras de Precedência e Associatividade de C/C++
As Linguagens possuem uma série de regras de precedência de operadores, para que o compilador saiba decidir corretamente qual operador será executado primeiro, em uma expressão com vários operadores. Essas regras seguem basicamente as regras algébricas. Além disso, é possível o uso de parênteses para forçar o compilador a executar uma parte de uma expressão antes das outras.
Além das regras de precedência, existem também certas regras de associatividade para determinados operadores que possuem o mesmo nível de precedência, como por exemplo os operadores de divisão e multiplicação. Quando o compilador encontra dois operadores com o mesmo nível de precedência em uma expressão, ele verifica se estes operadores possuem associatividade esquerda-para-direita ou direita-para-esquerda. Associatividade esquerda-para-direita significa que se estes dois operadores agirem sobre um mesmo operando, o operador da esquerda será aplicado primeiro. Da mesma forma, associatividade direita-para-esquerda significa que na mesma situação, o operador da direita