Commit 4bb0c2bd authored by Jomaro Rodrigues's avatar Jomaro Rodrigues

Closes #4

parent 8e8e69a0
......@@ -2,229 +2,230 @@
\begin{document}
êstruturas
\chapter{estruturas}
Uma estrutura é uma coleção de uma ou mais variáveis agrupadas sob um único nome para facilitar a
sua manipulação. As variáveis de uma estrutura, ao contr'ario das vari'aveis de uma matriz, podem ser de
sua manipulação. As variáveis de uma estrutura, ao contrário das variáveis de uma matriz, podem ser de
diferentes tipos de dados. Uma estrutura pode conter quaisquer tipos de dados válidos em C, inclusive
matrizes e até mesmo outras estruturas.
10.1 A palavra-chave struct
\section{A palavra-chave struct}
struct rotulof
tipo campo1;
...
tipo campoN;
g [inst^ancia];
\begin{lstlisting}
struct rotulo {
tipo campo1;
...
tipo campoN;
} [instância];
\end{lstlisting}
A palavra-chave struct é usada para declarar estruturas em C. Ela identifica o início de uma definição
de estrutura e é sempre seguida por um rótulo, que 'e o nome atribuído `a estrutura. A seguir v^em os
membros da estrutura, delimitados entre chaves. Uma inst^ancia, que é uma declaração de uma variável
de estrutura e é sempre seguida por um rótulo, que é o nome atribuído à estrutura. A seguir vêm os
membros da estrutura, delimitados entre chaves. Uma instância, que é uma declaração de uma variável
do tipo da estrutura, também pode ser incluída na definição.
10.2 Definindo e declarando
êxistem basicamente duas maneiras de definir e declarar estruturas em C:
\section{Definindo e declarando}
ffl A primeira é colocar uma lista com um ou mais nomes de variáveis imediatamente após a definição
existem basicamente duas maneiras de definir e declarar estruturas em C:
da estrutura, conforme o exemplo a seguir:
\begin{itemize}
struct coord f /* definicao de uma estrutura */
\item A primeira é colocar uma lista com um ou mais nomes de variáveis
imediatamente após a definição da estrutura, conforme o exemplo a seguir:
int x;
int y;
g primeira, segunda; /* declaracao de variaveis */
\begin{lstlisting}
struct coord { /* definicao de uma estrutura */
int x;
int y;
} primeira, segunda; /* declaracao de variaveis */
\end{lstlisting}
êstas instruções definem o tipo de estrutura coord e declaram duas estruturas (variáveis) deste
estas instruções definem o tipo de estrutura coord e declaram duas estruturas (variáveis) deste
tipo, chamadas primeira e segunda.
ffl A segunda maneira é declarar variáveis da estrutura em algum outro ponto do código-fonte. Por
êxemplo:
\item A segunda maneira é declarar variáveis da estrutura em algum outro ponto do código-fonte. Por
struct coord f /* definicao de uma estrutura */
int x;
int y;
g;
exemplo:
\begin{lstlisting}
struct coord { /* definicao de uma estrutura */
int x;
int y;
};
/* instrucoes adicionais aqui... */
37
38 CAP
'
ITULO 10. ESTRUTURAS
/* declaração de variaveis */
struct coord primeira, segunda;
\end{lstlisting}
\end{itemize}
10.2.1 Acessando os membros de uma estrutura
Os membros individuais de uma estrutura podem ser usados como qualquer outra variável respeitandose as características do seu tipo. Para acessar os membros de uma estrutura, utiliza-se o operador de
membro de estrutura '.' entre o nome da estrutura e o nome do membro.
\subsection{Acessando os membros de uma estrutura}
êxemplo:
Os membros individuais de uma estrutura podem ser usados como qualquer outra variável
respeitando-se as características do seu tipo. Para acessar os membros de uma estrutura,
utiliza-se o operador de membro de estrutura '.' entre o nome da estrutura e o nome do membro.
struct coord f
exemplo:
int x;
int y;
g primeira, segunda;
\begin{lstlisting}
struct coord {
int x;
int y;
} primeira, segunda;
primeira.x = 50;
primeira.y = -30;
\end{lstlisting}
Uma das vantagens de se utilizar estruturas ao invés de variáveis individuais 'e a capacidade de copiar
Uma das vantagens de se utilizar estruturas ao invés de variáveis individuais é a capacidade de copiar
informações entre estruturas do mesmo tipo através de uma única instru,cão de atribui,c~ao. Continuando
com o exemplo anterior, a instrução:
segunda = primeira;
é equivalente a:
\begin{lstlisting}
segunda.x = primeira.x;
segunda.y = primeira.y;
\end{lstlisting}
êxemplo:
exemplo:
Recebe informações sobre as coordenadas dos cantos de um ret^angulo e calcula a sua área. Presume
Recebe informações sobre as coordenadas dos cantos de um retângulo e calcula a sua área. Presume
que a coordenada y no canto superior esquerdo é maior que a coordenada y no canto inferior direito, que
a coordenada x do canto inferior direito é maior do que a coordenada x do canto superior esquerdo, e que
todas as coordenadas são positivas.
#include !stdio.h?
struct coordf
\begin{lstlisting}
#include <stdio.h>
int x;
int y;
g;
struct coord{
int x;
int y;
};
struct retangf
struct coord esqcima;
struct coord dirbaixo;
g;
struct retang{
struct coord esqcima;
struct coord dirbaixo;
};
void main ()
f
int altura, largura;
long area;
struct retang quadro;
/* recebe as coordenadas */
printf(""nDigite a coordenada x superior esq.:");
scanf("%d", &quadro.esqcima.x);
printf(""nDigite a coordenada y superior esq.:");
10.2. DEFININDO E DECLARANDO 39
scanf("%d", &quadro.esqcima.y);
printf(""nDigite a coordenada x inferior dir.:");
scanf("%d", &quadro.dirbaixo.x);
printf(""nDigite a coordenada y inferior dir.:");
scanf("%d", &quadro.dirbaixo.y);
/* calcula o comprimento e a largura */
largura = quadro.dirbaixo.x - quadro.esqcima.x;
altura = quadro.esqcima.y - quadro.dirbaixo.y;
/* calcula e informa a area */
area = largura * altura;
printf(""nO retangulo tem uma area de %ld unidades.", area);
g
{
int altura, largura;
long area;
struct retang quadro;
/* recebe as coordenadas */
printf("Digite a coordenada x superior esq.:\n");
scanf("%d", &quadro.esqcima.x);
printf("Digite a coordenada y superior esq.:\n");
scanf("%d", &quadro.esqcima.y);
printf("Digite a coordenada x inferior dir.:\n");
scanf("%d", &quadro.dirbaixo.x);
printf("Digite a coordenada y inferior dir.:\n");
scanf("%d", &quadro.dirbaixo.y);
/* calcula o comprimento e a largura */
largura = quadro.dirbaixo.x - quadro.esqcima.x;
altura = quadro.esqcima.y - quadro.dirbaixo.y;
/* calcula e informa a area */
area = largura * altura;
printf("O retangulo tem uma area de %ld unidades.\n", area);
}
\end{lstlisting}
A saída será:
\begin{verbatim}
Digite a coordenada x superior esq.: 1
Digite a coordenada y superior esq.: 1
Digite a coordenada x inferior dir.: 10
Digite a coordenada y inferior dir.: 10
O ret^angulo tem uma área de 81 unidades.
O retângulo tem uma área de 81 unidades.
\end{verbatim}
OBS.: Quando estruturas são passadas por refer^encia, utilizamos o operador '-?' ao invés do operador
OBS.: Quando estruturas são passadas por referência, utilizamos o operador `\verb|->|' ao invés do operador
'.'.
êxemplo:
exemplo:
\begin{lstlisting}
/* Passando argumentos por valor e por referencia */
struct coordf
int x;
int y;
g;
struct coord{
int x;
int y;
};
void por valor( struct coord );
void por ref( struct coord * );
void main ()
f
struct coord ponto;
ponto.x = 2;
ponto.y = 4;
printf(""nAntes de chamar por valor(): x = %d, y = %d",
ponto.x,ponto.y);
{
por valor(ponto); /* chamada por valor */
printf(""nDepois de chamar por valor(): x = %d, y = %d",
struct coord ponto;
ponto.x,ponto.y);
ponto.x = 2;
ponto.y = 4;
por ref(&ponto); /* chamada por referencia */
printf(""nDepois de chamar por ref(): x = %d, y = %d",
printf("Antes de chamar por valor(): x = %d, y = %d\n", ponto.x,ponto.y);
ponto.x,ponto.y);
por_valor(ponto); /* chamada por valor */
printf(""nDepois de chamar por valor(): x = %d, y = %d", ponto.x,ponto.y);
40 CAP
'
ITULO 10. ESTRUTURAS
g
por_ref(&ponto); /* chamada por referencia */
printf(""nDepois de chamar por ref(): x = %d, y = %d", ponto.x,ponto.y);
}
void por valor(struct coord ponto)
f
ponto.x = ponto.y = 0;
g
{
ponto.x = ponto.y = 0;
}
void por ref(struct coord *ponto)
f
{
ponto->x = ponto->y = 0;
}
\end{lstlisting}
ponto-?x = ponto-?y = 0;
g
A saída será:
\begin{verbatim}
Antes de chamar por valor(): x = 2, y = 4
Depois de chamar por valor(): x = 2, y = 4
Depois de chamar por ref(): x = 0, y = 0
\end{verbatim}
\section{Exercício}
10.3 Exercício
Crie um pequeno banco de dados que armazenará os seguintes dados de um aluno:
ffl código de matrícula
ffl nome
ffl telefone
ffl endereço
\begin{itemize}
\item código de matrícula
\item nome
\item telefone
\item endereço
\end{itemize}
O programa deverá ter um menu com as seguintes opções:
ffl inserir aluno
ffl imprimir alunos
ffl ordenar alunos
Cada aluno inserido será armazenado em um vetor de tamanho TAM MAX e o programa dever'a
\begin{itemize}
\item inserir aluno
\item imprimir alunos
\item ordenar alunos
\end{itemize}
Cada aluno inserido será armazenado em um vetor de tamanho \verb|TAM_MAX| e o programa deverá
acusar erro se houver tentativa de inserção de alunos, caso o vetor esteja cheio.
No caso da função de ordena,c~ao, esta deverá ser realizada pela ordem alfabética do nome.
No caso da função de ordenação, esta deverá ser realizada pela ordem alfabética do nome.
\end{document}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment