Académique Documents
Professionnel Documents
Culture Documents
#include<stdio.h> #include<sys/io.h> //Libreria para acceso a los puertos #define PUERTO 0x378 //Direccion Hexadecimal del puerto paralelo #define espera 10000// tiempo de espera int main() { int valor, i; int lectura; ioperm(PUERTO, 3, 1); //Otorgar permisos para puerto Paralelo outb(1, PUERTO + 2); for (;;) { outb(1, PUERTO); usleep (espera); outb(2, PUERTO); usleep (espera); outb(4, PUERTO); usleep (espera); outb(8, PUERTO); usleep (espera); lectura = inb(PUERTO + 2); if((lectura & 0x0F) != 1) break; } outb(0, PUERTO); // outb(2, PUERTO); // Enviar 2 al puerto paralelo // valor = inb(PUERTO); //Lectura del Valor del Puerto // printf("Valor del Puerto: %d\n", valor); ioperm(PUERTO, 3, 0); //Remover permisos para puerto Paralelo return 0; }
________________________________________________________
Matrizes na Linguagem C
By Jair Gustavo de Mello Torres
De forma similar, a seguinte declarao cria uma matriz do tipo float, que contm 50 salrios:
Quando uma matriz declarada, a Linguagem C aloca memria suficiente para conter todos os elementos. O primeiro item est na posio 0. Por exemplo, nas matrizes notas esalarios, os comandos a seguir atribuem os valores 80 e 35000 aos primeiros elementos da matriz:
Como o primeiro elemento da matriz inicia no deslocamento 0, o ltimo elemento da matriz ocorre uma posio antes do tamanho da matriz. Dadas as matrizes anteriores, os comandos a seguir atribuem valores ao ltimo elemento de cada matriz:
#include <stdio.h>
printf("Memoria para conter int notas[100] %d bytes\n", sizeof(notas)); printf("Memoria para conter float salar[100] %d bytes\n", sizeof(salar)); printf("Memoria para conter char string[100] %d bytes\n", sizeof(string)); }
No primeiro caso, o compilador alocar 22 bytes para armazenar a string. No segundo, o compilador alocar uma matriz de 64 bytes, inicializando os primeiro 8 caracteres com as letras "Matrizes" e o caracter NULL. A maioria dos compiladores tambm inicializar as posies de bytes restantes com NULL. Quando declara-se matrizes de outros tipos, pode inicializar matrizes da mesma forma. Por exemplo, o comando a seguir inicializa a matriz de inteiros notas com os valores 80, 70, 90, 85 e 80:
Quando atribui-se valores iniciais a uma matriz, necessrio delimitar os valores por abre e fecha chaves ( {} ). No caso anterior, o tamanho da matriz igual ao nmero de valores atribudos. O comando a seguir, no entanto, atribui quatro valores de ponto flutuante a uma matriz que pode armazenar 64 valores:
Dependendo do compilador, ele pode atribuir 0 aos elementos aos quais o programa no atribui valores explcitos. No entanto, como regra, no se deve assumir que o compilador inicializar os outros elementos. Alm disso, se no for especificado um tamanho de matriz, o compilador alocar memria suficiente para conter somente os valores que voc especificar. Por exemplo, a seguinte declarao de matriz cria uma matriz grande o suficiente para conter trs valores do tipo long:
#include <stdio.h>
printf("Valores da Matriz\n"); printf("notas[0] %d\n", notas[0]); printf("notas[1] %d\n", notas[1]); printf("notas[2] %d\n", notas[2]); printf("notas[3] %d\n", notas[3]); printf("notas[4] %d\n", notas[4]);
i = 2; matriz[i] = 80;
O cdigo a seguir usa a varivel i e um lao for para exibir os elementos da matriznotas:
#include <stdio.h>
void main(void) { int notas[5] = {80, 70, 90, 85, 80}; int i;
Como visto, quando os programas trabalham com matrizes, necessrio especificar o tamanho da matriz. Por exemplo, o programa a seguir declara uma matriz de cinco valores e depois usa um lao for para exibir os valores da matriz:
#include <stdio.h>
void main(void) { int valores[5] = {80, 70, 90, 85, 80}; int i;
Por exemplo, suponha que seja necessrio alterar o cdigo anterior de tal forma que ele suporte 10 valores. Precisar alterar no somente a declarao da matriz, mas tambm o lao for. Quanto mais alteraes forem feitas em um programa, maiores as chances de errar. O programa a seguir declara uma matriz com base na constante TAM_MATRIZ. Como se v, o programa no somente usa a constante para declarar a matriz, mas tambm usa a constante como a condio final para o lao for:
void main(void) {
Se mais tarde for necessrio alterar o tamanho da matriz, poder alterar o valor atribudo constante TAM_MATRIZ para que o programa automaticamente atualize os laos que controlam a matriz como o tamanho da matriz.
#include <stdio.h> void exibe_matriz(int valores[], int num_de_elementos) { int i; for (i = 0; i < num_de_elementos; i++) printf("%d\n", valores[i]); } void main(void) { int notas[5] = {70, 80, 90, 100, 90};
exibe_matriz(notas, 5); }
Quando uma funo recebe uma matriz como parmetro, o programa no precisa especificar o tamanho da matriz na declarao do parmetro. No caso da funoexibe_valores, os colchetes aps o nome da varivel valor informam o compilador de que o parmetro uma matriz. Sabendo que o parmetro uma matriz, o compilador no se preocupa com o tamanho da matriz que o programa passa para a funo.
#include <stdio.h>
void main(void) { int notas[5] = {70, 80, 90, 100, 90}; int conta[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int pequeno[2] = {-33, -44};
Como foi visto, na Linguagem C o caracter NULL representa o final de uma string de caracteres. Portanto, as funes podem procurar o caracter NULL nos elementos da matriz para determinar onde a matriz termina. No entanto, as matrizes de outros tipos, tais como int, float ou long, no tem um caracter finalizador equivalente. Portanto, voc normalmente precisa passar para as funes que trabalham com matrizes o nmero de elementos que a matriz contm.
64Kb de espao. O programa a seguir pode no passar na compilao porque as matrizes consomem muita memria:
void main(void) { char string[66000L]; int values[33000L]; float numbers[17000]; } /* 66,000 bytes */ /* 33,000 * 2 = 66,000 bytes */ /* 17,000 * 4 = 68,000 bytes */
1 4
2 5
3 6
float tabela[3][5] = {{1.0, 2.0, 3.0, 4.0, 5.0}, {6.0, 7.0, 8.0, 9.0, 10.0}, {11.0, 12.0, 13.0, 14.0, 15.0}};
for (linha = 0; linha < 3; linha++) for (coluna = 0; coluna < 5; coluna++) printf("tabela[%d][%d] = %f\n", linha, coluna,
tabela[linha][coluna]); }
Colocando laos for um dentro do outro, como mostrado, o programa exibir os elementos contidos na primeira linha da matriz (1.0 at 5.0). Em seguida, o programa ir se mover para a prxima linha, e, depois, para a terceira linha, exibindo os elementos dentro de cada linha.
#include <stdio.h>
float valores[2][3][5] = { {{1.0, 2.0, 3.0, 4.0, 5.0}, {6.0, 7.0, 8.0, 9.0, 10.0}, {11.0, 12.0, 13.0, 14.0, 15.0}},
{{16.0, 17.0, 18.0, 19.0, 20.0}, {21.0, 22.0, 23.0, 24.0, 25.0}, {26.0, 27.0, 28.0, 29.0, 30.0}} };
for (linha = 0; linha < 2; linha++) for (coluna = 0; coluna < 3; coluna++) for (tabela = 0; tabela < 5; tabela++) printf("valores[%d][%d][%d] = %f\n", linha, coluna, tabela, valores[linha][coluna][tabela]); }
#include <stdio.h> void exibe_2d_matriz(int matriz[][10], int linhas) { int i, j; for (i = 0; i < linhas; i++) for (j = 0; j < 10; j++) printf("matriz[%d][%d] = %d\n", i, j, matriz[i][j]); } void main(void) {
int a[1][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}; int b[2][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17, 18, 19,20}}; int c[3][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, {21, 22, 23, 24, 25, 26, 27, 28, 29, 30}}; exibe_2d_matriz(a, 1); exibe_2d_matriz(b, 2); exibe_2d_matriz(c, 3); }
#include <stdio.h>
int b[2][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17, 18, 19,20}}; int c[3][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, {21, 22, 23, 24, 25, 26, 27, 28, 29,30}};
printf("Soma dos elementos da primeira matriz %d\n", soma_matriz(a, 10)); printf("Soma dos elementos da segunda matriz %d\n", soma_matriz(b, 20)); printf("Soma dos elementos da terceira matriz %d\n", soma_matriz(c, 30)); }
apresentado seguir, uma sntese do que foi tratado em cada item deste mdulo. Com esta sntese voc poder relembrar conceitos vistos durante nosso estudo ou mesmo direcionar seu estudo, caso voc j tenha conhecimentos na Linguagem C. 6.1 Compreendendo as Matrizes: dada uma explicao que uma matriz uma
estrutura de dados que pode armazenar mltiplos valores do mesmo tipo. 6.2 Declarando uma Matriz: neste item visto como declarar uma matriz, precisando-
se especificar o tipo desejado (tal como int, float ou double), bem como o tamanho da matriz. 6.3 Compreendendo os Requisitos de Armazenamento de uma Matriz: foi visto que
ao declarar uma matriz, o compilador aloca memria suficiente para conter o nmero de valores especificado. A quantidade real de memria que o compilador aloca depende do tipo da matriz. 6.4 Inicializando uma Matriz: neste item explicada de maneira clara como inicializar
diferentes tipos de matrizes. 6.5 Acessando Elementos da Matriz: foi visto que para acessar um elemento da
matriz, voc especifica o nome da matriz e o elemento que deseja. 6.6 Percorrendo em um Lao Elementos da Matriz: foi mostrado que quando se
referencia muitos elementos de uma matriz, especificar nmeros para cada elemento da matriz individualmente pode ser demorado e tedioso. Como uma alternativa, os programas podem usar uma varivel para referenciar os elementos da matriz. 6.7 Usando Constantes Para Definir as Matrizes: mostra como os programas usam
constantes para definir matrizes. 6.8 Passando uma Matriz a uma Funo: visto que programas passam para a
funo tanto a matriz como o nmero de elementos que a matriz contm. 6.9 Revisitando as Matrizes Como Funes: . foi visto um programa que passa trs
matrizes diferentes (de diferentes tamanhos) para a funo exibe_valores. 6.10 Compreendendo Como as Matrizes de String Diferem:explica as principais
diferenas das matrizes de string. 6.11 Determinando Quantos Elementos Uma Matriz Pode Armazenar: foi visto que
se o ambiente de trabalho for o DOS, a quantidade de memria que as matrizes podem consumir depender do modelo de memria atual. Em geral, uma matriz no pode consumir mais do que 64Kb de espao. 6.12 Compreendendo as Matrizes Multidimensionais: foi visto que a Linguagem C
inicializar uma matriz bidimensional. 6.14 Percorrendo em Um Lao Uma Matriz Bidimensional: foi mostrado um
programa que usa as variveis linha e coluna para exibir os valores contidos dentro da matriz tabela. 6.15 Percorrendo Uma Matriz Tridimensional: foi mostrado um programa que usa as
variveis linha, coluna e tabela para percorrer uma matriz tridimensional. 6.16 Passando uma Matriz Bidimensional Para uma Funo:foi visto que para
passar matrizes bidimensionais para uma funo, no ser necessrio especificar o nmero de linha na matriz, mas, sim, especificar o nmero de colunas. 6.17 Tratando as Matrizes Multidimensionais Como Uma Dimenso: foi visto que
quando for necessrio trabalhar com os elementos de uma matriz multidimensional, mas sem precisar acessar os elementos em suas posies de linha ou coluna, as funes podero tratar a matriz multidimensional como se ela tivesse uma dimenso.