De Objective Caml para C e C++/Construção de tipos: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 78:
Define um tipo equivalente em C/C++.
 
===Tipos arranjosArranjos===
 
A linguagem C permite declarar arranjos uni-dimensionais, dando as seguintes informações: o tipo dos elementos, e o tamanho do arranjo. Por exemplo, o seguinte código define uma variável <tt>notas</tt> para guardar quatro valores do tipo <tt>float</tt>, utilizaremos o seguinte código:
float notas [4];
Portanto a sintaxe consiste em identificar o tipo dos elementos, através de uma expressão de tipos, o nome do arranjo, e entre colchetes o tamanho do arranjo.
 
Opcionalmente, podemos associar um valor inicial aos elementos do arranjo assim definido. Há duas possibilidades
* Para definir o mesmo valor em todas as posições do arranjo, colocamos apenas o valor do primeiro elemento. Por exemplo, o código seguinte corresponde à definição de um arranjo similar ao exemplo anterior, mas onde todas as posições do arranjo armazenam o valor <math>0,0</math>:
float notas [4] = { 0.0f };
Portanto a sintaxe exige que a expressão de inicialização seja colocada entre chaves.
* Também pode-se definir individualmente cada posição do arranjo. Isso é realizado colocando entre chaves, a enumeração dos valores do arranjo. O exemplo seguinte portanto é equivalente ao anterior:
float notas [4] = {0.0f, 0.0f, 0.0f, 0.0f};
A sintaxe exige que os elementos da inicialização sejam separados por vírgulas.
 
====Operadores sobre arranjos====
 
C e C++ oferecem a possibilidade de acessar cada posição do arranjo individualmente. Como em Objective Caml, o endereço da primeira posição é <math>0</math> e as demais posições são obtidas somando um à anterior. Por exemplo, o código seguinte declara um arranjo e inicializa todas as suas posições em seqüência.
float notas [4];
notas[0] = 0.0f;
notas[1] = 0.0f;
notas[2] = 0.0f;
notas[3] = 0.0f;
Evidentemente, uma repetição <tt>for</tt> é uma construção particularmente adequada para percorrer todas as posições de um arranjo. Por exemplo:
float notas [4];
for (int i = 0; i < 4; ++i)
notas[i] = 0.0f;
Objective Caml possui uma função que, aplicada a um arranjo, retorna o número de posições do arranjo. Isso não existe nem C nem em C++ (C++ tem uma outra implementação de arranjo, chamada <tt>vector</tt> que tem essa funcionalidade-será apresentada mais adiante).
 
====Um exemplo mais significativo====
 
float media (float tab[], int n) // calculo da media de um arranjo tab de floats de tamanho n.
{
float sum = 0.0f;
for (int i = 0; i < n; ++i)
sum += tab[i];
return sum/n;
}
int main()
{
int n;
cin >> n; // o numero de alunos e lido
if (n == 0) return 0;
float notas[3][n];
for (int i = 0; i < n; ++i) // para cada aluno
cin >> notas[0][i] >> notas[1][i] >> notas[2][i]; // ler as tres notas e guardar no arranjo notas
for (int i = 0; i < 3; ++i) { // calculo e impressao da media de cada prova
cout << "A media da " << i << "a prova e " << media(tab[i], n) << endl;
}
}
 
===Tipos registros===