Home

Ling_C_Aplic_Engenharia HEJ

image

Contents

1. A maneira mais f cil de inserir uma string pelo teclado com a fun o de biblioteca gets A forma geral da fun o gets gets nome da matriz Um programa simples com string include lt stdio h gt main char str 80 printf informe uma string gets str le a string do teclado printf s str Algumas funCOES de biblioteca que manipulam string A linguagem C suporta um grande numero de funCOES que manipulam strings As mais comuns sao strepy streat strlen stremp A fun o strepy Uma chamada a strcpy tem esta forma geral strcpy para de A fun o strepy usada para copiar o conteudo da string de para a string para exemplo de uso de strepy include lt stdio h gt include lt string h gt main char str 80 Documento Tutorial Linguagem C Aplicada Engenharia Page 34 of 162 SytCom Training 2014 All rights reserved strepy str Alo printf s str A fun o strcat Uma chamada a strcat tem esta forma strcat s1 s2 A fun o strcat anexa concatena s2 em sl s2 nao modificada As duas strings devem ser terminadas com nulo e o resultado tambem ser terminado com um nulo Por exemplo este programa imprimir Alo para todos na tela include lt stdio h gt include lt string h gt main char s1 20 s2 15 strepy sl Alo strepy s2 para todos strcat s1 s2 prin
2. 13 Operadores Aritm ticos Operador A o subtra o tamb m o menos un rio 1 x adi o e multiplica o divis o resto da divis o decremento incremento Obs Operador un rio aquele que opera sobre um nico argumento c lculo do quociente e do resto de uma divis o include lt stdio h gt main Documento Tutorial Linguagem C Aplicada Engenharia Page 13 of 162 SytCom Training 2014 All rights reserved int x y printf informe o dividendo e o divisor scanf d d amp x amp y printf quociente da divis o d n x y printf resto da divis o Jd x y 14 Incremento e Decremento x xtl pode ser escrito como x ou primeiro incrementa a vari vel depois usa o conte do X primeiro usa o conte do da vari vel depois incrementa Exemplos x 10 x 10 y X primeiro faz x x 1 e depois faz y x resultado y 11 e x 11 x 10 x 10 y X primeiro faz y 10 e depois faz x x 1 resultado y 10 e x 11 O mesmo vale para decremento x e x Preced ncia de operadores 1 2 un rio 3 4 Obs1 Operadores do mesmo n vel de preced ncia s o avaliados pelo compilador da esquerda para a direi ta Obs2 Par nteses podem ser colocados para alterar a ordem de avalia o for ando uma opera o ou conjunto de opera es para um n vel de preced ncia mais alto
3. decode ascii while ascii ch q encerra se digitado q return O exibe a sequencia de bits para cada caractere void decode union bits b if b bit h printf 1 else printf 0 if b bit g printf 1 else printf 0 if b bit f printf 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 117 of 162 SytCom Training 2014 All rights reserved else printf 0 if b bit e printf 1 else printf 0 if b bit d printf 1 else printf 0 if b bit c printf 1 else printf 0 if b bit b printf 1 else printf 0 if b bit a printf 1 else printf 0 printf n Para encerrar vamos ver como uma union pode prover um meio de carregar um inteiro em um campo de bit No programa anterior que determinava o n mero de drives e portas seriais tivemos que usar um artif cio devido linguagem C nao permitir que um inteiro aponte para uma estrutura Contudo este programa cria uma union que cont m um inteiro e um campo de bit Quando a fun o biosequip retorna a lista de perif ricos codificada como um inteiro este atribu do para o inteiro no campo de bit Entretanto o programa est livre para usar o campo bit quando for reportar os resultados Mostra o n mero de acionadores de disco flex vel e portas usando union include lt stdio h gt include lt bios h gt main struct perif unsigned boot floppy 1 unsigned te
4. x i tempx para fugir de erro de linkagem do compilador BUG da versao 1 0 do Turbo C zt y i tempy i x realloc x unsigned i 1 sizeof float if x LBLALOC puts Erro de alocagao exit 1 y realloc y unsigned i 1 sizeof float if y goto LBLALOC fclose in numlido i 1 forG 0 i lt numlido i printf f f n x i y i Documento Tutorial Linguagem C Aplicada Engenharia Page 95 of 162 SytCom Training 2014 All rights reserved 50 Estruturas Em C uma estrutura uma cole o de vari veis referenciada sob um nome provendo um meio de manter informaCOES relacionadas juntas Uma declara o de estrutura permite que se se crie vari veis de estruturas As vari veis que compreendem uma estrutura sao chamadas de elementos da estrutura struct endereco char nome 30 char rua 40 char cidade 20 char estado 3 unsigned long int cep E Obs1 O nome endereco chamada etiqueta da estrutura Obs2 At aqui nao foi alocada nenhuma mem ria struct endereco info_adr declara a vari vel info_adr como sendo do tipo estrutura endereco somente agora alocada mem ria Outra maneira alocando mem ria j na declara o da estrutura struct endereco char nome 30 char rua 40 char cidade 20 char estado 3 unsigned long int cep info_adr binfo cinfo Isto definir um tipo de estrutura chamada endereco e declarar as vari veis
5. zo 1 zo 1 else sign printf Z Re j Im 1f cj lf zo 0 sign zo 1 break while op I r amp amp op I p double rp zarg op double zarg char op double zout zout double malloc 2 sizeof double para zout alocado 2 8 bytes if zout exit 1 se nao conseguiu alocar 16 bytes do heap cai fora Observa o obrigat rio o uso de malloc Se declar ssemos zout como a matriz zout 2 perderfamos seus dados no retorno de rp porque esta fun Documento Tutorial Linguagem C Aplicada Engenharia Page 69 of 162 SytCom Training 2014 All rights reserved o retorna o endere o de uma vari vel que nao existe mais em main A nica maneira de manter um ponteiro existindo no retorno da main usando malloc que aloca permanentemente espa o no heap e nao na pilha if op zout 0 sqrt zarg zarg zarg 1 zarg 1 considerando zarg zout 1 180 M_PI atan2 zarg 1 zarg um ponteiro return zout if op p zout 0 zarg 0 cos M_PI 180 zarg 1 considerando zarg uma matriz zout 1 zarg 0 sin M_PI 180 zarg 1 return zout puts Erro exit 1 erro de l gica cai fora Obs1 O segmento de dados de 64Kb do modelo small dividido como segue Area Dinamica dados alocados por malloc heap liberados por free ou realocados por realloc Pilha stack vari veis locais e
6. Fun ES Retornando Valores Nao Inteiros Quando o tipo de uma fun o nao explicitamente declarado ele automaticamente definido como int Como exemplo introdut rio de uma fun o retornando um tipo nao inteiro aqui est um programa que usa a fun o sum que retorna um valor do tipo double que a soma de seus dois argumentos double include lt stdio h gt double sum double a double b declara o inicial sempre necess ria quando a fun o nao retorna int main double primeiro segundo primeiro 1023 23 segundo 990 0 printf 9 1f sum primeiro segundo lf o especificador pi double double sum double a double b retorna um float return a b O prot tipo antes de main diz ao compilador que a fun o sum retornar um tipo de dado double em ponto flutuante c lculo da rea de um c rculo include lt stdlib h gt include lt math h gt float area float raio prot tipo main Documento Tutorial Linguagem C Aplicada Engenharia Page 62 of 162 SytCom Training 2014 All rights reserved float tres printf Informe o raio scanf f amp r res area r printf A rea f n res float area float raio return M_PI pow raio 2 M PI amacro p o valor de pi em math h pow x y igual ao x4y do BASIC e FORTRAN e definida em math h Obsl Qualquer fun o em math h de
7. d x Imprime numeros de 100 a 1 na tela include lt stdio h gt main int x for x 100 x gt 0 x printf d x Imprime numeros de 0 a 100 de 5 em 5 include lt stdio h gt main int x for x 0 x lt 100 x x 5 printf d x Documento Tutorial Linguagem C Aplicada Engenharia Page 22 of 162 SytCom Training 2014 All rights reserved Imprime quadrado dos numeros numeros de 0 a 99 include lt stdio h gt main int i for i 0 i lt 100 i printf Este o valor de i d i printf E i ao quadrado d n i i Obs O teste condicional realizado no inicio do loop Isto significa que o c digo pode nunca ser executado se a condi o falsa logo de in cio x 10 for y 10 y x y printf d y printf fim do loop O loop acima nunca executado j que de in cio x y Portanto a condi o avaliada como falsa e o loop acaba prematuramente VariaCOES do loop for Este programa imprime os numeros de 0 a 98 de 2 em 2 include lt stdio h gt main int x y for x 0 y 0 x y lt 100 x y Duas vari veis de controle x e y printf d x y Em C a v rgula um operador que signifi ca em ess ncia fa a isto E aquilo Por isso v lida a constru o deste loop for O incremento poderia ser todas as com binaC ES de incremento anterior e poste rior j que neste
8. for 1 10 1 gt 0 i gotoxy 15 3 cprintf 02d i1 sa da para a janela ativa sleep 1 cwindow 5 15 35 20 edge3 LIGHTRED RED janela fundo RED borda LIGHTRED tipo edge3 textcolor WHITE prox saida texto em WHITE gotoxy 13 3 cputs BUM sleep 1 cwindow 50 5 75 10 edgel LIGHTBLUEIBLINK BLUE fundo BLUE borda LIGHTBLUE piscando tipo edgel textcolor YELLOWIBLINK prox sa da texto em YELLOW piscando gotoxy 4 2 cprintf Digite sua idade cscanf d amp i pega dado da janela ativa gotoxy 4 3 textcolor WHITE prox sa da texto em WHITE cprintf Voce tem d anos i sleep 2 system cls limpa e apaga a tela void cwindow Ift up rgt dwn edge edgecolor backgrcolor int Ift up rgt dwn int edgecolor backgrcolor char edge ead e e5 ei CLC up e4 Crgt dun gt e3 e2 register int i j char line 80 char tmp 2 union REGS inregs outregs struct text_info ti Documento Tutorial Linguagem C Aplicada Engenharia Page 139 of 162 SytCom Training 2014 All rights reserved window Ift 1 up 1 rgt 1 dwn 1 define area da janela textbackground backgrcolor define cor de fundo clrscr limpa tela e pinta fundo window 1 1 80 25 redefine janela janela total coloca borda if edge NULL define linhas horizontais da borda tmp 0 edge 5 tmp 1 0 j lft 1 while j lt
9. o printf include lt stdio h gt include lt string h gt main char str 80 strepy str Alo Tom printf str funciona porque o primeiro argumento de printf esta entre aspas e pode ser considerado uma string Documento Tutorial Linguagem C Aplicada Engenharia Page 37 of 162 SytCom Training 2014 All rights reserved 31 Matrizes Bidimensionais Para declarar por exemplo uma matriz bidimensional de inteiros chamada de nome bid com tamanho 10 20 escrevemos int bid 10 20 Exemplos carrega uma matriz bidimensional com os n meros de a 12 include lt stdio h gt main int t 1 num 3 4 for t 0 t lt 3 t for 1 0 i lt 4 i numjt i t 4 i 1 lei de forma o dos elementos da matriz num printf num d d d n t i num t i No caso de uma matriz bidimensional a seguinte expressao encontrar o numero de bytes da mem ria bytes linha coluna tamanho do tipo de dado Portanto uma matriz de inteiros com dimensoes 10 5 dever ter 10x5x2 ou 100 bytes alocados j que um int tem o tamanho de 16bits 2bytes 1 byte 8 bits Matrizes de strings A linha abaixo declara uma matriz de 30 strings cada uma com tamanho m ximo de 80 caracteres char matriz str 30 80 E muito f cil acessar uma string individual voce especifica somente o ndice da esquerda Por exemplo esta declara o chama a fun o gets com a terceira string e
10. res polar amp res return res cpxp subt argl arg2 cpx argl arg2 cpxp res res re argl gt re arg2 gt re res im arg1 gt im arg2 gt im res polar amp res return res cpxp mult argl arg2 cpx arg1 arg2 Cpxp res res re argl gt re arg2 gt re argl gt im arg2 gt im res im argl gt im arg2 gt re argl gt re arg2 gt im a jb c jd ac bd j be ad res polar amp res return res cpxp divi argl arg2 cpx arg1 arg2 Cpxp res res re arg1 gt re arg2 gt re arg1 gt im arg2 gt im res im arg 1 gt im arg2 gt re arg1 gt re arg2 gt im res re res re arg2 gt re arg2 gt re arg2 gt im arg2 gt im res im res im arg2 gt re arg2 gt re arg2 gt im arg2 gt im Documento Tutorial Linguagem C Aplicada Engenharia Page 111 of 162 SytCom Training 2014 All rights reserved a jb c jd ac bd j bc ad c42 d 2 res polar amp res return res cpxp polar arg cpxp arg cpxp out out mag sqrt arg gt re arg gt re arg gt im arg gt im out ang 180 M_PI atan2 arg gt im arg gt re out re arg gt re out im arg gt im return out Matrizes dentro de estruturas struct x int a 10 10 matriz de 100 inteiros float b bys valor y a 3 7 atribui a valor o elemento 3 7 da matriz a da estrutura y 53 Estruturas Aninhadas
11. Se a matriz for de inteiros de dois bytes serao necesarios 4 320 bytes Se a matriz for do tipo double 8 bytes de comprimento entao 34 560 bytes serao requeridos O espa o necess rio aumenta exponencialmente com o n mero de dimensoes Um programa com matrizes com mais de tr s ou quatro dimensoes pode ficar rapidamente sem mem ria suficiente para ser executado dependen do do tipo de modelo de mem ria usado pelo programa usualmente usa se o mo delo small c 64Kb p c digo e 64Kb p dados Inicializa o de Matrizes A linguagem C permite a inicializa o de matrizes A forma geral da inicializa o de matrizes similar de outras vari veis como mostrado aqui especificador de tipo nome da matriz tamanho1 tamanhoN lista de valores A lista de valores uma lista de constantes separadas por v rgulas que do tipo compat vel com o tipo base da matriz A primeira constante ser colocada na primeira posi o da matriz a segunda constante na segunda posi o e assim por diante Note que um ponto e v rgula segue a chave No exemplo seguinte uma matriz de 10 elementos inteiros inicializada como os n meros de 1 a 10 int i 10 1 2 3 4 5 6 7 8 9 10 Isso significa que i 0 ter o valor 1 e i 9 o valor 10 Matrizes de caracteres que armazenam strings permitem uma inicializa o abreviada com a seguinte forma Documento Tutorial Linguagem C Aplicada Engenharia Page 39 of 162 SytCom Trai
12. include lt stdio h gt Outro exemplo de fun o com argumentos main mul 10 11 mul a b int a b observe a forma diferente de declarar a fun o mul printf d a b include lt stdio h gt Um programa que usa retorno main int resposta resposta mul 10 11 atribui o valor de retorno printf A resposta d n resposta Esta fun o retorna um valor mul int a int b return a b Documento Tutorial Linguagem C Aplicada Engenharia Page 6 of 162 SytCom Training 2014 All rights reserved 3 Forma geral de uma fun o tipo de retorno nome da fun o lista de par metros identifica o dos par metros caso n o identificados na lista corpo do c digo Para fun es sem par metros n o haver lista de par metros 4 Introdu o ao controle de programas em C A declara o if if condi o declara o onde condi o uma express o que resulta V ou F Em C V n o zero e F zero Exemplos if 10 lt 11 printf 10 menor que 11 imprime if 10 11 printf Al6 n o imprime O loop for for inicializa o condi o incremento declara o inicializa o usado p atribuir vari vel de controle do loop um valor inicial condi o uma express o que testada toda vez que o loop continua a ser executado incremento incrementa a vari vel de co
13. include lt alloc h gt include lt graphics h gt define MONITOR VGA define MODO VGAHI define MAXX 639 largura da tela em pixels define MAXY 479 altura da tela em pixels define MME 5 Metade do tamanho dos Marcadores de Escala define BUFSIZE 4096 Tamanho do buffer de arquivos void main argc argv int argc char argv FILE in float x float y float delta accum topx topy botz boty Ax Bx Ay By int i teste numlido th tw int gdriver gmode errorcode char num 80 if argc 2 puts Digite o nome do arquivo exit 1 if in fopen argv 1 rt NULL sempre texto c fscanf e fprintf puts Nao posso abrir arquivo exit 1 if setvbuf in NULL _IOFBF BUFSIZE 0 cria e conecta buffer a in puts Nao posso estabelecer buffer para arquivo a ser lido Documento Tutorial Linguagem C Aplicada Engenharia Page 158 of 162 SytCom Training 2014 All rights reserved x float malloc sizeof float if x LBLMEM puts Mem ria insuficiente exit 1 y float malloc sizeof float if y goto LBLMEM i 0 while 1 teste fscanf in f f x 1 y 1 if teste 1 break testa EOF fscanf retorna 1 quando encontra o i x realloc x unsigned i 1 sizeof float if x LBLALOC puts Mem6ria insuficiente nNao posso ler mais dados exit 1 y realloc y unsigned i 1 sizeof float if y goto LB
14. poss vel indexar um ponteiro como se ele fosse uma matriz Isso estreita ainda mais o relacionamento entre ponteiros e matrizes Por exemplo este fragmento de c digo perfeitamente v lido e imprime os n meros de 1 at 5 na tela Indexando um ponteiro semelhante a uma matriz include lt stdio h gt main int i 5 1 2 3 4 5 int p t pai for t 0 t lt 5 t printf d p t Em C a declara o p t id ntica a p t Ponteiros e Strings Z Uma vez que o nome de uma matriz sem um ndice um ponteiro para o primeiro elemento da matriz o que est realmante acontecendo quando voc usa as funC ES de string discutidas nos cap tulos anteriores que somente um ponteiro para strings passado para fun o e nao a pr pria string Para ver como isso funciona aqui est uma maneira como a fun o strlen pode ser escrita strlen char s int i 0 while s i S return i Quando uma constante string usada em qualquer tipo de expressao ela tratada como um ponteiro para o primeiro carctere na string Por exemplo este programa perfeitamente v lido e imprime a frase este programa funciona na tela include lt stdio h gt main char s s este programa funciona printf s Documento Tutorial Linguagem C Aplicada Engenharia Page 51 of 162 SytCom Training 2014 All rights reserved Obtendo o Endere o de um elemento da Matr
15. printf este la o sera executado para sempre n printf use CTRL BREAK para parar Documento Tutorial Linguagem C Aplicada Engenharia Page 24 of 162 SytCom Training 2014 All rights reserved 20 Interrup o do loop for Ion ch getche pega um caractere if x A break break sai do la o e vai p a declara o seguinte printf voce digitou um A Loop while A forma geral while condi o declara o O conjunto de declaraC ES em declara o repetido enquanto condi o verdadeira Exemplo A rotina a seguir p ra o processamento e entra em loop at que o caractere A mai sculo seja pressionado espera por caractere char ch ch 0 inicializa ch while ch A ch getche Um programa que centraliza o texto na tela include lt stdio h gt include lt string h gt main char str 255 printf insira uma string gets str centraliza strlen str printf str Calcula e exibe um numero adequado de espacos para centralizar uma string de comprimento tamanho centraliza int tamanho tamanho 80 tamanho 2 80 tamanho o que sobra na linha de 80 col while tamanho gt 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 25 of 162 SytCom Training 2014 All rights reserved printf tamanho Onde muitas condiCOES distintas podem terminar o loop while comum usar uma nica va
16. tipo nome 1 tamanho tipo nome 2 tamanho tipo nome 3 tamanho tipo nome N tamanho Um campo bit deve ser declarado como int unsigned ou signed Campos bit de tamanho 1 devem ser declarados como unsigned j que um nico bit nao pode ter sinal Exemplo aplicativo A fun o biosequip retorna uma lista dos perif ricos instalados no computador por meio de um valor de 16 bits codificado como mostrado aqui int biosequip void header em bios h obriga o boot atrav s do drive de disco flex vel 1 coprocessador matem tico presente 2 3 tamanho da ram na placa mae 0 0 16Kb 0 1 32Kb 1 0 48Kb 1 1 64Kb 4 5 modo inicial de v deo 0 0 nao usado 0 1 colorido ou BW 40x25 1 0 colorido ou BW 80x25 1 1 monocrom tico 80x25 6 7 n mero de drives de disco flex vel 0 0 1 0 1 2 1 0 3 Documento Tutorial Linguagem C Aplicada Engenharia Page 113 of 162 SytCom Training 2014 All rights reserved 1 1 4 8 chip DMA instalado 9 10 11 n mero de portas seriais 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 12 joystick instalado 13 impressora serial instalada somente PCjr 14 15 n mero de impressoras 0 0 0 0 1 1 1 0 2 1 1 3 J Ch LN P D H ra CO Isto pode ser representado como um campo bit usando se esta estrutura struct perif unsigned boot_floppy unsigned tem_coproc unsigned ram_placa unsigned modo video unsigned drive floppy unsigned DMA un
17. val count addr pega o valor que est no endere o count addr printf d val exibe 100 Tipo Base Como o compilador sabe quantos bytes copiar em val do endere o apontado por count_addr Mais genericamente como o compilador transfere o n mero adequado de bytes em qualquer atribui o usando um ponteiro A resposta que o tipo base do ponteiro determina o tipo de dado que o compilador assume que o ponteiro est apontando Nesse caso uma vez que count addr um ponteiro inteiro 2 bytes de informa o sao copiados em val a partir do endere o apontado por count addr Se ele fosse um ponteiro double entao 8 bytes teriam sido copiados finclude lt stdio h gt Este programa nao funciona adequadamente main float x 10 1 y int p p amp x observar warning emitido pelo compilador y p printf f vi Documento Tutorial Linguagem C Aplicada Engenharia Page 47 of 162 SytCom Training 2014 All rights reserved Este programa nao atribuir o valor da vari vel x para y Tendo em vista que p declarado para ser um ponteiro para um inteiro somente 2 bytes de informa o serao transferidos para y nao os 4 bytes que normalmente formam um n mero de ponto flutuante Expressoes com Ponteiros Atribui o de Ponteiros Como qualquer vari vel um ponteiro pode ser usado no lado direito de uma declara o para atribuir seu valor para um outro ponteiro Por exemplo include lt stdio h
18. Documento Tutorial Linguagem C Aplicada Engenharia Page 109 of 162 SytCom Training 2014 All rights reserved typedef struct zplus a etiqueta zplus opcional double re double im double mag double ang cpxp cpxp soma cpxp subt cpxp mult cpxp divi cpxp polar main char op sign cpx z1 z2 cpxp zout do printf nQual opera o com complexos desejada op getche while op amp amp op amp amp op amp amp op puts n nInforme dois complexos Z1 R1 j I1 e Z2 R2 j I2 entrando puts na seguinte forma R1 I1 R212 9 scanf Golf Golf Ylf Hlf amp z1 re amp z1 im amp z2 re amp z2 im switch op case zout soma amp z1 amp z2 break case LJ zout subt amp z1 amp z2 break case zout mult amp z1 amp z2 break case zout divi amp z1 amp z2 break default puts Erro exit 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 110 of 162 SytCom Training 2014 All rights reserved if zout im lt 0 sign zout im zout im sign d o sinal da else sign parte imagin ria de zout no formato da printf printf nZ1 c Z2 lf c j lf op zout re sign zout im printf lf lt lf zout mag zout ang cpxp soma arg 1 arg2 cpx arg1 arg2 cpxp res res re argl gt re arg2 gt re res im argl gt im arg2 gt im
19. E importante ter em mente que todas as sa das gr ficas sao relativas porta de visualiza o corrente que nao necessariamente a mesma que a tela Inicializando a Placa de V deo Antes que qualquer das funC ES gr ficas possam ser usadas necess rio colocar a placa de v deo em um dos modos gr ficos Obviamente o computador deve ter uma placa gr fica de v deo caso contr rio nenhuma das funC ES e comandos vistos daqui por diante serao v lidos Por defini o a grande maioria dos sistemas PC IBM inicializam boot o computador no modo texto 80 colunas J que este nao o modo gr fico as funCOES gr ficas nao podem funcionar nele Para inicializar a placa de v deo em um modo gr fico usa se a fun o initgraph void far initgraph int far driver int far modo char far path A fun o initgraph carrega um driver gr fico correspondente ao n mero na mem ria apontado por driver Sem um driver gr fico carregado na mem ria nenhuma fun o gr fica pode operar O argumento modo aponta para o inteiro que especifica um dos modos de v deo dispon vel no driver gr fico O argumento path especifica em que local da estrutura de diret rios encontra se o arquivo do driver gr fico utilizado Se nenhum path especificado o diret rio de trabalho corrente pesquisado Os drivers gr ficos estao contidos nos arquivos BGI que devem estar dispon veis no sistema Drive Gr fico Inteiro Equivalente Docu
20. I 1 i forG 0 j lt c 1 j fprintf out 5 21G t mat i j fprintf out n fclose out void matmult unsigned 11 unsigned cl unsigned c2 double M1 double M2 double MP register unsigned int i j k k gt c1 12 for i 0 i lt 11 1 i i e j indexam MP for j 0 j lt c2 1 j MP i 5 0 inicializa zera MP i j Documento Tutorial Linguagem C Aplicada Engenharia Page 156 of 162 SytCom Training 2014 All rights reserved for k 0 k lt cl 1 k MP i j M1 i k M2 k j void matsum unsigned Il unsigned c double M1 double M2 double MS register unsigned int i j for i 0 i lt l 1 i for j 0 j lt c 1 j MS ilj M1j j M2 i lj Documento Tutorial Linguagem C Aplicada Engenharia Page 157 of 162 SytCom Training 2014 All rights reserved 70 Ap ndice VIII PROGRAMA exemplo PARa geraGao de graficos cartesianos na tela a partir de um arquivo num rico l um arquivo num rico de nome a especificar no formato de 2 colunas e plota na tela Compilar no modelo de mem ria SMALL Necessita ser compilado e linkado atrav s de arquivo de projeto o qual referencia este arquivo e os arquivos LITT OBJ e EGAVGA OBJ obtidos com o utilit rio BGIOBJ EXE do diret rio BGI include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt
21. MAXY 1 2 outtextxy MAXX 2 MME tw 2 i num line MAXX 2 MME i MAXX 2 MME 1 else outtextxy MAXX 2 MME tw 2 i 2 th num para evitar superposi o c eixo horizontal line MAXX 2 MME MAXY MAXX 2 MME MAXY coloca o 11 ltimo marcador sprintf num 4 2G accum outtextxy MAXX 2 MME tw MAX Y th num desenha 11 marcadores num ricos na escala horizontal setcolor EGA LIGHTRED delta topx botx 10 for i 0 accum botx i lt MAXX i MAXX 1 10 accum delta coloca os 10 1 s marcadores sprintf num 4 2G accum justifica a esquerda if MAXX 1 2 line MAX Y 2 MME i MAXY 2 MME if i 0 outtextxy 1 MAX Y 2 MME th num else outtextxy MAX Y 2 MME th num else outtextxy i tw 2 MAX Y 2 MME th num para evitar superposi o c vertical line i 1 MAX Y 2 MME i 1 MAXY 2 MME Documento Tutorial Linguagem C Aplicada Engenharia Page 161 of 162 SytCom Training 2014 All rights reserved line MAXX MAXY 2 MME MAXX MAXY 2 MME coloca o 11 ltimo marcador sprintf num 4 2G accum outtextxy MAXX textwidth num MAX Y 2 MME th num getch cleardevice closegraph 71 Refer ncias bibliogr ficas 1 Turbo C Guia do Usu rio Herbert Schildt Ed Mc Graw Hill 2 Turbo C Avan ado Herbert Schildt Ed Mc Graw Hill 3 Dominando o Turbo C Stan Kelly Bootle Ed Ci ncia Moderna 4 MSDOS Avan ado Guia Microsoft pi programa
22. Nao posso abrir arquivo exit 1 fseek fp 234 SEEK_SET ch getc fp l um caractere na posi o 235 A fun o fseek retorna zero se houve sucesso ou um valor nao zero se houve falha no posicionamento do localizador de posi o do arquivo utilit rio de vizualiza o de disco usando fseek visualiza setores de 128 de bytes do disco e apresenta em ASCII e hexadecimal digite 1 para deixar o programa include lt stdio h gt include lt ctype h gt isprint necessita include lt stdlib h gt define TAMANHO 128 TAMANHO 128 char buf TAMANHO global void display main int argc char argv FILE fp long int setor numlido if argc 2 puts Uso tmp nome_do_arquivo exit 1 esqueceu de digitar o nome de arquivo if fp fopen argv 1 rb NULL puts Nao posso abrir arquivo exit 1 for printf Informe o setor 1 p terminar scanf ld amp setor if setor lt 0 break if fseek fp setor TAMANHO SEEK SET puts Erro de busca exit 1 if numlido fread buf 1 TAMANHO fp TAMANHO puts EOF encontrado 1 display numlido return 0 void display long int numlido Documento Tutorial Linguagem C Aplicada Engenharia Page 91 of 162 SytCom Training 2014 All rights reserved long int i j for i 0 i lt numlido 16 i controla a indexa o de linhas 0 a 8 128 16 8 fo
23. include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt include lt graphics h gt include lt alloc h gt include lt string h gt define NOT_MOVED 0 define RIGHT 1 define LEFT 2 define UP 3 define DOWN 4 define WLFT 1 define WUP 1 define WOWN WUP HEIG define HEIG 2 altura da janela internamente sem gap define HINIT 5 pos horiz la janela desenhada na linha define SPACE 4 largura de cada janela sem string e sem o gap e tambem espa o entre janelas 1 define HGAP 2 aprox gap entre caracter e lados horiz da janela dep par ou impar define VGAP 2 aprox gap entre lados vert da janela dep par ou impar void storewincoord void wedge Documento Tutorial Linguagem C Aplicada Engenharia Page 142 of 162 SytCom Training 2014 All rights reserved void cwindow void cmouses void mouse position void mode void cursor on void cursor off void mouse reset typedef struct wincoord int If int up int rg int dw wico main wico wc 42 char notes D6 R Mi Fa Sol La Si int freq 65 73 82 87 98 110 123 131 147 165 175 196 220 247 262 294 330 349 392 440 494 523 587 659 69 8 784 880 988 1047 1175 1319 1397 1568 1760 1976 2093 2349 2637 2794 3136 3520 3951 int register i int x y int wup wdwn wlft wrgt nwin int
24. lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt include lt time h gt include lt dos h gt void matmult unsigned unsigned unsigned double double double void matsum unsigned unsigned double double double void matfprint unsigned unsigned double char void matprint unsigned unsigned double double matinit unsigned unsigned void main void double A double B double C unsigned int ai aj bi bj register unsigned int i j double dtemp char op puts nEste programa realiza A op B sendo A e B matrizes e op as operaCOES ou do printf Opera o 7 op getche printf n if toupper op F puts Fim exit 0 while op amp amp op LBLO1 printf N mero de linhas da matriz A Documento Tutorial Linguagem C Aplicada Engenharia Page 154 of 162 SytCom Training 2014 All rights reserved scanf u amp ai printf N mero de colunas da matriz A scanf u amp aj A matinit ai aj for i 0 i lt ai 1 1 printf Entre linha d da matriz A n i 1 for j 0 j lt aj 1 j printf A u u i 1 j 1 scanf 1G amp dtemp Alilljl dtemp printf Numero de linhas da matriz B scanf u amp bi printf Numero de colunas da matriz B scanf u amp bj if op amp amp aj bi putch 7 ascii BEL puts
25. mN mero de colunas de A deve ser igual ao n mero de linhas de B goto LBLO1 if op amp amp ai billaj bj putch 7 ascii BEL puts nDimensoes de A e B devem ser id nticas goto LBLO1 B matinit bi bj for i 0 i lt bi 1 i printf Entre linha d da matriz B n i 1 for j 0 j lt bj 1 j printf B u u i 1 j 1 scanf 1G amp dtemp B il j dtemp if op C matinit ai bj matmult ai aj bj A B C matprint ai bj C matfprint ai bj C matprod dat else C matinit ai aj matsum ai aj A B C matprint ai aj C matfprint ai aj C matsoma dat double matinit 1 c Documento Tutorial Linguagem C Aplicada Engenharia Page 155 of 162 SytCom Training 2014 All rights reserved unsigned int Le double a register unsigned int i a double malloc 1 sizeof double if a LMEM puts Mem ria insuficiente exit 1 for i 0 i lt I 1 i a il double malloc c sizeof double if a i goto LMEM return a void matprint l c mat unsigned int Le double mat register unsigned int i j for i 0 i lt I 1 i for j 0 j lt c 1 j printf 5 21G t mat i j printf n void matfprint l c mat arq unsigned int Le double mat char arg 80 register unsigned int i j FILE out if out fopen arg w NULL printf Impossivel abrir arquivo s arq exit 1 for i 0 i lt
26. o b sica include lt stdio h gt Programa exemplo 1 main int idade idade 33 printf A minha idade d n idade include lt stdio h gt Programa exemplo 2 convers o de p s para metros main int p s float metros printf Informe o n mero de p s scanf d amp p s amp gt operador endere o de metros p s 0 3048 convers o de p s para metros printf d p s f metros n p s metros include lt stdio h gt Programa exemplo 2 2 vers o convers o de p s para metros main float p s metros torna a vari vel p s um float printf Informe o n mero de p s scanf f amp p s 1 um float metros p s 0 3048 convers o de p s para metros printf f p s f metros n p s metros 2 Introdu o s Fun es em C finclude lt stdio h gt Um programa exemplo com duas fun es main helloQ chama a fun o hello hello printf Al6 n Documento Tutorial Linguagem C Aplicada Engenharia Page 5 of 162 SytCom Training 2014 All rights reserved include lt stdio h gt Um programa que usa uma fun o com um argumento main int num num 100 sqr num chama sqr com num sqr int x a declara o do par metro esta dentro dos par nteses printf d elevado ao quadrado d n x x x
27. o em C Ray Duncan Makron Books Documento Tutorial Linguagem C Aplicada Engenharia Page 162 of 162 SytCom Training 2014 All rights reserved
28. o getc retornar uma marca EOF quando o fim do arquivo tiver sido encontrado ou um erro tiver ocorrido Portanto para ler um arquivo texto at at que a marca de fim de arquivo seja mostrada voc poder usar o seguinte c digo ch getc fp while ch EOF ch getc fp Usando a fun o feof O sistema de arquivo do Turbo C tamb m pode operar com dados bin rios Quando um arquivo aberto para entrada bin ria poss vel encontrar um valor inteiro igual marca de EOF Isso pode fazer com que na rotina anterior seja indicada uma condi o de fim de arquivo ainda que o fim de arquivo f sico nao tenha sido encontrado Para resolver esse problema foi incluida a fun o feof que usada para determinar o final de um arquivo quando da leitura de dados bin rios A fun o feof tem este prot tipo int feof FILE fp O seu prot tipo est em STDIO H Ela retorna verdadeiro se o final do arquivo tiver sido encontrado caso contr rio retornado um zero Portanto a seguinte rotina l um arquivo bin rio at que o final do arquivo seja encontrado while feop fp ch getc fp Obviamente o mesmo m todo pode ser aplicado tanto a arquivos textos como a arquivos bin rios 46 Fechando um arquivo A fun o fclose usada para fechar um fluxo que foi aberto por uma chamada fun o fopen Ela escreve quaisquer dados restantes na rea intermedi ria fluxo no arquivo e faz um fechamento form
29. ria para a matriz info adr A primeira fun o necess ria ao programa main mostrada aqui main void char opcao inic baut for opcao menu switch opcao case 1 insere break case e exibe break case cl carrega break case s salva break case t return 0 Primeiro a fun o inic_list prepara a matriz de estrutura para uso colando um caractere nulo no primeiro byte do campo nome de cada estrutura na matriz O programa assume que uma vari vel estrutura nao est em uso se o campo nome est vazio A fun o mc list escrita como mostrado aqui Inicializa a matriz info adr void inic_list void register int t Documento Tutorial Linguagem C Aplicada Engenharia Page 98 of 162 SytCom Training 2014 All rights reserved for t 0 TAMANHO t info_adr t nome 0 um nome com comprimento zero significa vazio A fun o menu exibir as opCOES e retornar op o do usu rio Obt m uma sele o no menu menu void char ch do printf Dnsere n printf E xibe n printf C arrega n printf S alva n printf T ermina n n printf sua op o ch getche printf n while strchr iecst tolower ch return tolower ch Essa fun o faz uso de outra fun o de biblioteca do Turbo C strchr que tem este prot tipo char strchr char str char ch Essa fun o p
30. rio include lt stdio h gt void exibe_binario main int i Linit printf Digite um inteiro scanf God amp i ifG gt 256 puts O inteiro deve ser menor que 256 goto Linit puts wRepresenta o bin ria do inteiro exibe binario i return 0 Exibe os bits dentro de um byte void exibe_binario int i register int t for t 128 t gt 0 t t 2 if ig amp t printf 1 else printf 0 printf n Desloca um bit dentro de um byte e mostra include lt stdio h gt Documento Tutorial Linguagem C Aplicada Engenharia Page 119 of 162 SytCom Training 2014 All rights reserved void exibe_binario main int i 1 t for t 0 t lt 8 t exibe_binario i i i lt lt 1 printf n for t 0 t lt 8 t i i gt gt 1 exibe_binario i return 0 Exibe os bits dentro de um byte void exibe_binario int i register int t for t 128 t gt 0 t t 2 if ig amp t printf 1 else printf 0 printf n codifica e decodifica uma string include lt stdio h gt main char str 80 int 1 puts Digite uma string gets str for i 0 i lt strlen str i str i str i NOT em cada um dos 8 bits de cada char que compoe str puts A string codificada decodificada puts str return 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 120 of 162 SytCom Tra
31. struct endereco char nome 30 char rua 40 char cidade 20 char estado 3 unsigned long int cep H struct empregado struct endereco residencia residencia uma struct do tipo endereco float salario aninhada na struct funcionario que do funcionario tipo empregado funcionario residencia cep 90500657 atribui o cep 90500657 para o campo cep da residencia do funcionario Resumindo Os elementos de cada estrutura sao referenciados da esquerda para a direita do mais externo para o mais interno Documento Tutorial Linguagem C Aplicada Engenharia Page 112 of 162 SytCom Training 2014 All rights reserved 54 Campos de bits Ao contr rio de muitas outras linguagens a linguagem C tem um modo pr prio de acessar um ou mais bits dentro de um byte ou palavra Isto pode ser til por diversas razoes 1 se o espa o limitado pode se armazenar muitas vari veis Boolean V F em um byte 2 certas interfaces de dispositivos transmitem informaCOES codificadas em bits dentro de um byte 3 certas rotinas de codifica o de dados necessitam acessar os bits dentro de um byte Um dos m todos que a linguagem C usa para acessar bits baseia se na estrutura chamada campo bit Um campo bit na realidade somente um tipo de membro de estrutura que define o quao grande em bits cada elemento deve ser A forma geral de uma declara o campo bit feita como segue struct nome do tipo estrutura
32. zero nenhum truncamento da sa da ocorre caso esta ultrapasse os limites da porta O uso mais importante da fun o getviewsettings permitir que os programas se ajustem automaticamente s dimensoes da tela ditadas pela placa de v deo presente no sistema Consultando a estrutura viewporttype o programa pode saber as dimensoes da porta de visualiza ao corrente e fazer o ajuste necess rio em suas vari veis internas para que a rea gr fica caia na tela Demonstra o de portas de visualiza o include lt graphics h gt include lt stdlib h gt include lt conio h gt main int driver modo struct viewporttype porta int largura altura register int i driver DETECT initgraph amp driver amp modo Documento Tutorial Linguagem C Aplicada Engenharia Page 136 of 162 SytCom Training 2014 All rights reserved Obt m as dimensoes da porta getviewsettings amp porta Desenha linhas verticais na primeira porta for i 0 i lt porta right i 20 line i porta top i porta bottom Cria uma nova porta no centro da porta altura porta bottom 4 largura porta right 4 setviewport largura altura largura 3 altura 3 1 getviewsettings amp porta Desenha linhas horizontais dentro da segunda porta forG 0 i lt porta right i 10 line 0 i porta bottom i getch closegraph return O 63 Ap ndice l Tabela de caracteres ASCII E GERADOR 31 634 0 95 KT ECK y x Wk 9 7
33. 0 2 Documento Tutorial Linguagem C Aplicada Engenharia Page 44 of 162 SytCom Training 2014 All rights reserved printf l I n printf c c c n matriz 1 0 matriz 1 1 matriz 1 2 printf l I n printf c c c n matriz 2 0 matriz 2 1 matriz 2 2 35 Ponteiros A compreens o e o uso correto de ponteiros sao cr ticos para cria o de muitos programas de xito na linguagem C H tr s motivos para isso Primeiro os ponteiros prov em o meio para que as funC ES possam modificar os seus argumentos de chamada Segundo eles sao usados para suportar rotinas de aloca o din mica da linguagem C Terceiro podem ser substitu dos pelas matrizes em muitas situaC ES proporcionando aumento de efici ncia Al m disso muitas das caracter sticas do C ap iam se firmemente nos ponteiros portanto um completo entendimento de ponteiros muito importante Al m de ser uma das caracter sticas mais fortes da linguagem C os ponteiros tamb m sao muito perigosos Por exemplo quando nao inicializados ou descuidados eles podem causar o travamento do sistema E pior f cil usar ponteiros incorretamente o que causa bugs erros dif ceis de serem encontrados Ponteiros Sao Endere os Um ponteiro uma vari vel que guarda um endere o de mem ria de outro objeto Mais comumente esse endere o a localiza o de outra vari vel na mem ria embora ele possa ser o endere o de uma por
34. 308 Documento Tutorial Linguagem C Aplicada Engenharia Page 10 of 162 SytCom Training 2014 All rights reserved long double 80 3 4E 4932 a 1 1E 4932 include lt stdio h gt Tlustra a diferen a entre inteiros com sinal e sem sinal main int i um inteiro com sinal unsigned int j um inteiro com sinal j 60000 i j printf d u i j Este programa imprime o alfabeto include lt stdio h gt main char letra for letra A letra lt Z letra printf c letra 10 Declarando vari veis declararar ap s declara o de main ou fun oQ vari vel global declarar antes da declara o de main inti j 1 Observe a separa o por v rgulas short int si unsigned int ui double balan o lucro perda Exemplo Somat rio de n meros de O a 9 include lt stdio h gt int soma Vari vel Global main int count Vari vel Local soma 0 inicializacao for count 0 count lt 10 count total count display Documento Tutorial Linguagem C Aplicada Engenharia Page 11 of 162 SytCom Training 2014 All rights reserved total int x soma x soma display it count for count 0 count lt 10 count printf printf o somat rio corrente d n soma adiciona ao total corrente Par metro Formal Vari vel Local este count
35. Aconselha se sempre o uso de par nteses j que al m de deixarem o c digo mais claro eles n o acrescentam nenhum tempo de execu o adicional ou consumo extra de mem ria Documento Tutorial Linguagem C Aplicada Engenharia Page 14 of 162 SytCom Training 2014 All rights reserved 15 Operadores Relacionais e Logicos Operadores Relacionais Operadores L gicos amp amp AND gt Maior que Il OR OU gt Maior ou igual que NOT N O lt Menor que lt Menor ou igual que Igual l Diferente Este programa ilustra os operadores relacionais include lt stdio h gt main int i j printf informe dois numeros scanf d d amp i Su printf d d d n i j i j printf d Jd d n i j i printf d lt d d n i j i lt j printf d gt d d n i j I gt printf d lt d d n i j i lt j printf d gt d d n i j i gt j Obs Os operadores relacionais podem ser aplicados a qualquer tipo de dado b sico O exemplo a seguir mostra a compara o entre dois char chl A ch2 B if ch2 gt ch1 printf maior que Este programa ilustra os operadores l gicos include lt stdio h gt main int i j printf informe dois n meros cada um sendo 0 ou 1 scanf d d amp i amp j printf d AND d d n i j i amp amp j printf d OR d d n i j i lj printf N
36. Basic Em vez disso voc declara uma matriz de caracteres e usa as v rias fun es de strings encontradas na biblioteca adequada para manipul las Para ler uma string do teclado primeiro cria se uma matriz de caracteres suficientemente grande para armazenar a string mais o terminador nulo Por exemplo para armazenar a palavra hello necess rio uma matriz de caracteres de 6 elementos 5 p a string e 1 p o terminador nulo h e T T o vi Documento Tutorial Linguagem C Aplicada Engenharia Page 8 of 162 SytCom Training 2014 All rights reserved Declara se a matriz de caracteres como qualquer vari vel char txt 6 Assim txt 0 h txt 1 e txt 2 T txt 3 T txt 4 oi txt 5 0 Para a leitura de uma string do teclado pode se usar fun o scanf como veremos adiante ou usar a fun o gets A fun o gets toma o nome da string como argumento e faz a leitura dos caracteres do teclado at que a tecla ENTER seja pressionada A tecla ENTER nao armazenada como caracter mas sim substitu da pelo terminador nulo include lt stdio h gt Um exemplo com string main char str 80 printf Digite o seu nome gets str printf Al6 s str Fazendo um breve resumo do que se viu de printf at agora 7 Forma geral da fun o printf printf string de controle lista de argumentos C digo Significado d Exibe um inteiro no formato decimal of Exibe um ti
37. Documento Tutorial Linguagem C Aplicada Engenharia Page 103 of 162 SytCom Training 2014 All rights reserved return inic_listQ for i 0 x TAMANHO i if fread amp info adr i sizeof struct endereco 1 fp 1 if feof fp fclose fp return printf erro de leitura no arquivo n 52 Atribuindo Estruturas include lt stdio h gt main void struct exemplo int i double d um dois um i 10 um d 98 6 dois um atribui a estrutura um a estrutura dois printf d lf dois i dois d return 0 Obs Nao poss vel atribuir uma estrutura a outra se elas sao de tipos Passando estruturas para funCOES Passando elementos de estrutura para funCOES Seja struct char x int y float z char s 10 exemplo Chamando funCOES por valor func exemplo x passa p func o valor do char em x func exemplo y passa pi func2 o valor do int em y func3 exemplo z passa p func3 o valor do float em z func4 exemplo s passa p func4 o endere o da string em s func exemplo s 2 passa p func o valor do char em s 2 diferentes Documento Tutorial Linguagem C Aplicada Engenharia Page 104 of 162 SytCom Training 2014 All rights reserved Chamando funCOES por refer ncia func amp exemplo x passa p func o endere o do char em x func2 amp exemplo y passa p func2 o endere o do int em y func3 amp
38. a execu o recome a no ponto de chamada da fun o dentro da fun o dentro da fun o Tendo em vista que o local para os argumentos de funC ES e para as vari veis locais a pilha e que a cada nova chamada criado uma c pia destas vari veis na pilha poss vel ocorrer overflow da pilha stack overflow e o programa trancar programa recursivo para gera o de som em tonalidade crescente at 1KHz include lt stdio h gt include lt dos h gt main int dur salto printf Digite a dura o de cada ton em milissegundos scanf od amp dur printf Digite o salto entre tons em Hz scanf d amp salto ton 1000 dur salto return 0 ton freq duracao salto int freq duracao salto int 1 if freq gt 0 ton freq salto duracao salto sound freq liga o som delay duracao aguarda duracao milissegundos nosound Documento Tutorial Linguagem C Aplicada Engenharia Page 74 of 162 SytCom Training 2014 All rights reserved 43 Entrada e saida do console Lendo e escrevendo caracteres getch getche getchar e putchar As funC ES mais simples de E S do console teclado e video sao getche que l um caractere do teclado e putchar que imprime um caractere na tela A fun o getche aguarda at que uma tecla seja pressionada e entao retorna o seu valor A tecla pressionada ecoa na tela automaticamente A fun o putchar escreve
39. amp arg2 amp arg3 amp arg4 return arg2 amp 1 return mouse cursor coordinates void mouse_position x y int x y int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum amp arg2 amp arg3 amp arg4 x arg3 y arg4 init mouse void mouse_reset int fnum arg2 arg3 arg4 fnum 0 init mouse cmouses amp fnum amp arg2 amp arg3 amp arg4 if fnum 1 puts No mouse driver installed exit 1 if arg2 2 puts Two buttons mouse required exit 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 145 of 162 SytCom Training 2014 All rights reserved void cmouses fnum arg2 arg3 arg4 int fnum arg2 arg3 arg4 union REGS regs regs x ax fnum regs x bx arg2 regs x cx arg3 regs x dx arg4 int86 0x33 amp regs amp regs fnum regs x ax arg2 regs x bx arg3 regs x cx arg4 regs x dx PRE e de de de de de de de de de e e eo eo A miscellaneous functions PRE e de de de de de de de de de de e eo eo A void cwindow int Ift int up int rgt int dwn int back int edge register int i j window Ift up rgt dwn textcolor back textbackground back forG 1 j lt dwn up 1 j gotoxy L j for i 0 i lt rgt lft i putch textcolor edge wedge Ift up rgt dwn void wedge int sx int sy int ex int ey lt register int i gotoxy 1 1 gt putch m gt got
40. come ox come oy at fimx fimy na cor corrente estabelecida por setcolor A cor de desenho padrao branco A fun o circle desenha um c rculo de raio igual a raio na cor estabelecida por setcolor com centro determinado por x y Se qualquer das coordenadas estiver fora dos limites ser exibida somente a parte se houver do c rculo dentro do limite Demonstra o de pontos linhas c rculos e sa da de texto include lt graphics h gt include lt conio h gt main int driver modo register int i driver DETECT initgraph amp driver amp modo setcolor EGA LIGHTGREEN line 0 0 200 150 setcolor EGA LIGHTRED line 50 100 200 125 Desenha alguns pontos for i 0 i lt 319 i 10 putpixel i 100 EGA YELLOW Desenha alguns c rculos setcolor EGA LIGHTBLUE circle 50 50 35 setcolor EGA LIGHTMAGENTA circle 100 160 100 sleep 1 espera 1 segundo cleardevice limpa a tela gr fica escreve uma string de texto iniciando no meio da tela grafica setbkcolor LIGHTBLUE cor de fundo azul claro setcolor EGA LIGHTRED outtextxy getmaxx 2 getmaxy 2 Isto um teste imprime a string iniciando no meio da tela getch closegraph return 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 133 of 162 SytCom Training 2014 All rights reserved Preenchendo uma rea Para preencher qualquer forma geom trica fech
41. da tradu o mostrado aqui Um tradutor bastante simples de ingl s para portugu s Sugestao Colocar Watches em entrada lt gt p palavra lt gt q loc include lt stdio h gt include lt string h gt char trans 20 is 6 this isto not nao a um book livro apple ma a I eu bread pao drive dirigir to para nn buy comprar mm mm 9 1 char entrada 80 char palavra 80 char p main int loc printf Informe a senten a em ingl s gets entrada p entrada d a p o endere o da matriz entrada printf tradu o r stica para o portugu s pega palavra pega a primeira palavra Este o la o principal Ele l uma palavra por vez da matriz entrada e traduz para o portugu s do procura o ndice da palavra em ingl s em trans loc verifica palavra imprime a palavra em portugu s se uma correspond ncia encontrada if loc 1 printf s trans loc 1 else printf lt desconhecida gt pega_palavra pega a proxima palavra while palavra repete at que uma string nula encontrada Esta fun o retorna a localiza o de uma correspond ncia entre a string apontada pelo par metro s e a matriz trans verifica char s int i for i 0 trans i i if stremp trans i s break if trans i return i se nao o fim da matriz
42. de fundo do tra ado de uma fun o de desenho subsequentemente chamada onde cor e cor de fundo sao dados pelas tabelas abaixo Documento Tutorial Linguagem C Aplicada Engenharia Page 131 of 162 SytCom Training 2014 All rights reserved cor inteiro equivalente EGA_BLACK EGA_BLUE 1 EGA_GREEN 2 EGA_CYAN 3 EGA_RED 4 EGA_MAGENTA 5 EGA_BROWN 20 EGA_LIGHTGREY 7 EGA_DARKGREY 56 EGA_LIGHTBLUE 57 EGA LIGHTGREEN 58 EGA LIGHTCYAN 59 cor inteiro equivalente EGA LIGHTRED 60 EGA LIGHTMAGENTA 61 EGA YELLOW 62 EGA WHITE 63 cor de fundo inteiro equivalente BLACK 0 BLUE 1 GREEN 2 CYAN 3 RED 4 MAGENTA 5 BROWN 6 LIGHTGREY 7 DARKGREY 8 LIGHTBLUE 9 LIGHTGREEN 10 LIGHTCYAN 11 LIGHTRED 12 LIGHTMAGENTA 13 YELLOW 14 WHITE 15 As FunCOES Basicas de Desenho As funCOES gr ficas mais fundamentais sao aquelas que desenham um ponto uma linha e um c rculo Essas funCOES sao chamadas de putpixel line e circle respectivamente Os seus prot tipos sao mostrados aqui Documento Tutorial Linguagem C Aplicada Engenharia Page 132 of 162 SytCom Training 2014 All rights reserved void far putpixel int x int y int cor void far line int come ox int come oy int fimx int fimy void far circle int x int y int raio A fun o putpixel escreve a cor especificada na localiza o determinada por x e y A fun o line desenha uma linha a partir da localiza o especificada por
43. decimal scanf d amp valor printf d em hexadecimal e x valor valor break case 2 printf informe um valor em hexadecimal scanf x amp valor printf x em decimal e d valor valor break case 3 printf informe um valor em decimal scanf d amp valor printf d em octal e o valor valor break case 4 printf informe um valor em octal scanf o amp valor printf o em decimal e d valor valor break default quando nenhuma correspondencia encontrada printf opcao invalida tente outra vez n break Documento Tutorial Linguagem C Aplicada Engenharia Page 21 of 162 SytCom Training 2014 All rights reserved 24 Loop for A forma geral do loop for for inicializa o condi o incremento declara o inicializa o uma declara o de atribui o que inicializa a variavel de controle do loop condi o uma expressao relacional que determina qual situa o terminar a execu o do loop pelo teste da variavel de controle contra algum valor Uma vez falsa a condi o o programa seguir na declara o seguinte ao t rmino do loop for incremento define como a variavel de controle mudar ao longo da execu o do loop declara o ou bloco de declaraC ES o que o loop for executa enquanto ativo Imprime numeros de 1 a 100 na tela include lt stdio h gt main int x for x 1 x lt 100 x printf
44. declara o return Ele pode ser qualquer tipo v lido Se nenhum tipo especificado entao por defini o a fun o retorna um resultado inteiro A lista de declara o de par metros uma lista de tipos de vari veis e nomes separados por v rgula e que receberao os valores dos argumentos quando a fun o for chamada Uma fun o pode estar sem par metro caso em que a lista de par metros estar vazia argumento void Contudo mesmo se nao houver par metros os par nteses ainda sao requeridos A Declara o Return A declara o return tem dois importantes usos Primeiro ela far com que haja uma sa da imediata da fun o corrente Isto uma declara o return far com que a execu o do programa retorne para o c digo chamador assim que ele encontrado Segundo ela pode ser usada para retornar um valor Esses dois recursos serao examinados aqui Retornando de uma Fun o Existem duas maneiras de uma fun o terminar a execu o e retornar ao seu chamador A primeira quando a ltima declara o na fun o executada e conceitualmente o finalizador da fun o encontrado Por exemplo esta fun o simples imprime uma string inversa na tela void pr inverso char s register int t for t strlen s 1 t gt 1 t printf c s t Uma vez que a string tiver sido exibida nao h nada para a fun o fazer a seguir entao ela retorna ao lugar de onde foi chamada A seg
45. deltax NOT_MOVED if arg4 gt 0 deltay DOWN else if arg4 lt 0 deltay UP else deltay NOT_MOVED init mouse void mouse_reset int fnum arg2 arg3 arg4 fnum 0 init mouse cmouses amp fnum amp arg2 amp arg3 amp arg4 if fnum 1 puts No mouse driver installed exit 1 if arg2 2 puts Two buttons mouse required exit 1 void cmouses fnum arg2 arg3 arg4 int fnum arg2 arg3 arg4 union REGS regs regs x ax fnum regs x bx arg2 regs x cx arg3 regs x dx arg4 Documento Tutorial Linguagem C Aplicada Engenharia Page 150 of 162 SytCom Training 2014 All rights reserved E AN int86 0x33 amp regs amp regs fnum regs x ax arg2 regs x bx arg3 regs x cx arg4 regs x dx 67 Ap ndice V PROGRAMA DEMONSTRATIVO DE USO DE ESTRUTURAS PARA DETERMINAgao DO CENTRO GEOMETRICO DE UM POLIEDRO S LIDO Calcula Centro Geometrico Versao 1 include lt stdio h gt struct coord float x float y float z 1 void main int 1 teste FILE fp struct coord vert 10 float cg fp fopen vertices dat rt if fp puts nao posso abrir arquivo exit 1 for i 0 i lt 10 1 teste fscanf fp f f f amp vert i x amp vert i y amp vert i z if teste 1 puts achei EOF exit 1 cg med vert o nome de qualquer rea de armazenamento o endere o inicial da rea na mem ria printf
46. desenha um retangulo setcolor EGA LIGHTGREEN rectangle 100 100 300 200 Documento Tutorial Linguagem C Aplicada Engenharia Page 134 of 162 SytCom Training 2014 All rights reserved sleep 1 preenche o retangulo anterior setfillstyle SOLID FILL BLUE floodfill 1 10 110 EGA_LIGHTGREEN sleep 1 desenha uma linha setcolor EGA BLUE line 50 200 400 125 sleep 1 Desenha o setor superior em V setcolor EGA_LIGHTRED for i 0 1 lt 640 1 3 line 320 174 1 0 sleep 1 desenha alguns circulos setcolor EGA LIGHTGREEN circle 50 50 35 setfillstyle SOLID FILL MAGENTA preenche floodfill 50 50 EGA LIGHTGREEN setcolor EGA LIGHTMAGENTA nao preenche este circle 320 175 100 setcolor EGA LIGHTCY AN nao preenche este circle 100 100 200 sleep 1 Desenha um alvo setcolor EGA GREEN circle 500 250 90 setfillstyle SOLID FILL GREEN floodfill 500 250 EGA GREEN preenche c rculo mais externo setcolor EGA RED circle 500 250 60 setfillstyle SOLID FILL RED floodfill 500 250 EGA RED setcolor EGA GREEN circle 500 250 30 setfillstyle SOLID FILL GREEN floodfill 500 250 EGA GREEN setcolor EGA RED circle 500 250 10 setfillstyle SOLID FILL RED floodfill 500 250 EGA RED Documento Tutorial Linguagem C Aplicada Engenharia Page 135 of 162 SytCom Training 2014 All rights reserved getch clos
47. diferente daquele count na fungao main Constantes Tipo de Dado Exemplos de Constantes Char a n 9 int 1123 21000 234 long int 35000 34 short int 10 12 90 unsigned int 10000 987 40000 float 123 23 4 34e 3 double 123 23 12312333 0 9876324 1i Constantes Hexadecimais e Octais hex OxFF oct 011 C digos de Barra Invertida ch t printf Ceste um teste n 255 em decimal 9 em decimal C digos de Barra Invertida C digo Significado b Retrocesso f Alimenta o de formul rio n Nova linha r Retorno de carro t Tabula o horizontal Aspas Ap strofo VI Nulo VW Barra invertida v Tabulacao vertical a Sinal sonoro Documento Tutorial Linguagem C Aplicada Engenharia Page 12 of 162 SytCom Training 2014 All rights reserved N Constante Octal onde N uma constante octal xN Constante hexadecimal onde N uma constante hexadecimal 12 Inicializagao de Variaveis tipo nome da vari vel constante char ch a int primeiro 0 float balango 123 23 Um exemplo usando inicializa o de vari veis include lt stdio h gt main int t printf informe um n mero scanf d amp t total t total int x int sum 0 i count for i 0 i lt x i sum sum i for count 0 count lt 10 count printf printf a somat ria corrente d n sum
48. do while em rotinas de sele o de menu Depois que a scanf pegar a op o o loop se repetir at que o usu rio digite uma op o v lida no exemplo abaixo certifica se de que o usuario especificou uma op o valida finclude lt stdio h gt main int opcao do printf Converter An printf 1 decimal para hexadecimal n printf 2 hexadecimal para decimal n printf 3 decimal para octal n printf 4 octal para decimal n printf informe a sua op o scanf d amp opcao while opcao lt 1llopcao gt 4 printf Voce digitou a op o d opcao Documento Tutorial Linguagem C Aplicada Engenharia Page 27 of 162 SytCom Training 2014 All rights reserved Er Loops aninhados Exibe uma tabela das quatro primeiras potencias dos numeros de 1 a 9 include lt stdio h gt main int i j k temp printf i 0 m iMh for i 1 i lt 10 i la o externo define o numero base for j 1 j lt 5 j primeiro nivel do aninhamento temp 1 for k 0 k lt j k temp temp i la o mais interno eleva a j printf 9d temp se um numero colocado entre o e o d ele diz a printf p adicionar os espa os neces printf n s rios largura especificada Programa de conversao de base numerica versao final usando la os while aninhados decimal gt hexadecimal hexadecimal gt decimal decimal gt
49. else for i 0 1 lt 42 1 if x lt we i rg amp amp x gt we i lf amp amp y gt we i up amp amp y lt we i dw sound freq i break looping up till right button pressed while rightb_pressed system cls cursor off textmode LASTMODE return O selects videomode nao usada gt igual a textmode void mode mode_code int mode_code union REGS r r h al mode code r h ah 0 int86 0x10 amp r amp r RP AS de ag FA de de de de de de de de de e eo eo e e k kk kkk kkk kk kk mouse interfacing functions Documento Tutorial Linguagem C Aplicada Engenharia Page 144 of 162 SytCom Training 2014 All rights reserved PRE e de de de de de de de de de de e eo eo eo oe e o ek eh e oe e oe de she eh turn off mouse cursor void cursor off int fnum fnum 2 cursor off cmouses amp fnum amp fnum amp fnum amp fnum turn on mouse cursor void cursor_on int fnum fnum 1 cursor on cmouses amp fnum amp fnum amp fnum amp fnum returns V if rightbutton pressed F otherwise rightb_pressed int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum amp arg2 amp arg3 amp arg4 return arg2 amp 2 returns V if leftbutton pressed F otherwise leftb_pressed int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum
50. em planilhas de c lculo tipo Lotus em que se armazena uma grande quantidade de dados encadeados Um exemplo de uso de estruturas uma lista de endere os simples Para ajudar a mostrar como as estruturas e matrizes de estruturas sao usadas um programa simples de listas de endere os que usa uma matriz de estruturas para armazenar a informa o do endere o ser desenvolvido As funC ES neste programa interagem com as estruturas e seus elementos para ilustrar o uso de estruturas Neste exemplo a informa o que ser armazenada inclui nome rua cidade Documento Tutorial Linguagem C Aplicada Engenharia Page 97 of 162 SytCom Training 2014 All rights reserved estado cep Para definir a estrutura de dados b sica endereco que guardar esta informa o voc poder escrever struct endere o char nome 40 char rua 40 char cidade 30 char estado 3 char cep 10 info_adr tamanho Note que essa estrutura usa um string para armazenar o c digo do cep em vez de um inteiro sem sinal Essa abordagem acomoda tanto os c digos postais com letras como aqueles com n meros como os usados pelo Canad e outros pa ses A matriz info adr cont m TAMANHO estruturas do tipo endereco onde TAMANHO pode ser definido para satisfazer uma necessidade espec fica Fica aqui a sugestao que se tente reescrever este programa utilizando as funC ES de aloca o din mica do Turbo C no sentido de automatizar a aloca o de mem
51. exemplo z passa p func3 o endere o do float em z func4 exemplo s passa p func4 o endere o da string em s func amp exemplo s 2 passa p func o endere o do char em s 2 Observe que o operador amp precede o nome da vari vel estrutura nao o nome do elemento individual Note tamb m que o elemento string s j significa um endere o assim o operador amp nao requerido Passando estruturas inteiras para funCOES Quando uma estrutura usada como argumento para uma fun o a estrutura inteira passada usando se o m todo padrao de chamada por valor Isto significa obviamente que qualquer mudan a feita no conte do de uma estrutura dentro da fun o para qual ela passada nao afeta a estrutura usada como argumento A considera o mais importante para se ter em mente quando se usa uma estrutura como argumento que os tipos devem ser compat veis na chamada e na declara o da fun o Este programa declara os argumentos arg e parm para serem do mesmo tipo de estrutura include lt stdio h gt define um tipo de estrutura struct exemplo int a b char ch nenhuma memoria alocada at aqui void f1Q main void struct exemplo arg aloca memoria para arg arg a 1000 fI arg return 0 void fl parm struct exemplo parm printf d parm a Ponteiros para estruturas Documento Tutorial Linguagem C Aplicada Engenharia Page 1
52. gets s imprime_maiuscula s printf na string original alterada s s void imprime_maiuscula char string register int t for t 0 string t t string t toupper string t printf c string t Depois de chamada fun o imprime mai scula o conte do da matriz s em main ser mudado para letras mai sculas Se voc nao quer que isso aconte a pode escrever assim Imprime uma string em letra mai scula include lt stdio h gt include lt ctype h gt void imprime_maiuscula char string Documento Tutorial Linguagem C Aplicada Engenharia Page 67 of 162 SytCom Training 2014 All rights reserved main void char s 80 printf informe uma string gets s imprime_maiuscula s printf na string original nao modificada s s void imprime_maiuscula char string register int t for t 0 string t t printf c toupper string t Nessa versao o conte do da matriz s permanece inalterado uma vez que os seus valores sao os mesmos Um exemplo cl ssico de passagens de matrizes em funCOES encontrado na fun o de biblioteca streat Ainda que strcat na biblioteca padrao seja algo diferente a fun o mostrada aqui lhe dar uma id ia de como ela funciona Para evitar confusao com a fun o padrao ela ser chamada strcat2 Demonstra o da fun o strcat2 include lt stdio h gt char strcat2 char sl char Zeit main
53. gt include lt conio h gt main long tm printf Este programa testa o seu senso de tempo n printf Quando estiver pronto pressione a tecla return espere cinco segundos n printf e pressione qualquer tecla getche printf n tm time 0 for if kbhitQ break if time 0 tm 5 printf Voce venceu else printf O seu sincronismo est mal Erro de d segundos int time 0 tm 5 Documento Tutorial Linguagem C Aplicada Engenharia Page 29 of 162 SytCom Training 2014 All rights reserved Observe que um break causar uma sa da somente do la o mais interno Por exemplo for t 0 t lt 100 t count 1 for printf d count count if count 10 break O c digo acima imprimir os n meros de 1 a 10 cem vezes na tela Toda vezque o break encontrado o controle devolvido para o la o for externo Outra observa o o fato que um break usado dentro de uma declara o switch afetar somente os dados relacionados com o switch e nao qualquer outro la o em que o switch estiver 28 Declara o continue Continue opera da mesma maneira que o break mas em vez de terminar o loop e seguir na declara o seguinte continue for a a ativa o da pr xima itera o do loop pulando qualquer c digo que esteja entre eles Exemplos Imprime na tela os n meros pares at 99 include lt stdio h gt main int x for x 0 x lt 100 x
54. h gt include lt math h gt include lt conio h gt include lt graphics h gt include lt alloc h gt define ICONRIGHT 26 define ICONDOWN 10 define NOT_MOVED 0 define RIGHT 1 define LEFT 2 define UP 3 define DOWN 4 void cmouses void mouse_position void mouse motion void cursor on void cursor off void mouse reset Documento Tutorial Linguagem C Aplicada Engenharia Page 147 of 162 SytCom Training 2014 All rights reserved main char deltax deltay int x y xa ya int graphdriver graphmode ncolor char idcolor J Pr Az Vd Ci Vm Mg CzC Mr CzE AzC VdC CiC VmC MgC Am Br int color EGA_BLACK EGA_BLUE EGA_GREEN EGA_CYAN EGA_RED EGA_MAGENTA EGA_LIG HTGRAY EGA_BROWN EGA_DARKGRAY EGA_LIGHTBLUE EGA_LIGHTGREEN EGA_LIGHTCY AN EGA_LIGHTRED EGA_LIGHTMAGENTA EGA_YELLOW EGA_WHITE directvideo 1 graphdriver VGA graphmode VGAHI initgraph amp graphdriver amp graphmode ncolor WHITE setcolor color ncolor setlinestyleSOLID_LINE 0 NORM_WIDTH mouse_reset init mouse cursor_on outtextxy 2 2 idcolor ncolor writes idcolor on icon rectangle 0 0 ICONRIGHT ICONDOWN draw icon rectangle setlinestyle SOLID LINE 0 THICK WIDTH do mouse_position amp x amp y get mouse position if leftb_pressed xa x ya y moveto x y tracks mouse cursor if leftb not pressed mouse_motion amp deltax amp d
55. if x 2 continue se o resto zero o loop continua printf d x Um codificador simples include lt stdio h gt include lt conio h gt main printf Insira as letras que voce quer codificar n printf Digite um quando estiver no final das letras n code Documento Tutorial Linguagem C Aplicada Engenharia Page 30 of 162 SytCom Training 2014 All rights reserved code Codifica as letras char pronto ch pronto 0 while pronto ch getch if ch pronto 1 continue printf c ch 1 desloca o alfabeto uma posi o 29 Labels e goto Semelhante ao GOTO line do BASIC e FORTRAN com a diferen a que o destino um LABEL r tulo e nao um n mero de linha do programa Somente pode ser usado em desvios dentro da mesma fun o nao podendo transferir a execu o do programa de uma fun o para outra Exemplos O c digo abaixo implementa um loop de 1 a 100 x 1 loop1 2 pontos ap s o nome do label loop1 X if x lt 100 goto loop1 O goto torna se bastante til quando necess rio sair de uma rotina profun damente aninhada for for while if goto Lstop desvio condicional p o label Lstop Lstop printf erro no programa n Documento Tutorial Linguagem C Aplicada Engenharia Page 31 of 162 SytCom Training 2014 All rights reserved Observe que se usarmos um break
56. interface simples do sistema do sistema operacional com o usu rio dirigida por menu include lt stdio h gt include lt stdlib h gt include lt conio h gt main d cria uma matriz de strings char comando DIR CHKDSK TIME DATE char ch for do printf 1 diret rio n printf 2 verifica o disco n printf 3 atualiza a hora n printf 4 atualiza a data n printf 5 sair n printf nop o ch getche Documento Tutorial Linguagem C Aplicada Engenharia Page 53 of 162 SytCom Training 2014 All rights reserved while ch lt 19 Il ch gt 5 if ch 5 break fim executa o comando espec fico printf n system comando ch 1 Qualquer comando do DOS inclusive a chamada a outros programas pode ser implementada desta maneira Simples Tradutor Ingl s Portugu s A primeira coisa que voc precisa a tabela ingl s portugu s mostrada aqui entretanto voc livre para expandi la se assim o desejar char trans 20 is this isto not nao a um book livro apple maga I eu bread pao drive dirigir to para buy comprar mn mu Cada palavra em ingl s colocada em par com a equivalente em portugu s Note que a palavra mais longa nao excede 19 caracteres A fun o main do programa de tradu o mostrada aqui junto c
57. matrizes o tamanho real da matriz irrelevante para o par metro mas nao para o programa obviamente Esse m todo de declara o define a vari vel num como um ponteiro inteiro Documento Tutorial Linguagem C Aplicada Engenharia Page 66 of 162 SytCom Training 2014 All rights reserved O modo final como a vari vel num pode ser declarada e a forma mais comum em programas profissionais escritos na linguagem C um ponteiro como mostrado aqui void imprime int num int 1 for i 0 i lt 10 i printf d num i Isso permitido j que qualquer ponteiro pode ser indexado usando se num i como se fosse numa matriz ou num 1 Reconhe a que todos os tr s m todos de declara o de par metro matriz produzirao o mesmo resultado um ponteiro importante entender que quando uma matriz usada como argumento de fun o seu endere o passado para a fun o Essa uma exce o para a conven o de passagem de par metro por chamada de valor da linguagem C Isso significa que o c digo na fun o estar operando sobre e potencialmente alterando o conte do atual da matriz usada para chamar a fun o Por exemplo considere a fun o imprime mai scula que imprime o seu argumento string em letra mai scula Imprime uma string em letra mai scula include lt stdio h gt include lt ctype h gt void imprime_maiuscula main void char s 80 printf informe uma string
58. o seu argumento caractere na tela na posi o corrente do cursor Os prot tipos sao int getche void header conio h int putchar int c header stdio h Nao nos perturbemos com o fato de getche retornar um inteiro o byte de mais baixa ordem contem o caractere e quando atribue se um inteiro a uma vari vel char somente transferido o byte mais baixo Tamb m a fun o putchar embora seja declarada com um argumento inteiro somente o byte mais baixo enviado tela Uma versao mais til de getche getch que nao ecoa na tela o caractere digitado O prot tipo id ntico ao de getche inverte min sculas lt gt mai sculas include lt stdio h gt include lt conio h gt include lt ctype h gt main char ch printf Insira caracteres e digite um ponto para parar n do ch getchQ if islower ch putchar toupper ch else putchar tolower ch while ch 9 return O Uma versao antiga de getche ainda dirigida para ambientes UNIX getchar mas sofre de problemas com seu buffer intermedi rio em ambientes DOS iterativos No entanto permite o retorno do caracter CR Carriage Return Enter Lendo e escrevendo strings gets e puts A fun o gets l uma string de caracteres entrada pelo teclado e coloca a no endere o apontado pelo seu argumento ponteiro para caractere Digita se caracteres at que um Enter CR Carriage Return seja pressionado O CR nao
59. octal octal gt decimal include lt stdio h gt main int opcao int valor repete ate que o usuario diga para terminar do certifica se de que o usuario especifica uma op o valida do printf nConverter n printf 1 decimal para hexadecimal n printf 2 hexadecimal para decimal n printf 3 decimal para octal n printf 4 octal para decimal n printf informe a sua opcao scanf d amp opcao while opcao lt 1llopcao gt 5 switch opcao case 1 printf informe um valor em decimal scanf d amp valor printf d em hexadecimal x valor valor break Documento Tutorial Linguagem C Aplicada Engenharia Page 28 of 162 SytCom Training 2014 All rights reserved case 2 printf informe um valor em hexadecimal scanf x amp valor printf x em decimal d valor valor break case 3 printf informe um valor em decimal scanf d amp valor printf d em octal 0 valor valor break case 4 printf informe um valor em octal scanf o amp valor printf o em decimal d valor valor break printf n while opcao 5 Quebrando um loop imprime na tela os numeros de 1 a 10 include lt stdio h gt main int t for t 0 t lt 100 t printf d t if t 10 break Como esta o seu senso de tempo include lt stdio h gt include lt time h
60. puts Erro ao escrever no arquivo break Documento Tutorial Linguagem C Aplicada Engenharia Page 86 of 162 SytCom Training 2014 All rights reserved while ch fclose fp return 0 c digo de retorno de final OK p o DOS OPCIONAL L arquivos e exibe os na tela include lt stdio h gt include lt stdlib h gt main int argc char argv FILE fp char ch if arge 3 puts Voc se esqueceu de informar o nome do arquivo e o modo exit 1 if fp fopen argv 1 argv 2 NULL experimentar rb rt e testar newline puts O arquivo nao pode ser aberto exit 1 ch getc fp 1 um caractere while ch EOF putchar ch imprime na tela ch getc fp return 0 getw e putw Funcionam exatamente como putc e getc s que em vez de ler ou escrever um nico caractere l em ou escrevem um inteiro Prot tipos int putw int i FILE fp int getw FILE fp Header stdio h Exemplo putw 100 saida escreve o inteiro 100 no arquivo apontado por saida fgets e fputs Funcionam como gets e puts s que l em e escrevem em fluxos Prot tipos Documento Tutorial Linguagem C Aplicada Engenharia Page 87 of 162 SytCom Training 2014 All rights reserved char fputs char str FILE fp char fgets char str int tamanho FILE fp Obs fgets l uma string de um fluxo especificado at que um newline seja lido OU taman
61. qualquer outro As FunCOES Mais Comuns do Sistema de Arquivo Documento Tutorial Linguagem C Aplicada Engenharia Page 82 of 162 SytCom Training 2014 All rights reserved Fun o Opera o fopen Abre um fluxo fclose Fecha um fluxo putc Escreve um caractere para um fluxo getc L um carcatere para um fluxo fseek Procura por um byte especificado no fluxo fprintf para um fluxo aquilo que printf para o console fscanf para um fluxo aquilo que scanf para o console feof Retorna verdadeiro se o fim do arquivo encontrado ferror Retorna verdadeiro se ocorreu um erro fread L um bloco de dados de um fluxo fwrite Escreve um bloco de dados para um fluxo rewind Reposiciona o localizador de posi o de arquivo no come o do arquivo remove Apaga um arquivo 45 Abrindo um Arquivo A fun o fopen serve a dois prop sitos Primeiro ela abre um fluxo para uso e liga um arquivo com ele Segundo retorna o ponteiro de arquivo associado quele arquivo Mais freqiientemente e para o resto desta discussao 0 arquivo um arquivo em disco A fun o fopen tem este prot tipo FILE fopen char nome de arquivo char modo onde modo uma string contendo o estado desejado para abertura O nome do arquivo deve ser uma string de caracteres que compreende um nome de arquivo v lido para o sistema operacional e onde possa ser inclu da uma especifica o de caminho PATH Como determinado
62. rgt 1 strncat line tmp 1 j imprime lados horizontais da borda textcolor edgecolor gotoxy lft 1 up cprintf s line gotoxy lft 1 dwn cprintf s line imprime lados verticais da borda i up 1 while i lt dwn 1 gotoxy lft i putch edge 4 gotoxy rgt i putch edge 4 i coloca caracteres nos 4 cantos da janela gotoxy Ift up putch edge 0 gotoxy rgt up putch edge 1 gotoxy Ift dwn putch edge 3 truque p evitar rolagem do caso tela tela total 80x25 quando escrevendo o caracter do canto inferior direito da janela gotoxy rgt dwn gettextinfo amp ti pega text info e bota na struct ti inregs h ah 0x09 int 10h fun o 09h escreve char na pos cursor c atributo especificado e NAO avan a cursor Documento Tutorial Linguagem C Aplicada Engenharia Page 140 of 162 SytCom Training 2014 All rights reserved That s the trick inregs h al edge 2 char a ser escrito inregs h bh 0 pagina ativa inregs h bl ti attribute atributo definido na struct ti inregs x cx 1 fator de repeti o int86 0x 10 amp inregs amp outregs window lft 1 up 1 rgt 1 dwn 1 reduz em uma unidade as dimensoes da janela ativa p evitar transbordo alem da borda definida quando a linha a ser impressa excede tamanho da janela REGS union is definedin lt DOS H gt union REG
63. toma parte da string em vez disto um terminador nulo 0 colocado no fim da sequencia de caracteres e a fun o gets retorna Prot tipo char gets char s Header stdio h Documento Tutorial Linguagem C Aplicada Engenharia Page 75 of 162 SytCom Training 2014 All rights reserved onde s uma matriz de caracteres que recebe os caracteres digitados Observe que gets retorna um ponteiro para s A fun o puts escreve o seu argumento string para a tela seguido de n Prot tipo int puts char s Header stdio h puts reconhece os mesmos c digos de barra invertida de printf como o t de tabula o Uma chamada para puts gera um c digo execut vel bem menor e mais r pido do que uma chamada a printf Entrada e sa da formatada do console scanf e printf O termo formatada refere se ao fato de que essas funCOES podem ler e escrever dados em v rios formatos que estao sob seu controle printfQ O prot tipo de printf int printf char string de controle lista de argumentos com header em stdio h A string de controle consiste em dois tipos de tens O primeiro tipo o conjunto de caracteres que o usu rio deseja que sejam impressos na tela O segundo tipo o conjunto de especificadores de formato que definem a maneira como os argumentos sao exibidos Um especificador de formato come a com um sinal de porcentagem e seguido pelo c digo de formato Deve haver o mesmo n mero de a
64. trans retorna i else return 1 se retorna 1 desconhecida Documento Tutorial Linguagem C Aplicada Engenharia Page 56 of 162 SytCom Training 2014 All rights reserved Esta fun o ler a pr xima palavra da matriz entrada Cada palavra considerada como sendo separada por um espa o ou pelo terminador nulo Nenhuma outra pontua o permitida A palavra retornada ser uma string de tamanho nulo quando o final da string entrada encontrado pega palavra char q recarrega o endere o da palavra toda vez que a fun o chamada q palavra palavra global pega a pr xima palavra while p amp amp mol p global q p ptt q Up p q 0 termina cada palavra com um terminador nulo 38 Ponteiros para Ponteiros Indire o simples Ponteiro Vari vel endere o valor Indire o m ltipla Ponteiro Ponteiro Vari vel endere o endere o 7 valor J Uma vari vel que um ponteiro para um ponteiro deve ser declarada como tal Isso feito colocando se um asterisco adicional na frente do seu nome Por exemplo esta declara o diz ao compilador que novobalan o um ponteiro para um ponteiro do tipo float float novobalan o E importante entender que novobalan o nao um ponteiro para um n mero de ponto flutuante mas antes um ponteiro para um ponteiro float Para acessar o valor desejad
65. void char s1 80 s2 80 printf Informe duas strings n gets s1 gets s2 strcat2 s1 s2 printf concatenado s s1 char streat2 char s1 char s2 char temp temp sl primeiro encontra o final de s1 while s1 sl adiciona s2 while s2 gl s2 sl s2 s1 0 acrescenta o terminador nulo return temp A fun o strcat2 deve ser chamada com duas matrizes de caracteres que por defini o sao ponteiros para caracteres Logo na entrada a fun o strcat2 busca o final da primeira string onde acrescenta a segunda string Depois colocado o terminador nulo na primeira string Documento Tutorial Linguagem C Aplicada Engenharia Page 68 of 162 SytCom Training 2014 All rights reserved retornando mais de um valor de uma fun o conversao polar lt gt retangular p n meros complexos complexos include lt stdlib h gt include lt math h gt double rp main char sign char op double zo double zi 2 double a b do printf R gt P r ou P gt R p op tolower getche printf n switch op case r printf Z Re j Im entre no formato Re Im scanf lf Golf amp zi 0 amp zi 1 ZO rp zi op printf Z Mag lt Ang lf lt lf zo 0 zo 1 break case p printf Z Mag lt Ang entre no formato Mag Ang scanf lf lf amp zi 0 amp zi 1 ZO rp zi op if zo 1 lt 0 sign
66. void salva void FILE fp register int 1 if fp fopen listend dat wb NULL printf o arquivo nao pode ser aberto n return for i 0 i lt TAMANHO i if info_adr i nome if fwrite amp info_adr i sizeof struct endereco 1 fp 1 printf erro de escrita no arquivo n fclose fp Carrega o arquivo void carrega void FILE fp register int i if fp fopen listend dat rb NULL printf o arquivo nao pode ser aberto n return inic_listQ for i 0 x TAMANHO i if fread amp info adr i sizeof struct endereco 1 fp 1 if feof fp fclose fp return printf erro de leitura no arquivo n Documento Tutorial Linguagem C Aplicada Engenharia Page 100 of 162 SytCom Training 2014 All rights reserved As duas rotinas confirmam uma opera o com sucesso no arquivo checando o valor retornado pela fun o fread ou fwrite Ainda a fun o carrega deve checar explicitamente o fim do arquivo pelo uso da fun o feof uma vez que a fun o fread retorna o mesmo valor se o fim do arquivo encontrado ou se tiver ocorrido um erro A fun o final que o programa necessita exibe Ela imprime a lista de endere os inteira na tela Exibe a lista void exibe void register int t for t 0 t lt TAMANHO t if info_adr t nome printf Nome s n info_adr t nome printf Rua s n info_adr t rua printf Cidade s n i
67. 05 of 162 SytCom Training 2014 All rights reserved Existe uma desvantagem maior em passar tudo at a mais simples estrutura para funCOES a sobrecarga da pilha implicando em perda de tempo na transfer ncia de dados entre uma fun o chamadora e fun o chamada Al m do perigo bvio do overflow da pilha stack overflow Em estruturas simples com poucos elementos esse esfor o nao tao importante mas se muitos elementos sao usados e se algum dele matriz a velocidade de execu o pode ser completamente degradada ao utilizarmos chamada de funC ES por valor A solu o passar para a fun o chamada somente um ponteiro para a estrutura argumento Quando um ponteiro para estrutura passado para uma fun o somente o endere o da estrutura passado para a fun o somente o endere o da estrutura empurrado para a pilha Isto significa que uma chamada de fun o extremamente r pida pode ser executada Tamb m como estaremos referenciando a estrutura argumento em si e nao uma c pia na pilha a fun o chamada ter condiC ES de modificar o conte do dos elementos da estrutura argumento usada na chamada Para encontrar o endere o de uma vari vel estrutura o operador amp colocado antes do nome da vari vel estrutura struct sal float saldo char nome 80 cliente struct sal ptr declara um ponteiro para estruturas tipo sal ptr amp cliente coloca o endere o de cliente em ptr Para acessa
68. 121 e Dee dee E TEE 124 60 EXIBINDO TEXTOS EM COREG csseececceceeesteeeeaeeececeseeseaaaaeaaceceseenaaaeanaeaeeeseensanaaaaeseeeseenseaaaas 128 61 INTRODU O AO SISTEMA GR FICO DO TuppOC nnne 129 62 CRIANDO PORTAS DE VISUALIZACAO NAAKKA RRENA RANAR 136 63 AP NDICE TABELA DE CARACTERES ASCII E GERADOR sssssssssssssnssnsssnnsrissnesrensrnnnne ne 137 64 AP NDICE Il PROGRAMA DEMONSTRATIVO DE JANELAS POP UP S 138 65 AP NDICE Ill PROGRAMA DEMONSTRATIVO DE CONTROLE DO MOUSE EM MODO 66 AP NDICE IV PROGRAMA DEMONSTRATIVO DE CONTROLE DO MOUSE EM MODO CRIE EEN 147 67 AP NDICE V PROGRAMA DEMONSTRATIVO DE USO DE ESTRUTURAS PARA DETERMINA O DO CENTRO GEOMETRICO DE UM POLIEDRO S LIDO snnssss11110511111 151 68 AP NDICE VI PROGRAMA DEMONSTRATIVO DO USO DE PONTEIROS FAR PARA ESCRITA DIRETA NA MEMORIA DE VIDEO EEN 153 69 AP NDICE VII PROGRAMA DEMONSTRATIVO DO USO DE ALOCA O DIN MICA DE MEMORIA PARA OPERACOES SIMPLES COM MATRIZES DIDIMENSIONAIS 154 70 AP NDICE VIII PROGRAMA EXEMPLO PARA GERA O DE GRAFICOS CARTESIANOS NA TELA A PARTIR DE UM ARQUIVO NUM RICO cicicisececene caneca nana nana nana nana nana nana nana nana nana nana nana aaa nana nana nana 158 71 REFERENCIAS BIBLIOGR FICAS aeee eres 162 Documento Tutorial Linguagem C Aplicada Engenharia Page 4 of 162 SytCom Training 2014 All rights reserved 1 Introdu o Introdu
69. 2 SytCom Training 2014 All rights reserved float exemplo 10 10 int i j if fp fopen exemplo dat rb NULL puts Nao posso abrir arquivo exit 1 o c digo a seguir l a matriz inteira em um nico passo if fread exemplo sizeof exemplo 1 fp 1 puts Erro ao ler arquivo exit 1 for i 0 1 lt 10 1 for j 0 j lt 10 j printf 3 1f exemplo i j printf n fclose fp return 0 47 Acesso rand mico a arquivos fseek A fun o fseek indica o localizador de posi o do arquivo Prot tipo int fseek FILE fp long numbytes int origem Header stdio h fp um ponteiro para o arquivo retornado por uma chamada fopen numbytes long int o n mero de bytes a partir da origem at a posi o corrente origem uma das seguintes macros definidas em stdio h Origem Nome da Macro Valor num rico come o do arquivo SEEK SET 0 posi o corrente SEEK CUR 1 fim do arquivo SEEK END 2 Portanto para procurar numbytes do come o do arquivo origem deve ser SEEK SET Para procurar da posi o corrente em diante origem SEEK CUR Para procurar numbytes do final do arquivo de tr s para diante origem SEEK END O seguinte c digo l o 235 byte do arquivo chamado test FILE fp Documento Tutorial Linguagem C Aplicada Engenharia Page 90 of 162 SytCom Training 2014 All rights reserved char ch if fp fopen teste rb NULL puts
70. DEMONSTRATIVO DE JANELAS POP UP s window c testa operacoes com janelas no modo texto Por Eng Fernando C sar C de Castro CREA48711 13 12 1993 include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt include lt string h gt void cwindow void main char edgeil char edge2 m7 t char edge3 ALT ek eB e1 e2 e3 e4 e5 gt ver comentario em cwindow gt LEI 3 int 1 system cls cwindow 1 1 80 25 edgel LIGHTCYAN CYAN desenha janela de fundo CYAN e borda LIGHTCYAN tipo edgel cwindow 5 5 30 15 NULL LIGHTBLUE BLUE janela c fundo BLUE sem borda textcolor LIGHTBLUE proxima sa da de texto em cor LIGHTBLUE Documento Tutorial Linguagem C Aplicada Engenharia Page 138 of 162 SytCom Training 2014 All rights reserved cputs Iniciando em 1 1 desta janela Note que os caracteres ficam confinados internamente embora a largura da linha exceda a da janela cwindow 40 10 70 15 edge2 BLACK GREEN janela fundo GREEN borda BLACK tipo edge2 textcolor YELLOW prox sa da de texto em YELLOW gotoxy 5 2 cputs Iniciando em 5 2 desta janela cwindow 10 20 40 25 edgel LLIGHTMAGENTA MAGENTA janela fundo MAGENTA borda LIGHTMAGENTA tipo edgel textcolor LIGHTRED prox sa da texto em LIGHTRED zi gotoxy 6 1 cputs CONTAGEM REGRESSIVA
71. LALOC fclose in numlido i 1 deteta top e bottom de x e y topx topy botx boty 0 for i 0 i lt numlido i if x i gt topx topx x i if x i lt botx botx x i if y i gt topy topy yli if y i lt boty boty y i gdriver MONITOR gmode MODO inicializa modo grafico errorcode registerbgidriver EGAVGA driver registra driver EGAVGA reporta qualquer erro de registro if errorcode lt 0 goto L EGR errorcode registerbgifont small font registra fonte Small Font reporta qualquer erro de registro if errorcode lt 0 goto L EGR initgraph amp gdriver amp gmode Je resultado da inicializa o errorcode graphresult if errorcode grOk ocorreu um erro L_EGR Documento Tutorial Linguagem C Aplicada Engenharia Page 159 of 162 SytCom Training 2014 All rights reserved printf Erro grafico s n grapherrormsg errorcode printf Pressione qualquer tecla para parar getch exit 1 retorna p DOS com codigo de erro 1 nao erro 0 Transfoma o Linear CoordReal gt Coord Video CoordVideo A CoordReal B Sejam topx e topy os valores maximos das coordenadas reais x e y e sejam botx e boty os valores minimos das coordenadas reais x e y Sejam MAXX e MAXY respectivamente os valores inteiros m ximos das coordenadas de v deo MAXX 639 e MAXY 479 p monitor VGA em modo VGAHI Para a coo
72. LUE 9 LIGHTGREEN 10 LIGHTCYAN 11 LIGHTRED 12 LIGHTMAGENTA 13 YELLOW 14 WHITE 15 BLINK 128 este programa define todas as combinaCOES de cores para textos include lt conio h gt main register int ft fd textmode C80 for ft BLUE ft lt WHITE ft for fd BLACK fd lt LIGHTGRAY fd Documento Tutorial Linguagem C Aplicada Engenharia Page 128 of 162 SytCom Training 2014 All rights reserved textcolor ft textbackground fd delay 70 cprintf Isto um teste cprintf n r textcolor WHITE textbackground BLACK cprintf pronto textmode LASTMODE return 0 Para fazer com que um texto pisque deve se fazer o OR da cor com 128 BLINK textcolor GREEN BLINK 61 Introdu o ao sistema gr fico do Turbo C Acima de Tudo uma Janela Como as funCOES de controle de tela do modo texto todas as funCOES gr ficas operam por meio de uma janela Na terminologia do Turbo C uma janela gr fica chamada de porta de visualiza o mas uma porta de visualiza o tem essencialmente as mesmas caracter sticas das janelas de texto A nica diferen a real entre uma janela e uma porta de visualiza o que o canto superior esquerdo de uma porta de visualiza o a coordenada 0 0 e nao 1 1 como em uma janela Por defini o uma tela inteira uma porta de visualiza o contudo pode se criar portas de visualiza o de outras dimensoes como veremos mais tarde
73. Linguagem C Aplicada a Engenharia Instrutor HEngholmJr Indice J DJINTRODU O EE 5 2 INTRODU O AS FUN ES EM RE 5 3 FORMA GERAL DE UMA FUN O caiaenema cosresinosderbitiastesoasbtadeo Ae dev deseddeivedastertescvaddbects 7 4 INTRODU O AO CONTROLE DE PROGRAMAS EM C L 7 5 BLOCOS DE C DIGO E 8 6 B SICO SOBRE CARACTERES E STRINGS sccssccessceessececsaseecseeceseeecsaeescaaeeecseeesseeecaeescsaeeesseeenaess 8 7 FORMA GERAL DA FUN O PRINTF sccssscssscesscesecesseeseecseeecsescseecaeecssecsaecsaecsaeesseseseseseeesseseseesaes 9 8 VARI VEIS CONSTANTES OPERADORES E Exppnteeore 10 9 MODIFICADORES DE TIPOS SIGNED UNSIGNED LONG SHORT 10 TH DEGLARANDO VARI VEIS 3 cceic lt cohcesnsceditscsudiestsexthitavsetlicasee Kee EES na aa aaa 11 11 CONSTANTES HEXADECIMAIS E OCTAIS sscesscesssesssesseccseccseccseecseecsaecsaecsaecsaecsaescseseseeeseaseaseeaes 12 12 INICIALIZA O DE MNARI VEIS 13 13 OPERADORES ARITM TICOS s nssnssnesiseissineiesinriestastintisintisriarinsrantnsrnntantiarintinsrannstnnrann rnane ne 13 14 INCREMENTO E DECREMENTO ssccssccssecssecesecesesesseeseesssesssescseecseecsaecsaeesaecsaecsaesesesessessetecateeaes 14 15 OPERADORES RELACIONAIS E Loos 15 16 OPERADOR DE ATRIBUI O ivzssshccecdsccdidzssesedacesctestnaseiccsibesidedesscctdaved stesasdededatbesrdazuescatdetiesteaeass 16 17 Oe ne ele RE 16 18 DECLARA ES DE CONTROLE DO PpOGnAMA 17 19 DECLARA O ELS Eriin ee
74. OT d d n i Hi Documento Tutorial Linguagem C Aplicada Engenharia Page 15 of 162 SytCom Training 2014 All rights reserved Observe que todas as express es l gicas e relacionais produzem um resultado O ou 1 Portanto o seguinte programa n o s est correto como produzir o n mero 1 na tela include lt stdio h gt main int x x 100 printf d x gt 10 Imprime os n meros pares entre 1 e 100 include lt stdio h gt main int i for i 1 i lt 100 i 1f 1 1 2 printf d D o operador de resto dar falso zero quando usada c n mero par Esse resultado invertido pelo NOT 16 Operador de Atribui o Em C o operador de atribui o o sinal de igual Ao contr rio de outras linguagens o C permite que o operador de atribui o seja usado em express es relacionais ou l gicas finclude lt stdio h gt main int x y produto printf informe dois n meros scanf d d amp x amp y if produto x y lt 0 express o relacional c operador de atribui o printf Um dos n meros negativo n else caso contr rio da condi o do if printf O produto dos n meros positivos d produto 17 Modeladores Casts tipo express o onde tipo qualquer tipo de dado padr o em C Uso For ar o resultado de uma express o a ser determinado tipo de dado Exemplo Seja x um int e y um fl
75. S struct WORDREGS x struct BYTEREGS h IL BYTEREGS and WORDREGS are definedin lt DOS H gt Structures for storing byte and word registers struct BYTEREGS unsigned char al ah bl bh unsigned char cl ch dl dh struct WORDREGS unsigned int ax bx cx dx unsigned int si di cflag flags IL int86 is defined in lt DOS H gt int int86 int intno union REGS inregs union REGS outregs text_info is defined in lt CONIO H gt Current text window information Used by the gettextinfo function Documento Tutorial Linguagem C Aplicada Engenharia Page 141 of 162 SytCom Training 2014 All rights reserved struct text_info unsigned char winleft left window coordinate unsigned char wintop top window coordinate unsigned char winright right window coordinate unsigned char winbottom bottom window coordinate unsigned char attribute text attribute unsigned char normattr normal attribute unsigned char currmode current video mode BW40 BW80 C40 C80 or C4350 unsigned char screenheight text screen s height unsigned char screenwidth text screen s width unsigned char curx x coordinate in current window unsigned char cury y coordinate in current window 1 65 Ap ndice Ill PROGRAMA DEMONSTRATIVO DE CONTROLE DO MOUSE EM MODO TEXTO Programa simples p identifica o sonora de cones c Mouse IBM Por Eng Fernando C sar C de Castro CREARS 48711 13 12 1993
76. a retornado EOF Voc usa a fun o ferror para determinar o que aconteceu A fun o ferror tem o seguinte prot tipo int ferror FILE fp onde fp um ponteiro v lido para um arquivo ferror retorna verdadeiro se um erro ocorreu durante a ltima opera o com o arquivo e falso caso contr rio Uma vez que cada opera o em arquivo determina uma condi o de erro a fun o ferror deve ser chamada imediatamente ap s cada opera o com o arquivo caso contr rio um erro pode ser perdido O prot tipo de fun o ferror est no arquivo STDIO H A fun o rewind recolocar o localizador de posi o do arquivo no in cio do arquivo especificado como seu argumento O seu prot tipo void rewind FILE fp onde fp um ponteiro de arquivo O prot tipo para a fun o rewind est no arquivo STDIO H Usando fopen getc putc e fcloseQ Grava em disco dados digitados no teclado at teclar include lt stdio h gt include lt stdlib h gt main int argc char argv FILE fp char ch if argc 3 puts Voc se esqueceu de informar o nome do arquivo e o modo exit 1 if fp fopen argv 1 argv 2 NULL experimentar wb wt e testar newline puts O arquivo nao pode ser aberto exit 1 do getche nao funcionaria aqui porque getchar ch getchar pega o caracteres do teclado vai armazenando no buffer at o newline if EOF putc ch fp
77. a da tela borda 1 1 79 25 Cria a primeira janela window 3 2 40 9 borda 3 2 40 9 gotoxy 3 2 printf Primeira janela delay 700 espera 0 7 segundos Cria uma segunda janela window 30 10 60 18 borda 30 10 60 18 gotoxy 3 2 printf Segunda janela delay 700 espera 0 7 segundos gotoxy 5 4 printf Ainda na segunda janela delay 700 espera 0 7 segundos Retorna para a primeira janela window 3 2 40 9 gotoxy 3 3 printf De volta primeira janela delay 700 espera 0 7 segundos Demonstra sobreposi o de janelas window 5 5 50 15 borda 5 5 50 15 gotoxy 2 2 printf Esta janela sobrepoe s duas primeiras getch return O Desenha uma borda em torno de uma janela de texto Documento Tutorial Linguagem C Aplicada Engenharia Page 125 of 162 SytCom Training 2014 All rights reserved void borda int iniciox int inicioy int fimx int fimy register int i gotoxy 1 1 forGi 0 i lt fimx iniciox i putch putch escreve um char p a janela ativa gotoxy 1 fimy inicioy for i 0 i lt fimx iniciox i putch for i 2 i lt fimy inicioy i gotoxy 1 i putch gotoxy fimx iniciox 1 i putch Algumas funCOES de E S em janelas Quando se usa a janela padrao que a tela inteira nao importa se sao usadas as funCOES de E S padrao como printf etc ou a
78. a fun o fopen retorna um ponteiro de arquivo que nao deve ter o valor alterado pelo seu programa Se um erro ocorre quando se est abrindo um arquivo fopen retorna um nulo Como a Tabela abaixo mostra um arquivo pode ser aberto ou em modo texto ou em modo bin rio No modo texto as seqii ncias de retorno de carro e alimenta o de formul rios sao transformadas em segii ncias de novas linhas na entrada Na sa da ocorre o inverso novas linhas sao transformadas em retorno de carro e alimenta o de formul rio Tais transformaCOES nao acontecem em um arquivo bin rio Modo Significado Es Abre um arquivo para leitura w Cria um arqivo para escrita a Acrescenta dados para um arquivo existente rb Abre um arquivo bin rio para leitura wb Cria um arquivo bin rio para escrita ab Acrescenta dados a um arquivo bin rio existente r Abre um arquivo para leitura escrita w Cria um arquivo para leitura escrita a Acrescenta dados ou cria um arquivo para leitura escrita Documento Tutorial Linguagem C Aplicada Engenharia Page 83 of 162 SytCom Training 2014 All rights reserved r b Abre um arquivo bin rio para leitura escrita w b Cria um arquivo bin rio para leitura escrita a b Acrescenta ou cria um arquivo bin rio para leitura escrita rt Abre um arquivo texto para leitura wt Cria um arquivo texto para escrita at Acrescenta dados a um arquivo texto r t Abre um arquivo texto para leitura escr
79. a lista void insere void register int 1 encontra a primeira estrutura livre for i 0 i lt TAMANHO i if info_adr i nome break 1 ser igual a tamanho se a lista estiver cheia ifi TAMANHO printf lista cheia n return Documento Tutorial Linguagem C Aplicada Engenharia Page 102 of 162 SytCom Training 2014 All rights reserved Insere a informa o printf nome gets info adr i nome printf rua gets info adr i rua printf cidade gets info adr i cidade printf estado gets info adr i estado printf cep gets info adr i cep Exibe a lista void exibe void register int t for t 0 t lt TAMANHO t if info_adr t nome printf Nome s n info_adr t nome printf Rua s n info_adr t rua printf Cidade s n info_adr t cidade printf Estado sn info_adr t estado printf CEP s n n info_adr t cep Salva a lista void salva void FILE fp register int 1 if fp fopen listend dat wb NULL printf o arquivo nao pode ser aberto n return for i 0 i lt TAMANHO i if info_adr i nome if fwrite amp info adr i sizeof struct endereco 1 fp 1 printf erro de escrita no arquivo n fclose fp Carrega o arquivo void carrega void FILE fp register int i if fp fopen listend dat rb NULL printf o arquivo nao pode ser aberto n
80. a putw escrever a representa o bin ria de um inteiro para um arquivo em disco Ainda que existam muitas maneiras de codificar esta fun o a que mostrada aqui usa uma vari vel union Primeiro criada uma union compreendida por um inteiro e por uma matriz de caracteres de 2 bytes union pw int 1 char ch 2 b Agora a fun o putw pode ser escrita usando se a union void putw union pw word FILE fp Documento Tutorial Linguagem C Aplicada Engenharia Page 116 of 162 SytCom Training 2014 All rights reserved putc word ch 0 fp escreve 1 metade putc word ch 1 fp escreve 2 metade Ainda que chamada com um inteiro putw pode usar putc para escrever um inteiro para um arquivo em disco apontado por fp O programa a seguir combima unioes com campos bit para exibir o c digo ASCII em bin rio gerado quando se pressiona uma tecla A union permite fun o getche atribuir o valor de uma tecla uma vari vel tipo char enquanto o campo bit usado para exibir os bits individuais exibe os c digos ASCII em bin rio para caracteres um campo bit ser decodificado include lt stdio h gt include lt conio h gt struct byte int a 1 int b 1 int c 1 int d 1 int e 1 1 1 1 H a H int f int g int h H H a E union bits char ch struct byte bit ascii void decode union bits b main do ascii ch getche printf
81. ad dis 44 44 4 46 42 4 48 H 49 1 SH 2 Si 3 53 5 54 6 I 7 56 8 57 9 58 52 6H lt l 63 64 65 A 66 B 67 C 68 D 69 E WF ZG Il MJ AKEk 7 L 7 M 78 oN 7O HP aq 3 5 84 I 85 U 86 U 87 U 88 A 89 Y FH Z HO 93 1 94 95 9 97 a 98 b 99 c 108 d ii e 123 124 125 126 127 a 128 129 138 131 4 133 194 135 136 137 E 138 199 148 i 144 i 143 144 145 146 E 147 148 149 150 151 153 0 154 155 156 157 158 k 159 f 160 lki 163 164 E 165 166 167 2 168 169 r 178 a IH amp 173 i 174 17 1 177 amp 178 179 180 181 d 183 p 184 q 185 d 186 187 q 188 189 198 d 191 q 193 194 q 195 196 197 198 F 199 200 E mr 283 204 205 206 u 287 gt 208 209 218 e 241 213 244 m 215 216 q 217 1 218 q 219 220 a 221 223 B 224 q 225 B 226 1 227 W 238 E 229 co 238 p 2 233 0 294 9 235 6 236 237 s 238 239 n 240 241 243 944 p 245 J 246 247 sg 248 249 250 951 q 253 2 254 255 Gerador da tabela ASCII include lt stdlib h gt main Documento Tutorial Linguagem C Aplicada Engenharia Page 137 of 162 SytCom Training 2014 All rights reserved meet GA ms a De HH re unsigned int i for i 0 i lt 33 1 ifG 26 printf 26 EOF else printf d_ c i i printf getch puts n for i 33 i lt 255 1 printf d_ c i i printf t 64 Ap ndice Il PROGRAMA
82. ada usa se a fun o floodfill void far floodfill intx inty int cor da borda Para usar essa fun o chame a com as coordenadas x y de um ponto dentro da figura e a cor da linha que forma a borda da figura fechada E importante certificar se de que o objeto a ser preenchido est completamente fechado caso contr rio a rea fora da figura ser preenchida tamb m O que preencher o objeto determinado pelo padrao e cor corrente de preenchimento Por defini o a cor de fundo definida por setbkcolor usada Entretanto poss vel mudar o modo como os objetos sao preenchidos usando se a fun o setfillstyle void far setfillstyle int padrao int cor Onde padrao definido pelo t pico constants data types and global variables tem fill pattern em graphics h A Fun o Rectangle A fun o rectangle desenha uma caixa definida pelas coordenadas esquerda acima e direita baixo na cor de desenho corrente void far rectangle int esquerda int acima int dreita int abaixo programa de demonstra o de cor ret ngulos e padroes de preenchimento include lt graphics h gt include lt conio h gt main int driver modo register int i driver VGA modo VGAMED initgraph amp driver amp modo Desenha uma borda na tela setcolor EGA RED rectangle 0 0 639 349 sleep 1 espera 1 segundo desenha diagonal setcolor EGA YELLOW line 0 0 639 349 sleep 1
83. ade Quando o formato de leitura e escrita for de import ncia secund ria deve se dar prefer ncia a fread e fwrite imprime os quadrados de O a 10 no arquivo quad dat no formato n mero quadrado include lt stdio h gt include lt stdlib h gt main Documento Tutorial Linguagem C Aplicada Engenharia Page 93 of 162 SytCom Training 2014 All rights reserved int 1 FILE out if out fopen quad dat wt NULL sempre texto c fscanf e fprintf puts Nao posso abrir arquivo exit 1 for i 0 i lt 10 i1 fprintf out d d n i ut fclose out Deixaremos o exemplo de uso de fscanf para o pr ximo cap tulo Aloca o Din mica Apagando arquivos remove int remove char nome arquivo Retorna zero em caso de successo e nao zero se falhar 49 Aloca o din mica da mem ria Existem tr s funCOES b sicas de gerenciamento din mico da mem ria malloc aloca determinado tamanho de mem ria free libera a mem ria alocada por malloc p ser reutilizada realloc encolhe ou expande o bloco de mem ria alocado por malloc se necess rio move o para caber no espa o dispon vel Prot tipos header em stdlid h void malloc unsigned numbytes malloc retorna um ponteiro void isto ele pode apontar p o que se desejar uma matriz estrutura n mero numbytes normalmente calculado por sizeof Se nao houver mem ria suficiente retorna um p
84. al scanf d amp valor printf d em hexadecimal x valor valor if op o 2 printf informe um valor em hexadecimal scanf x amp valor printf x em decimal d valor valor Documento Tutorial Linguagem C Aplicada Engenharia Page 17 of 162 SytCom Training 2014 All rights reserved if op o 3 printf informe um valor em decimal scanf d amp valor printf d em octal o valor valor if op o 4 printf informe um valor em octal scanf o amp valor printf o em decimal d valor valor 19 Declara o else Um exemplo de if else include lt stdio h gt main int 1 printf informe um n mero scanf d amp i if i lt 0 printf o n mero negativo else printf o n mero positivo ou zero 20 Encadeamento if else if if condi o declara o else if condi o declara o else if condi o declara o else declara o Programa de convers o de base num rica 2 encadeamento if else if decimal gt hexadecimal hexadecimal gt decimal decimal gt octal octal gt decimal include lt stdio h gt main int op o int valor Documento Tutorial Linguagem C Aplicada Engenharia Page 18 of 162 SytCom Training 2014 All rights reserved printf Converter An printf 1 decimal para hexadecimal n printf 2 hexa
85. al em n vel de sistema operacional do arquivo Uma falha no fechamento de um arquivo leva a todo tipo de problemas incluindo se perda de dados arquivos destru dos e a possibilidade de erros intermitentes no seu programa Uma chamada fun o fclose tamb m libera os blocos de controle de arquivo FCB associados ao fluxo e deixa os dispon veis para reutiliza o Como voc provavelmente sabe o sistema operacional limita o n mero de arquivos abertos que voc pode ter em um dado momento de modo que pode ser necess rio fechar alguns arquivos antes de abrir outros Comando FILES no autoexec bat Documento Tutorial Linguagem C Aplicada Engenharia Page 85 of 162 SytCom Training 2014 All rights reserved A fun o fclose declarada como int fclose FILE fp onde fp o ponteiro do arquivo retornado pela chamada fun o fopen Um valor de retorno igual a zero significa uma opera o de fechamento com sucesso qualquer outro valor indica um erro Voc pode usar a fun o padrao ferror discutida a seguir para determinar e reportar quaisquer problemas Geralmente o nico momento em que a fun o fclose falhar quando um disquete tiver sido prematuramente removido do drive ou nao houver mais espa o no disco ferror e rewind A fun o ferror usada para determinar se uma opera o em um arquivo produziu um erro Se um arquivo aberto em modo texto e ocorre um erro na leitura ou na escrit
86. ara algum lugar desconhecido da mem ria Se voc ler o pior que lhe pode acontecer ler informa o inv lida lixo Entretanto se voc escrever para o ponteiro estar escrevendo sobre outros peda os de c digo ou dados Isso pode nao ser mostrado mais tarde na execu o do programa levando o a procurar pelo erro em lugar errado Pode ser pouco ou nao certo sugerir que o ponteiro um problema Esse tipo de erro tem feito com que programadores percam muitas noites de sono Tendo em vista que erros com ponteiros podem se transformar em pesadelos voc deve fazer o m ximo para nunca gerar um Alguns dos erros mais comuns sao discutidos aqui come ando com o exemplo cl ssico de erro com ponteiro o ponteiro nao inicializado Considere o seguinte Este programa est errado Nao o execute main int x p x 10 p X Esse programa atribui o valor 10 a alguma localiza o desconhecida na mem ria Ao ponteiro p nunca foi dado um valor portanto ele cont m um valor lixo Embora o Turbo C emita uma mensagem de aviso neste exemplo o mesmo tipo de problema surge quando um ponteiro est simplesmente apontado para um lugar indevido Por exemplo voc pode acidentalmente atribuir um ponteiro para um endere o errado Esse tipo de problema frequentemente passa despercebido quando o seu programa muito pequeno por causa da probabilidade de p conter um endere o seguro um endere o que nao esteja no seu c digo
87. arg2 im res polar res return res cpxp subt argl arg2 cpx argl arg2 Cpxp res res re argl re arg2 re res im arg1 im arg2 im res polar res return res cpxp mult argl arg2 cpx argl arg2 Cpxp res Documento Tutorial Linguagem C Aplicada Engenharia Page 108 of 162 SytCom Training 2014 All rights reserved res re arg re arg2 re arg1 im arg2 im res im arg1 im arg2 re arg1 re arg2 im a jb c jd ac bd j bc ad res polar res return res cpxp divi argl arg2 cpx argl arg2 cpxp res res re arg re arg2 re arg1 im arg2 im res im arg1 im arg2 re arg1 re arg2 im res re res re arg2 re arg2 re arg2 im arg2 im res im res im arg2 re arg2 re arg2 im arg2 im atjb c jd ac bd j bc ad c42 d 2 res polar res return res cpxp polar arg cpxp arg Cpxp res res mag sqrt arg re arg re arg im arg im res ang 180 M_PI atan2 arg im arg re res re arg re res im arg im return res eines Programa de operaCOES simples c complexos para demonstra o da passagem de estruturas p funCOES com chamada por refer ncia include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt typedef struct z a etiqueta z opcional double re double im cpx
88. argumentos de funC ES Dados do programa vari veis globais e static Obs2 Uma vari vel static uma vari vel local que mantem seu valor entre chamadas de funCOES mas s conhecida dentro da fun o que declarada Obs3 sizeof um operador de tempo de compila o que retorna o tamanho em bytes to tipo de dado ou objeto usado como argumento 41 Argumentos argc argv e env para a Fun o main Algumas vezes muito til passar informaC ES para um programa quando ele executado O m todo geral passar informaC ES para a fun o main por meio do uso de argumentos de linha de comando Um argumento de linha de comando a informa o que segue o nome do programa na linha de comando do sistema operacional Documento Tutorial Linguagem C Aplicada Engenharia Page 70 of 162 SytCom Training 2014 All rights reserved Existem tr s argumentos internos na fun o main Os dois primeiros argc e argv sao usados para receber argumentos da linha de comando O terceiro env usado para acessar os par metros do ambiente do DOS que estao ativos quando o programa come a a execu o Estes sao os nicos argumentos que main pode ter O argumento argc armazena o n mero de argumentos digitados na linha de comando e deve ser declarado como inteiro Ele sempre ser no m nimo o valor um j que o pr prio nome do programa considerado como o primeiro argumento O argumento argv um ponteiro para uma ma
89. atrizes sem determina o de tamanho Se em uma declara o de inicializa o de matriz o tamanho nao especificado o compilador criar uma matriz grande o suficiente para armazenar todos os inicializadores presentes Usando este m todo a tabela de mensagem fica assim Documento Tutorial Linguagem C Aplicada Engenharia Page 40 of 162 SytCom Training 2014 All rights reserved char el informa o invaalida n char e2 sele o fora do limiteln char e3 autoriza o negada n O compilador conta ele pr prio o n mero de elementos e cria as matrizes de tamanho adequado A inicializa o de matrizes sem a especifica o de tamanho nao est restrita somente a matrizes unidimensionais Para matrizes multidimensionais deve se especificar tudo menos a dimensao mais esquerda compiladores mais modernos aceitam especifica o em aberto da dimens o mais direita para permiitr que a linguagem C indexe adequadamente a matriz Dessa maneira poss vel construir tabelas de diferentes tamanhos com o compilador alocando espa o suficiente para elas Por exemplo a declara o da matriz sqrs como uma matriz sem especifica o de tamanho mostrada aqui int sqrs 2 1 1 2 4 3 9 4 16 Dj 25 6 36 7 49 8 64 9 81 1 Vantagem A tabela pode ser aumentada indefinidamente porque o compilador se encarrega de contar as linhas da matriz Documento Tutorial Linguagem C A
90. break case constante2 sequencia de declaracoes break case constante3 sequencia de declaracoes break default sequencia de declaracoes Programa de conversao de base numerica 3 usando se a declaracao switch decimal gt hexadecimal hexadecimal gt decimal decimal gt octal octal gt decimal include lt stdio h gt main int opcao int valor printf Converter n printf 1 decimal para hexadecimal n printf 2 hexadecimal para decimal n printf 3 decimal para octal n printf 4 octal para decimal n printf informe a sua opcao scanf d amp opcao switch opcao case printf informe um valor em decimal scanf d amp valor printf d em hexadecimal x valor valor break case 2 printf informe um valor em hexadecimal Documento Tutorial Linguagem C Aplicada Engenharia Page 20 of 162 SytCom Training 2014 All rights reserved scanf x amp valor printf x em decimal d valor valor break case 3 printf informe um valor em decimal scanf d amp valor printf d em octal 0 valor valor break case 4 printf informe um valor em octal scanf o amp valor printf o em decimal d valor valor break 23 Declaracao default Usada para prever a possibilidade de nunhuma correspondencia ser encon trada switch opcao case 1 printf informe um valor em
91. caso este fato nao in fluencia a performance do programa Ensino da adi o include lt stdio h gt include lt conio h gt main int i j resposta char fim for i 1 i lt 100 amp amp fim N si loop ativo quando i lt 100 e fim N for j 1 j lt 10 j printf quanto d d i j scanf d amp resposta if resposta i j printf errado n else printf certo n printf mais Documento Tutorial Linguagem C Aplicada Engenharia Page 23 of 162 SytCom Training 2014 All rights reserved fim getche printf n Usos nao corriqueiros do loop for Um uso nao usual do la o for include lt stdio h gt main int t for prompt t readnum prompt se t 0 loop for termina sqrnum t O loop for acima funciona porque inicializa o condi o incremento podem consistir de qualquer expressao valida em C prompt printf informe um inteiro readnum int t scanf d amp t return t sqrnum int num printf d n num num Inclusive poss vel deixar faltando partes da defini o do loop O programa abaixo pega a senha do teclado e testa se igual 135 Se for igual condi o torna se falsa e o loop encerra com uma mensagem include lt stdio h gt main int x for x 0 x 135 scanf d amp x printf senha correta Loop infinito for
92. da esquerda colocando se um sinal de menos diretamente depois do Por exemplo 10 2f justificar a esquerda um n mero em ponto flutuante com duas casas decimais em um campo de 10 caracteres Existem dois modificadores dos especificadores de formato que permitem printf exibir inteiros short e long Esses modificadores podem ser aplicados aos especificadores de tipo d i o u x O modificador indica que um dado tipo long ser impresso na tela ld long int Documento Tutorial Linguagem C Aplicada Engenharia Page 77 of 162 SytCom Training 2014 All rights reserved lu unsigned long int O modificador h indica que um dado tipo short int sera impresso na tela hu unsigned short int Yhd short int ho unsigned short int octal O modificador tamb m pode alterar os especificadores e f g para indicar que um double sera impresso lf double em ponto flutuante Lf long double em ponto flutuante LE long double em nota o cient fica c E mai sculo Roda exemplos de especificadores de formato e campo de printf include lt stdio h gt main puts 012345678901234567890 printf 7 2f n 123 234 printf 7 2f n 123 234 printf 5 2f n 123 234 printf 5 2f n 3 324 printf 10s n Al6 printf 10s n A16 printf 5 7s n 123456789 scanf O prot tipo de scanf int scanf char string de de controle lista de argumentos com header em stdio h A string de c
93. decimal para decimal n printf 3 decimal para octal n printf 4 octal para decimal n printf informe a sua op ao scanf d amp op ao if op o 1 printf informe um valor em decimal scanf d amp valor printf d em hexadecimal x valor valor else if op o 2 printf informe um valor em hexadecimal scanf x amp valor printf x em decimal d valor valor else if op o 3 printf informe um valor em decimal scanf d amp valor printf d em octal o valor valor else if op o 4 printf informe um valor em octal scanf o amp valor printf o em decimal d valor valor 21 Validade da Express o Condicional Exemplo Divide o primeiro n mero pelo segundo include lt stdio h gt main int a b printf informe dois n meros scanf d d amp a amp b if b printf f n float a b s executa se b 0 else printf n o posso dividir por zero n N o necess rio explicitamente usar if b 0 printf f n float a b Documento Tutorial Linguagem C Aplicada Engenharia Page 19 of 162 SytCom Training 2014 All rights reserved 22 Declara o switch Difere do if else if por s poder testar igualdades No entanto gera um c digo EXE menor e mais r pido que if else if switch vari vel case constante 1 sequencia de declaracoes
94. e exibem o conte do de uma string em letras min sculas include lt stdio h gt include lt ctype h gt versao matriz main char str 80 int i printf digite uma string em letra mai scula gets str printf aqui esta a string em letra min scula for i 0 str i i printf c tolower str i include lt stdio h gt include lt ctype h gt versao ponteiro main char str 80 p printf digite uma string em letra mai scula gets str printf aqui esta a string em letra min scula p str obt m o endere o de str while p printf c tolower p A versao matriz mais lenta que a versao ponteiro porque mais demorado indexar uma matriz do que usar o operador Algumas vezes programadores iniciantes na linguagem C cometem erros pensando que nunca devem usar a indexa o de matrizes j que ponteiros sao muito mais eficientes Mas nao o caso Se a matriz ser acessada em ordem estritamente ascendente ou descendente ponteiros sao mais r pidos e f ceis de usar Entretanto se a matriz ser acessada randomicamente a indexa o da matriz pode ser uma melhor op o Documento Tutorial Linguagem C Aplicada Engenharia Page 50 of 162 SytCom Training 2014 All rights reserved pois geralmente ser tao r pida quanto a avalia o de uma expressao complexa de ponteiros al m de ser mais f cil de codificar e entender Indexando um Ponteiro Em C
95. e lt stdio h gt include lt stdlib h gt include lt math h gt main FILE fp float f M_PI if fp fopen teste dat wb NULL puts Nao posso abrir arquivo Documento Tutorial Linguagem C Aplicada Engenharia Page 88 of 162 SytCom Training 2014 All rights reserved exit 1 if fwrite amp f sizeof float 1 fp 1 puts Erro escrevendo no arquivo fclose fp return 0 Como o programa anterior ilustra a rea intermedi ria de armazenamento pode ser e frequentemente simplesmente uma vari vel Uma das aplicaCOES mais teis de fread e fwrite o armazenamento e leitura r pidos de matrizes e estruturas estrutura uma entidade l gica a ser vista adiante em disco escreve uma matriz em disco include lt stdio h gt include lt stdlib h gt main FILE fp float exemplo 10 10 int ij if fp fopen exemplo dat wb NULL puts Nao posso abrir arquivo exit 1 for i 0 1 lt 10 1 forG 0 j lt 10 j exemplo i j float i j lei de forma o dos elementos da matriz o c digo a seguir grava a matriz inteira em um nico passo if fwrite exemplo sizeof exemplo 1 fp 1 puts Erro ao escrever arquivo exit 1 fclose fp return 0 1 uma matriz em disco include lt stdio h gt include lt stdlib h gt main FILE fp Documento Tutorial Linguagem C Aplicada Engenharia Page 89 of 16
96. egraph 62 Criando Portas de Visualiza o poss vel criar portas de visualiza o em modo gr fico de maneira similar forma como se cria janelas no modo texto Como afirmado anteriormente todas as sa das gr ficas sao relativas s coordenadas da porta de visualiza o ativa Isto significa que as coordenadas do canto superior esquerdo da porta sao 0 0 nao interessando onde a porta de visualiza o esteja A fun o usada para criar uma porta de visualiza o gr fica chama se setviewport void far setviewport int esquerda int acima int direita int abaixo int clipflag Para us la especifica se as coordenadas do canto superior esquerdo e do canto inferior direito da porta Se o par metro clipflag diferente de zero ser realizado um truncamento autom tico da sa da que pode exceder os limites da porta de visualiza o Isto evita consumo in til da mem ria de v deo Com clipping desabilitado poss vel a sa da ir al m da porta de visualiza o Pode se encontrar as dimensoes da porta de visualiza o corrente usando se a fun o getviewsetings void far getviewsettings struct viewporttype far info A estrutura viewporttype definida em graphics h como mostrado aqui struct viewporttype int left top right bottom int clipflag Os campos left top right e bottom armazenam as coordenadas do canto superior esquerdo e canto superior direito da porta de visualiza o Quando o clipflag
97. el ponteiro O tipo base do ponteiro define qual tipo de vari veis o ponteiro pode apontar Por exemplo estas declaraC ES criam um ponteiro caractere e dois ponteiros inteiros char p int temp in cio Os Operadores de Ponteiros Existem dois operadores especiais de ponteiro o amp e o O amp um operador un rio que retorna o endere o de mem ria do seu operando Um operador un rio requer somente um operando Por exemplo count addr amp count coloca em count addr o endere o de mem ria da vari vel count Esse endere o a localiza o interna da vari vel no computador Ele nao faz nada com o valor de count A opera o do operador amp pode ser lembrada como o retorno de endere o da vari vel que a ele sucede Portanto a atribui o dada pode ser determinada como a vari vel count addr recebe o endere o de vari vel count Para entender melhor essa atribui o assuma que a vari vel count esteja localizada no endere o 2000 Entao apos a atribui o count addr ter o valor de 2000 O segundo operador o e o complemento do operador amp Ele um operador un rio que retorna o valor da vari vel localizada no endere o que o segue Por exemplo se count addr cont m o endere o de mem ria da vari vel count entao val count addr colocar o valor de count em val Se count originalmente tem o valor 100 entao val ter o valor de 100 porque este o valor armazenado na l
98. ela Uma das funCOES mais comuns de manipula o de tela a que limpa a janela ativa e somente a janela ativa void clrscr void Posicionando o cursor Para posicionar o cursor na janela ativa usa se Documento Tutorial Linguagem C Aplicada Engenharia Page 121 of 162 SytCom Training 2014 All rights reserved void gotoxy int x int y Aqui xe y especificam as coordenadas em rela o janela ativa para onde o cursor posicionado Se ambas as coordenadas estao fora do limite nenhuma a o realizada contudo isso nao considerado um erro Exemplo Demonstra o das funCOES clrscr e gotoxy include lt conio h gt include lt stdio h gt include lt string h gt char mensagem FunC ES de Tela Modo Texto Sao Um T dio main register int x y char p clrscr p mensagem for x 1 x lt strlen mensagem x for y 1 y lt 12 y gotoxy x y delay 50 espera 0 05 segundos printf c p imprime de cima para baixo gotoxy x 25 y printf c p imprime de baixo para cima p getche gotoxy 1 25 return 0 Apagando at o fim da linha A fun o clreol limpa da esquerda para a direita uma linha a partir da posi o corrente do cursor at o final da janela E til quando se requisita informa o do usu rio void clreol void Pode se combinar esta fun o com gotoxy para exibir uma mensagem de av
99. ela uma rea retangular que o seu programa usa para enviar mensagens para o usu rio Ela pode ser tao grande quanto a tela inteira ou tao pequena quanto uns poucos carcateres Em programas sofisticados nao incomum a tela ter muitas janelas ao mesmo tempo uma para cada tarefa ealizada pelo programa O Turbo C permite definir a localiza o e as dimensoes de uma janela Depois de se definir uma janela as rotinas que manipulam texto afetam somente a janela definida e nao a tela inteira Por exemplo a fun o clrscr apaga a janela ativa nao a tela inteira a menos obviamente que como por defini o a janela ativa seja a tela inteira Adiconalmente todas as coordenadas de posi o sao relativas janela ativa em vez de tela Um dos aspectos mais importantes desse assunto que o Turbo C automaticamente previne as sa das de irem al m dos limites de uma janela Se alguma sa da ultrapassar um limite somente a parte que couber ser exibida o resto iniciado na pr xima linha Para janelas de texto as coordenadas do canto superior esquerdo sao 1 1 As funCOES de tela modo texto que usam coordenadas aplicam nas relativas janela ativa nao tela Assim se existem duas janelas o canto superior esquerdo de ambas considerado a localiza o 1 1 quando alguma est ativa Para o momento nao nos preocuparemos com a cria o de qualquer janela simplesmente usaremos a janela padrao a tela inteira Limpando a jan
100. eltay get mouse motion if right button pressed outside icon if rightb pressed0 amp amp x gt ICONRIGHTIy gt ICONDOWN tcursor off cleardevice cursor on goto Licon if right button pressed with cursor inside icon if rightb pressed amp amp x lt ICONRIGHT amp amp y lt ICONDOWN ncolor if color ncolor gt EGA_WHITE ncolor 0 Licon setcolor EGA BLACK cursor off outtextxy 2 2 clean icon area with ascii 219 if color ncolor EGA BLACKlIlcolor ncolorJ EGA DARKGRAY setcolor EGA WHITE else setcolor color ncolor avoid darkgray and black on icon outtextxy 2 2 idcolor ncolor writes idcolor on icon Documento Tutorial Linguagem C Aplicada Engenharia Page 148 of 162 SytCom Training 2014 All rights reserved setlinestyleSOLID_LINE 0 NORM_WIDTH rectangle 0 0 ICONRIGHT ICONDOWN draw icon rectangle setlinestyle SOLID LINE 0 THICK WIDTH cursor on setcolor color ncolor set new color delay 200 wait 0 2 seconds draws if left button is pressed if leftb_pressed amp amp deltaxlldeltay cursor_off linerel x xa y ya cursor_on xa x ya y while leftb pressed amp amp rightb_pressed looping up till both buttons pressed together cleardevice closegraph cursor off return O PRE eh ag A de de de de de de de de de de e eo eo e e eo kk kkk k de oe de kkk mouse i
101. em vez do goto seremos for ados a usar uma s rie de testes adicionais j que o break s sai do loop mais interno stop 0 stop a vari vel de controle da sa da da situa o detetada pelo if for for while if se ocorre determinada situa o stop 1 stop 1 break if stop break if stop break printf erro no programa n 30 Matrizes e Strings Matrizes Unidimensionais A forma geral de uma matriz de simples dimensao tipo var_nome tamanho tipo declara o tipo base da matriz tipo base determina o tipo de dado de cada elemento que compreende a matriz tamanho define quantos elementos a matriz armazenara int exemplo 10 Na linguagem C todas as matrizes tem o zero como indice do seu primeiro elemento Portanto a linha anterior declara uma matriz que possui 10 elementos tipo inteiro de exemplo 0 a exemplo 9 O programa seguinte carrega uma matriz de inteiros com os numeros de 0 a 9 main int x 10 esta declara o reserva 10 elementos inteiros Documento Tutorial Linguagem C Aplicada Engenharia Page 32 of 162 SytCom Training 2014 All rights reserved int t for t 0 t lt 10 t x t t Para uma matriz unidimensional o tamanho total da matriz em bytes computado como mostrado aqui Bytes total tamanho do tipo base numero de elementos Encontra a m dia de dez numeros include lt std
102. empor ria e c digo extra precisariam ser usados encontra substr char sub char str register int t char p p2 for t 0 str t t p amp str t pega o ponto de in cio de str p2 sub while p2 amp amp p2 p enquanto nao for final de sub e for p verificado igualdade entre os caracteres p2 de sub e str avan a if p2 return t se est no final de sub entao a correspond ncia foi encontrada return 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 61 of 162 SytCom Training 2014 All rights reserved Se essa fun o chamada com a substring contendo dos e a string principal contendo Ol a todos a fun o retornar o valor 8 Todas as funC ES exceto aquelas declaradas para serem do tipo void retornam um valor Esse valor explicitamente especificado pela declara o return ou desconhecido se nenhuma declara o return especificada Isso significa que uma fun o pode ser usada como um operando em qualquer expressao v lida em C Portanto cada uma das seguintes expressoes sao v lidas em C x abs y if max x y gt 100 printf excelente for ch getchar isdigit ch Entretanto uma fun o nao pode ser alvo de uma atribui o Uma declara o como swap x y 100 declara o incorreta errada O turbo C sinalizar com um erro e nao compilar um programa que contenha tal declara o
103. encontrada A fun o verifica mostrada aqui Esta fun o retorna a localiza o de uma correspond ncia entre a string apontada pelo par metro s e a matriz trans verifica char s int i for i 0 trans i i if stremp trans i s break if trans i return i else return 1 Voc chama verifica com um ponteiro para a palavra em ingl s e a fun o retorna o seu indice se ela estiver na tabela e 1 se nao for encontrada A fun o pega palavra mostrada a seguir Da maneira como a fun o foi concebida as palavras sao delimitadas somente por espa os ou por terminador nulo Esta fun o ler a pr xima palavra da matriz entrada Cada palavra considerada como sendo separada por um espa o ou pelo terminador nulo Nenhuma outra pontua o permita A palavra retornada sr uma string de tamanho nulo quando o final da string entrada encontrado pega palavra char q recarrega o endere o da palavra toda vez que a fun o chamada q palavra pega a pr xima palavra while p amp amp p q p ptt q Up p q 0 termina cada palavra com um terminador nulo Assim que retorna da fun o pega palavra a vari vel global conter ou a pr xima palavra em ingl s na senten a ou um nulo Documento Tutorial Linguagem C Aplicada Engenharia Page 55 of 162 SytCom Training 2014 All rights reserved O programa completo
104. ere o do primeiro elemento da matriz em str Na linguagem C um nome de matriz sem um ndice o endere o para o come o da matriz em geral um ponteiro cont m o endere o do in cio de uma rea de armazenamento ou transfer ncia de dados O mesmo resultado um ponteiro para o primeiro elemento da matriz str pode ser gerado com a declara o abaixo pl amp str 0 Entretanto ela considerada uma forma pobre por muitos programadores em C Se voc deseja acessar o quinto elemento em str pode escrever Documento Tutorial Linguagem C Aplicada Engenharia Page 49 of 162 SytCom Training 2014 All rights reserved str 4 ou pl 4 As duas declaraC ES retornarao o quinto elemento LEMBRE SE Matrizes come am em ndice zero entao um 4 usado para indexar str Voc tamb m pode adicionar 4 ao ponteiro pl para obter o quinto elemento uma vez que pl aponta atualmente para o primeiro elemento de str A linguagem C permite essencialmente dois m todos para acessar os elementos de uma matriz Isso importante porque a aritm tica de ponteiros pode ser mais r pida do que a indexa o de matriz Uma vez que a velocidade frequentemente importante em programa o o uso de ponteiros para acessar elementos da matriz muito comum em programas em C Para ver um exemplo de como ponteiros podem ser usados no lugar de indexa o de matriz considere estes dois programas um com indexa o de matriz e um com ponteiros qu
105. es quando um ponteiro caractere incrementado seu valor incrementado de um entretanto quando um ponteiro inteiro incrementado seu valor incrementado de dois bytes Um ponteiro float seria increnentado de 4 bytes Exemplo Documento Tutorial Linguagem C Aplicada Engenharia Page 48 of 162 SytCom Training 2014 All rights reserved char chptr int iptr float flptr chptr 0x3000 iptr 0x6000 flptr 0x9000 chptr ch 0x3001 iptr 1 0x6002 flptr flptr 0x9004 Por m voc nao est limitado a somente incrementar e decrementar Pode se adicionar ou subtrair inteiros para ou de ponteiros A expressao pl p1 9 far pl apontar para o nono elemento do tipo base de pl considerando se que ele est apontando para o primeiro Exemplo double p1 p1 0x1000 pl 4096 pl p1 9 pl 0x1048 4096 9 8 Compara o com Ponteiros E poss vel comparar dois ponteiros em uma expressao relacional Por exemplo dados dois ponteiros p e q a seguinte declara o perfeitamente v lida if p lt q printf p aponta para um endere o de mem ria mais baixo que q n Geralmente comparaC ES entre ponteiros devem ser usadas somente quando dois ou mais ponteiros estao apontando para um objeto em comum 36 Ponteiros e Matrizes H uma rela o entre ponteiros e matrizes Considere este fragmento de c digo char str 80 p1 pl str Aqui pl foi associado ao end
106. esquisa na string apontada por str uma ocorr ncia do caractere em ch Se o caractere encontrado um ponteiro para ele retornado Por defini o um valor verdadeiro Contudo se nenhuma correspond ncia for encontrada um nulo retornado que por defini o falso Essa fun o usada neste programa para ver se o usu rio informa uma op o v lida A fun o insere solicita ao usu rio informar os dados e entao coloca a informa o passada na primeira estrutura livre Se a matriz estiver cheia a mensagem lista cheia impressa na tela Insere nomes na lista void insere void register int i encontra a primeira estrutura livre for 1 0 i lt TAMANHO i if info_adr i nome break i sera igual a tamanho se a lista estiver cheia ifG TAMANHO printf lista cheia n return Insere a informa o printf nome gets info adr i nome Documento Tutorial Linguagem C Aplicada Engenharia Page 99 of 162 SytCom Training 2014 All rights reserved printf rua gets info adr i rua printf cidade gets info_adr i cidade printf estado gets info adr i estado printf cep gets info_adr i cep As rotinas salva e carrega mostradas aqui sao usadas para salvar e carregar o banco de dados da lista de endere os Note a pouca quantidade de c digo em cada rotina por causa do poder das funC ES fread e fwrite Salva a lista
107. essa aquela matriz saber que chegou ao fim quando um valor nulo encontrado Esse tipo de abordagem ilustrado pelo la o for mostrado aqui Observe um nome assumindo o ltimo elemento de p como um nulo for t 0 p t t if stremp p t nome break O la o ser executado at que seja encontrada uma correspond ncia ou um ponteiro nulo Uma vez que o fim da matriz est marcado com um nulo a condi o que controla o la o falhar quando ele for encontrado E uma pr tica muito comum em programas profissionais escritos na linguagem C inicializar strings Vimos dois exemplos anteriores neste cap tulo na se o de matrizes de ponteiros Outra varia o desse tema o seguinte tipo de declara o de string char p Al mundo n Esse tipo de declara o coloca o endere o da string Al mundo no ponteiro p Por exemplo o seguinte programa perfeitamente v lido include lt stdio h gt include lt string h gt char p Al mundo main register int i imprime a string normal e inversa printf p for t strlen p 1 t gt 1 t printf c p t Documento Tutorial Linguagem C Aplicada Engenharia Page 58 of 162 SytCom Training 2014 All rights reserved Problemas com Ponteiros Um problema com um ponteiro dificil de ser encontrado O ponteiro por si s6 nao um problema o problema que cada vez que for realizada uma opera o usando o pode se estar lendo ou escrevendo p
108. eturn 1 O submarino ganhou a batalha else matriz compX compY S return O Ele nao acertou O coura ado recebe o seu pr ximo movimento do jogador A fun o requisita ao usu rio as novas coordenadas e entao verifica se o submarino foi encontrado ou nao Em caso positivo o jogador vence e a fun o retorna verdadeiro Caso contr rio a fun o retorna falso A fun o tent jog mostrada aqui tent jog pega o pr ximo movimento do jogador matriz jogX jogY apaga ltima posi o do coura ado do printf Informe as novas coordenadas X Y scanf d d amp jogX amp jogyY while GogX lt OlljogX gt 2 ljog Y lt OlljogY gt 2 testa validade das coords if matriz jjogX jog Y S return 1 O coura ado ganhou a batalha else matriz jogX jog Y RI return O Ele nao acertou Ap s cada s rie de movimentos o tabuleiro do jogo exibido pela fun o exibe_tabuleiro Uma c lula nao usada fica vazia A c lula que guarda a ltima posi o do submarino conter um S e a c lula que guarda a posi o do coura ado um B exibe tabuleiro Exibe tabuleiro do jogo printf n printf c c c n matriz 0 0 matriz 0 1 matriz 0 2 printf l I n printf c c c n matriz 1 0 matriz 1 1 matriz 1 2 printf l I n printf c c c n matriz 2 0 matriz 2 1 matriz 2 2 O programa inteiro mos
109. f f f cg 0 cg 1 cg 2 float med V struct coord V int 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 151 of 162 SytCom Training 2014 All rights reserved float cg cg float malloc 3 sizeof float if cg puts memoria insuficiente exit 1 cg 0 cg 1 cg 2 0 for i 0 i lt 10 1 cg 0 cg 0 V i x V um ponteiro para uma MATRIZ DE ESTRUTURAS e nao cg 1 cg 1 V i y para uma VARIAVEL DE ESTRUTURA cg 2 cg 2 V i z cg 0 cg 0 10 cg 1 cg 1 10 cg 2 cg 2 10 return cg Calcula Centro Geometrico Versao 2 include lt stdio h gt struct coord float x 10 float y 10 float z 10 j float med void main int i teste FILE fp struct coord vert float cg fp fopen vertices dat rt if fp puts nao posso abrir arquivo exit 1 for i 0 i1 lt 10 1 teste fscanf fp f f f amp vert x i amp vert y i amp vert z i if teste 1 puts achei EOF exit 1 cg med amp vert vert uma VARIA VEL DE ESTRUTURA com matrizes como membros e nao uma MATRIZ DE ESTRUTURAS printf f f f cg 0 cg 1 cg 2 float med V struct coord V int 1 float cg Documento Tutorial Linguagem C Aplicada Engenharia Page 152 of 162 SytCom Training 2014 All rights reserved cg float malloc 3 sizeof float if cg puts memoria insuficiente exit 1 cg 0 c
110. fun o programa demonstra o chamada de funC ES c matrizes imprime n meros O a 9 include lt stdio h gt void display main void int t 10 1 for 1 0 1 lt 10 1 t i i display t void display int num 10 int 1 forG 0 i lt 10 i printf d num i Ainda que o argumento num seja declarado uma matriz de 10 elementos o compilador o converter automaticamente em um ponteiro tipo int Isto necess rio porque nenhum argumento a ser passado para uma fun o pode ser uma matriz com todos os seus elementos quando uma fun o chamada em main todas as vari veis locais de main sao empurradas para a pilha em seguida sao empurrados os argumentos da fun o chamada e por ltimo o endere o de retorno para main Entao o programa continua a execu o na fun o chamada Como a pilha tem tamanho limitado bvia a necessidade deste artif cio Uma vez que somente um ponteiro para a matriz ser passado para a fun o um argumento ponteiro deve estar declarado na fun o para receber os argumentos enviados da main atrav s da pilha A segunda maneira de declarar um par metro para uma matriz especificando o como uma matriz sem tamanho como mostrado aqui void imprime int num int 1 forGi 0 i lt 10 i printf d num i Aqui num declarado como uma matriz de inteiros de tamanho desconhecido Uma vez que a linguagem C nao prov checagem de limites em
111. g 1 cg 2 0 for 1i 0 i lt 10 1 cg 0 cg 0 V gt x i V um PONTEIRO PARA UMA VARIAVEL DE ESTRUTURA cg 1 cg 1 V gt yl i e x um membro da VARIAVEL DE ESTRUTURA apontada cg 2 cg 2 V gt z i por V o qual uma MATRIZ cgl0 cg 0 10 cg 1 cg 1 10 ceg 2 cg 2 10 return cg O arquivo VERTICES DAT deve conter as coordenadas dos v rtices do poliedro no caso 10 v rtices no formato num rico de 3 colunas cada uma representando respectivamente x y e z Por exemplo OAANNDMNHPWNK CO COmMOrFNWHUNADA CO ra A Ga E on Ch AJ wo 68 Ap ndice VI PROGRAMA DEMONSTRATIVO DO USO DE PONTEIROS FAR PARa escrita direta na memoria de video include lt dos h gt include lt stdio h gt include lt graphics h gt int main void int gd gm i unsigned int far screen detectgraph amp gd amp gm if gd HERCMONO screen unsigned int MK FP 0xB000 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 153 of 162 SytCom Training 2014 All rights reserved E else screen unsigned int MK_FP 0xB800 0 for i 0 i lt 26 i screen i 0x0700 a i return 0 69 Ap ndice Vli PROGRAMA DEMONSTRATIVO DO USO DE ALOCA O DIN MICA DE MEMORIA PARA OPERACOES SIMPLES COM MATRIZES BIDIMENSIONAIS Programa demonstra operacoes de soma multiplicao e I O de matrizes Utilizando t cnicas de aloca o dinamica de memoria include
112. ge Eeer gegen 18 20 ENGADEAMENTOIE ELSE IE 18 21 VALIDADE DA EXPRESS O CONDICIONAL c cccscccssecssecssecssecssecsaecssecsseeeseeeseesceescseecseeesaeesaeesaees 19 22 DECLARA O SWITCH EE 20 23 DECEARACAO BEER aere EES 21 24 LOOP FOR EE 22 25 INTERRUP O DO LOOP FOR ssssccccecessesssaeceseeececsesseaecececceesseseuaeceseescecsusaaaeeeseeseecsesnsaeeeseeseeenes 25 26 LO PINFINITO COM WHILE s2guazascsgaisas ege egeg Egger 26 Documento Tutorial Linguagem C Aplicada Engenharia Page 2 of 162 SytCom Training 2014 All rights reserved E 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 LOOPS ANINHADOS ies Ah eeben EE geed 28 DECLARAGAO CONTINUE 30 LABELS E GOTO E 31 MATRIZES E STANGS ainsin a a e a a aa 32 MATRIZES BIDIMENSIONAIS cscccccssecssecesesecssecseesecsaesaeesecsacsaessecssesaesseseaecsascsecsecsaccaeesecaeeasens 38 MATRIZES MULTIDIMENSIONAIS sssississssisintistesietariotarintistetasiatistarinratiotasratinisanrnninrannnranne nnna 39 INICIALIZA O DE MATRIZES SEM ESPECIFICA O DE TAMANHO 40 Um JOGO DE CA A AO SUBMARINO ssnnssssnnssesinstisiisrintissinriesiarinstanrnntisantisrinrnnsrantnstnnann nne 42 PONTEIROS ee EES 45 PONTEIROS E MATRIZES csccssccscesccssecssesecssecseesecuacsaessesssessssssessecsacsaessesuaecsasesecsecsaccaeeneesasea
113. gt main int x int pl p2 x 101 pl amp x p2 pl printf Na localiza o p p2 imprime o valor hexadecimal do endere o dex e nao o valor de x printf est o valor d n p2 agora imprime o valor de x O endere o em hexadecimal de x exibido usando se outro dos c digos de formata o da fun o printf O p especifica que um endere o de ponteiro para ser exibido usando se a nota o hexadecimal Aritm tica com Ponteiros Somente duas operaC ES aritm ticas podem ser usadas com ponteiros adi o e subtra o Para entender o que ocorre na aritm tica com ponteiros consideremos que pl seja um ponteiro para um inteiro com o valor atual 2000 Depois da expressao pl o conte do de pl ser 2002 nao 2001 Cada vez que incrementado pl apontar para o pr ximo inteiro O mesmo v lido para decrementos Por exemplo pl far com que a vari vel pl tenha o valor 1998 assumindo se que ela tinha anteriormente o valor 2000 Cada vez que incrementado um ponteiro apontar para a pr xima localiza o de mem ria do seu tipo base Cada vez que decrementado apontar para a localiza o do elemento anterior No caso de ponteiros para caracteres parecer ser uma aritm tica normal Por m todos os outros ponteiros incrementarao ou decrementarao pelo tamanho do tipo dado para o qual apontam Por exemplo assumindo se caracteres de 1 byte e inteiros de 2 byt
114. ho 1 caracteres tenham sido lidos Se um newline lido ele far parte da string diferente de gets A string resultante termina com um nulo Header stdio h fread e fwrite L em e escrevem blocos de dados em fluxos Prot tipos unsigned fread void buffer int num bytes int count FILE fp unsigned fwrite void buffer int num bytes int count FILE fp Header stdio h No caso de fread buffer um ponteiro para uma rea da mem ria que receber os dados lidos do arquivo No caso de fwrite buffer um ponteiro para uma rea da mem ria onde se encontram os dados a serem escritos no arquivo Buffer usualmente aponta para uma matriz ou estrutura a ser visto adiante O n mero de bytes a ser lido ou escrito especificado por num bytes O argumento count determina quantos tens cada um tendo num bytes de tamanho serao lidos ou escritos O argumento fp um ponteiro para um arquivo de um fluxo previamente aberto por fopen A fun o fread retorna o n mero de tens lidos que pode ser menor que count caso o final de arquivo EOF seja encontrado ou ocorra um erro A fun o fwrite retorna o n mero de tens escritos que ser igual a count exceto na ocorr ncia de um erro de escrita Quando o arquivo for aberto para dados bin rios fread e fwrite podem ler e escrever qualquer tipo de informa o O programa a seguir escreve um float em um arquivo de disco chamado teste dat includ
115. info adr binfo cinfo como sendo deste tipo Se voc necessita somente de uma vari vel de um determinado tipo a etiqueta nao necess ria struct char nome 30 char rua 40 char cidade 20 char estado 3 unsigned long int cep info_adr declara uma vari vel chamada info adr como definida pela estrutura que a precedeu A forma geral de uma declara o de estrutura struct nome do tipo da estrutura Documento Tutorial Linguagem C Aplicada Engenharia Page 96 of 162 SytCom Training 2014 All rights reserved tipo nome_de_elemento_1 tipo nome_de_elemento_2 tipo nome_de_elemento_3 tipo nome_de_elemento_N kvari veis estrutrura onde o nome do tipo da estrutura etiqueta ou as vari veis da estrutura pode ser omitido mas nao os dois Referenciando os membros da estrutura operador ponto nome da vari vel estrutura nome do elemento Exemplo info adr cep 91720260 atribui printf lu info adr cep imprime cep na tela printf s info adr nome imprime nome for t 0 info_adr nome t t putchar info_adr nome t dem caracter por caractere 51 Matrizes de estruturas struct endereco info_adr 100 cria 100 conjuntos de vari veis que sao organizadas como definido na estrutura endereco printf lu info_adr 2 cep imprime na tela o cep da estrutura 3 da matriz de 100 estruturas Matrizes de estruturas sao muito comuns
116. ining 2014 All rights reserved 57 FunCOES de controle da tela O controle da tela do Turbo C dividido em duas partes modo texto e modo gr fico As funC ES de modo texto gerenciam a apar ncia da tela quando a placa de v deo est selecionada para um modo de texto e as funC ES gr ficas usam a tela quando a placa de v deo est selecionada para um modo de exibi o gr fica Ambos os modos sao selecion veis via software por comandos espec ficos que veremos adiante 58 As FunC ES B sicas de Modo Texto Antes de explorar algumas das mais importantes funC ES de controle e manipula o de tela no modo texto h alguns pontos a considerar Primeiro todas as funCOES de modo texto no Turbo C requerem a presen a do arquivo cabe alho conio h em qualquer programa que as use Segundo as funCOES de modo texto consideram que a tela est em um modo texto nao gr fico J que esse modo o padrao quando da inicializa o boot do PC isto nao deve ser problema Brevemente aprenderemos a fixar os diversos modos de v deo Janelas de Texto Muitas das rotinas do modo texto do Turbo C operam em uma janela nao na tela Felizmente a janela padrao a tela inteira de modo que nao necess rio se preocupar com a cria o de qualquer janela especial para usar as rotinas de modo texto e gr fico Entretanto importante entender os conceitos b sicos das janelas a fim de se obter o m ximo das funC ES de tela do Turbo C Uma jan
117. io h gt main int exemplo 10 i media printf nInforme os n meros X i a medida que forem solicitados n n for i 0 i lt 10 i printf X d i scanf d amp exemplo i media 0 agora soma os numeros for G 0 i lt 10 i media media exemplo i printf A media f n float media 10 Sem verifica o de limites programa incorreto Nao execute o main int quebra 10 1 for G 0 i lt 100 i quebra i i excede o indice de quebra 10 Matrizes Unidimensionais Sao Listas char str 7 main int i for i 0 1 lt 7 i str i A i a vari vel str ficar semelhante ao que segue str 0 str 1 str 2 str 3 str 4 str 5 str 6 A B C D E F G Strings Uma string definida como sendo constituida de uma matriz de caracteres tipo de dado char 1 byte que terminada por um nulo Um nulo especificado usando se MI que zero Documento Tutorial Linguagem C Aplicada Engenharia Page 33 of 162 SytCom Training 2014 All rights reserved Por exemplo se quisermos declarar uma matriz str que possa armazenar uma string de 10 caracteres escrevemos char str 11 Uma constante string uma lista de caracteres entremeados por aspas Por exemplo Alo este um teste Nao necessario adicionar manualmente o nulo no final das constantes string o compilador faz isso automaticamente Lendo uma string do teclado
118. ireita Modificadores Um inteiro colocado entre o sinal e o caracterizador de formato atua como um especificador de largura m nima do campo Este especificador preenche a sa da com brancos ou zeros para assegurar que o campo esteja com pelo menos um certo comprimento m nimo Se a string ou n mero maior que o m nimo ser impressa por completo mesmo se o m nimo for ultrapassado O preenchimento padrao feito com espa os Se houver inten o de preencher com zeros colocar um O antes do especificador de comprimento do campo Por exemplo 05d preenche um n mero de menos de cinco d gitos com zeros de modo que o tamanho total seja cinco Para especificar o n mero de casas decimais impressas por um n mero em ponto flutuante coloca se um ponto decimal depois do especificador de tamanho de campo seguido pelo n mero de casas decimais que se deseja mostrar Por exemplo 10 4f exibe um n mero de no m nimo dez caracteres de comprimento com quatro casas decimais Quando isto aplicado a strings ou inteiros o n mero seguinte ao ponto especifica o comprimento m ximo do campo Por exemplo 5 7s exibe uma string de no m nimo cinco caracteres e no m ximo sete Se a string a ser impressa exceder sete caracteres ser truncada Por defini o toda sa da justificada direita se a largura de campo maior que o dado impresso o dado ser colocado na extremidade direita do campo Pode se for ar a informa o a ser justifica
119. iso nas coordenadas especificadas ap s ter limpado a linha E til para manter a tela livre de mensagens perdidas include lt conio h gt include lt stdio h gt void aviso main clrscr aviso isto um aviso 1 10 getch Documento Tutorial Linguagem C Aplicada Engenharia Page 122 of 162 SytCom Training 2014 All rights reserved aviso isto tamb m 1 10 getch return O void aviso char s int x int y gotoxy x y clreol printf s Apagando e Inserindo Linhas Quando se tem a tela cheia de texto e se quer remover nao simplesmente apagar uma ou mais linhas reposicionando as linhas de texto abaixo da removida scroll ou quando se quer criar uma linha em branco onde se quer inserir um texto usa se delline e insline void delline void void insline void Exemplo include lt conio h gt include lt stdio h gt main int x y clrscr Preenche a tela inteira com algumas linhas for y 1 y lt 25 y for x 1 x lt 80 x gotoxy x y printf c y 1 A getch apaga todas as linhas de dois em dois a partir dos B s e rola a tela para cima for y 2 y lt 26 y 2 gotoxy 1 y delline return O Documento Tutorial Linguagem C Aplicada Engenharia Page 123 of 162 SytCom Training 2014 All rights reserved Varia o do programa anterior include lt conio h gt include lt stdio h g
120. isto nenhum de caracteres de espa o em branco at o primeiro caractere que nao seja um espa o em branco Por exemplo d d faz com que scanf leia um inteiro entao leia e descarte uma v rgula e finalmente leia um outro inteiro Se o caractere especificado nao encontrado scanf termina prematuramente e nao l o segundo inteiro O programa a seguir usa o fato de que scanf retorna o n mero de argumentos lidos com sucesso para demonstrar o efeito dos caracteres de espa o nao branco na entrada de dados testa caracteres de espa o nao branco em scanf Digitar dois inteiros separados por e depois separados por qualquer outro cacarctere include lt stdio h gt main int 1 j c printf Digite dois n meros inteiros separados por c scanf d d amp i amp j c recebe o n mero de argumentos lidos por scanf Documento Tutorial Linguagem C Aplicada Engenharia Page 79 of 162 SytCom Training 2014 All rights reserved if c 2 printf Voc digitou d e d n i j else printf Insucesso Lido somente d campo por scanf c Um colocado depois do e antes do c digo de formato ler um dado de um tipo especificado mas suprimir sua atribui o Assim scanf d c d amp x amp y dando se a entrada 10 20 colocar o valor 10 em x descartando o caractere e dar a y o valor 20 Os comandos de formato podem especificar um campo modificador de comprimento m
121. ita w t Cria um arquivo texto para leitura escrita a t Acrescenta dados ou cria um arquivo texto para leitura escrita Se voc deseja abrir um arquivo para escrita com o nome test voc deve escrever FILE ofp ofp fopen test w Entretanto voc vera freqiientemente escrito assim FILE out if out fopen test w NULL puts nao posso abrir o arquivo n exit 1 A macro NULL definida em STDIO H Esse m todo detecta qualquer erro na abertura do arquivo como um arquivo protegido contra escrita ou disco cheio antes de tentar escrever nele Um nulo usado porque no ponteiro do arquivo nunca haver aquele valor Tamb m introduzido por esse fragmento est outra fun o de biblioteca exit Uma chamada fun o exit faz com que haja uma termina o imediata do programa nao importando de onde a fun o exit chamada Ela tem este prot tipo encontrado em STDLIB H void exit int val O valor de val retornado para o sistema operacional Por conven o um valor de retorno O significa t rmino com sucesso para o DOS Qualquer outro valor indica que o programa terminou por causa de algum problema retornado para a vari vel ERRORLEVEL em arquivos batch do DOS Se voc usar a fun o fopen para abrir um arquivo qualquer arquivo preexistente com o mesmo nome ser apagado e o novo arquivo iniciado Se nao existirem arquivos com o nome entao ser criado um Se voc quiser acre
122. iz E poss vel atribuir o endere o de um elemento espec fico de uma matriz aplicando se o operador amp para uma matriz indexada Por exemplo este fragmento coloca o endere o do terceiro elemento de x em p p amp x 2 Essa declara o especialmente til para encontrar uma substring Por exemplo este programa imprimir o restante de uma string que inserida pelo teclado a partir do ponto onde o primeiro espa o encontrado include lt stdio h gt Exibe a string a direita depois que o primeiro espa o encontrado main char s 80 char p int i printf digite uma string gets s encontra o primeiro espa o ou o fim da string for 1 0 s i amp amp s i i p amp s i printf p Esse programa funciona uma vez que p estar apontando para um espa o ou para um nulo se a string nao contiver espa os Se h um espa o o restante da string ser impresso Se h um nulo a fun o printf nao imprime nada Por exemplo se Ol a todos for digitado a todos ser exibido 37 Matrizes de Ponteiros Podem existir matrizes de ponteiros como acontece com qualquer outro tipo de dado A declara o para uma matriz de ponteiros do tipo int de tamanho 10 int x 10 Para atribuir o endere o de uma vari vel ponteiro chamada var ao terceiro elemento da matriz de ponteiros voc deve escrever x 2 amp var Para encontrar o valor de var voc deve escreve
123. m matriz str gets matriz_str 2 O que equivalente a embora nao tenhamos visto ponteiros ainda gets amp matriz_str 2 0 Para entender melhor como as matrizes de caracteres funcionam consideremos o programa seguinte que aceita linhas de texto inseridas pelo teclado e exibe as assim que uma linha em branco inserida Recebe e exibe strings include lt stdio h gt main register int t i char texto 100 80 Documento Tutorial Linguagem C Aplicada Engenharia Page 38 of 162 SytCom Training 2014 All rights reserved for t 0 t lt 100 t printf d t gets texto t t indexa linhas if texto t 0 break sai com uma linha em branco reapresenta a string for i 0 i lt t i printf s n texto i i indexa linhas aqui 32 Matrizes Multidimensionais A linguagem C permite matrizes com mais de duas dimensoes A forma geral de uma matriz multidimensional tipo_nome tamanhol tamanho2 tamanhoN Por exemplo a limha abaixo cria uma matriz 4x10x3 de inteiros int trid 4 10 3 Matrizes de tr s ou mais dimensoes usualmente requerem uma quantidade grande de memoria para armazenamento A rea requerida para armazenar elementos de matrizes alocada permanentemente durante a execu o do programa Por exemplo uma matriz quadridimensional de caracteres com dimensoes 10 6 9 4 deve requerer 10x6x9x4 ou 2 160 bytes j que 1 char 8 bits 1 byte
124. m C Aplicada Engenharia Page 92 of 162 SytCom Training 2014 All rights reserved line if strstr string argv 1 printf 02d s line string O fluxo stderr usado para mostrar mensagens de erro na tela quando a sa da do programa esta redirecionada p outro dispositivo que nao seja a tela include lt stdio h gt main int argc char argv FILE fp int count char letter if argc 2 puts Digite o nome do arquivo exit 1 if fp fopen argv 1 w fputs Erro na abertura do arquivo stderr 2 op o puts Erro na abertura do arquivo gt vai p stdout isto tela ou outro dispositivo exit 1 else for letter A letter lt Z letter putc letter fp fclose fp Se a saida deste programa stdout for redirecionada para algum outro arquivo a mensagem de erro for osamente aparecer na tela porque estamos escrevendo em stderr fprintf e fscanfQ Comportam se como printf e scanf s que escrevem e l em de arquivos de disco Todos os c digos de formato e modificadores sao os mesmos Prot tipo int fprintf FILE fp char string de controle lista de argumentos int fscanf FILE fp char string de controle lista de argumentos Header stdio h Embora fprintf e fscanf sejam a maneira mais f cil de ler e escrever tipos de dados nos mais diversos formatos elas nao sao as mais eficientes em termos de tamanho de c digo resultante e velocid
125. m coproc l unsigned ram placa 2 unsigned modo video 2 unsigned drive_floppy 2 unsigned DMA 1 unsigned portas 3 unsigned joystick 1 unsigned sem_uso 1 unsigned num_impressoras 2 F union struct perif eg unsigned i eq_union eq_union i biosequip printf d drives n eq_union eq drive_floppy 1 0 0 1 drive printf d portas n eq_union eq portas return 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 118 of 162 SytCom Training 2014 All rights reserved 56 Operadores l gicos de bit Diferente de muitas outras a linguagem C suporta um arsenal completo de operadores de bit J que a linguagem C foi projetada para tomar o lugar da linguagem Assembly em muitas tarefas de programa o era importante que ela tivesse a habilidade de suportar todas ou no m nimo a maior parte as operaC ES que podem ser feitas em Assembler OperaC ES bit a bit referem se a testar indicar ou movimentar os bits em um byte que corresponde aos tipos char int ou long em C Operadores de bit nao podem ser usados com os tipos float double long double void ou outro tipo mais complexo Operadores de bit Operador A o a amp b cada bit de a AND cada bit de b alb cada bit de a NOR cada bit de b ab cada bit de a XOR cada bit de b a NOT a complemento de 1 v gt gt b v deslocado b bits p a direita v lt lt b v deslocado b bits p a esquerda Exemplos converte para bin
126. mento Tutorial Linguagem C Aplicada Engenharia Page 129 of 162 SytCom Training 2014 All rights reserved DETECT 0 CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMONO 5 IBM8514 6 HERCMONO 7 ATT400 8 VGA 9 PC3270 10 Quando se usa DETECT initgraph detecta automaticamente o tipo de placa e monitor de video presente no sistema e seleciona o modo de video com a melhor resolu o Isso faz com que os valores dos argumentos driver e modo sejam fixados automaticamente O valor de modo deve ser um dos modos gr ficos mostrados na tabela abaixo Placa V deo Modo Inteiro Equivalente Resolu o driver BGI CGA CGACO 0 320x200 CGACI 1 320x200 CGAC2 2 320x200 CGAC3 3 320x200 CGAHI 4 640x200 MCGA MCGACO 0 320x200 MCGACI 1 320x200 MCGAC2 2 320x200 MCGAC3 3 320x200 MCGAMED 4 640x200 MCGAHI 5 640x480 EGA EGALO 0 640x200 EGAHI 1 640x350 EGA64 EGA64LO 0 640x200 EGA64HI 1 640x350 EGAMONO EGAMONOHI 3 640x350 HERC HERCMONOHI 0 720x348 ATT400 ATT400C0 0 320x200 ATT400C1 1 320x200 ATT400C2 2 320x200 ATT400C3 3 320x200 ATT40CMED 4 640x200 ATT400CHI 5 640x400 VGA VGALO 0 640x200 VGAMED 1 640x250 VGAHI 2 640x480 PC3270 PC3270HI 0 720x350 IBM8514 IBM8514LO 0 640x480 IBM8514HI 1 1024x768 Documento Tutorial Linguagem C Aplicada Engenharia Page 130 of 162 SytCom Training 2014 All rights reserved Por exemplo para fazer com que o sistema seja inicializado no modo gr fico CGA 4 cores 320x200 pontos de resolu o use 7 include l
127. na rea de dados ou no sistema operacional Entretanto medida que o seu programa cresce a probabilidade de p apontar para algum lugar fundamental aumenta Eventualmente o seu programa p ra de funcionar Para evitar esse tipo de problema certifique se sempre de que um ponteiro esteja apontado para alguma posi o v lida antes que seja usado Um segundo erro causado pelo mal entendeido sobre como usar um ponteiro Considere o seguinte include lt stdio h gt Este programa est incorreto Nao o execute main int x p x 10 p x printf d p A chamada fun o printf nao imprimir o valor de x que 10 na tela Imprimir algum valor desconhecido O motivo para isso que a atribui o p x est errada Aquela declara o atribui o valor 10 para o ponteiro p que supostamente cont m um endere o nao um valor Para tornar o programa correto voc deve escrever Documento Tutorial Linguagem C Aplicada Engenharia Page 59 of 162 SytCom Training 2014 All rights reserved Neste exemplo o Turbo C avisar voc sobre o erro no programa Entretanto nem todos erros desse tipo geral podem ser verificados pelo compilador 39 6 FunCOES A forma Geral de uma Fun o A forma geral de uma fun o especificador de tipo nome da fun o declara o de par metros corpo da fun o O especificador de tipo determina o tipo de valor que a fun o retornar usando a
128. nfo_adr t cidade printf Estado s n info_adr t estado printf CEP s n n info_adr t cep A listagem completa do programa Lista de Endere os mostrada aqui uma lista de endere os simples utilizando uma matriz de estruturas include lt conio h gt include lt stdio h gt include lt ctype h gt include lt string h gt include lt stdlib h gt define TAMANHO 100 struct endereco char nome 40 char rua 40 char cidade 30 char estado 3 char cep 10 info_adr TAMANHO void insere void inic_list void exibe void void salva void carrega void int menu void main void char opcao inic_listQ for Documento Tutorial Linguagem C Aplicada Engenharia Page 101 of 162 SytCom Training 2014 All rights reserved opcao menu switch opcao case 1 insere break case e exibe break case cl carrega break case s salva break case t return 0 Inicializa a matriz info_adr void inic_list void register int t for t 0 TAMANHO t info_adr t nome 0 um nome com comprimento zero significa vazio Obt m uma sele o no menu menu void char ch do printf Dnsere n printf E xibe n printf C arrega n printf S alva n printf T ermina n n printf sua op ao ch getche printf n while strchr iecst tolower ch return tolower ch Insere nomes n
129. ning 2014 All rights reserved char nome_da_matriz tamanho string Por exemplo este fragmento de c digo inicializa a vari vel str com a palavra Al char str 4 Al Que o mesmo que escrever char str 4 A T 6 0 J que as strings na linguagem C devem terminar com um nulo certifique se de que a matriz que voc declara grande o suficiente para inclu lo por isso que a vari vel str tem o tamanho de quatro carateres apesar de Al ter somente tr s Quando a constante string usada o compilador prov automaticamante o terminador nulo Matrizes multidimensionais sao inicializadas da mesma maneira que as unidimensionais Por exemplo as linhas abaixo inicializam a matriz sqrs com os n meros de a 10 e seus respectivos quadrados int sqrs 10 2 1 1 4 9 16 25 36 49 64 81 0 100 IDO IAM EN 33 Inicializa o de Matrizes sem Especifica o de Tamanho Imagine que voc esteja usando inicializa o de matriz para construir uma tabela de mensagens de erros como mostrado aqui char el 20 informa o inv lida n char e2 23 sele o fora do limiteln char e3 19 autoriza o negada Como voc pode supor bastante mon tono contar manualmente os caracteres em cada mensagem para determinar a dimensao correta da matriz poss vel deixar a linguagem C dimensionar automaticamante as matrizes neste exemplo pelo uso de m
130. nterfacing functions RP AS de ag FA de de de Je de de de e de e o e e e e a e 2 e 2 e oe de oe e she oe A turn off mouse cursor void cursor off int fnum fnum 2 cursor off cmouses amp fnum amp fnum amp fnum amp fnum turn on mouse cursor void cursor_on int fnum fnum 1 cursor on cmouses amp fnum amp fnum amp fnum amp fnum returns V if rightbutton pressed F otherwise rightb_pressed int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum amp arg2 amp arg3 amp arg4 return arg2 amp 2 returns V if leftbutton pressed F otherwise leftb_pressed Documento Tutorial Linguagem C Aplicada Engenharia Page 149 of 162 SytCom Training 2014 All rights reserved int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum amp arg2 amp arg3 amp arg4 return arg2 amp 1 return mouse cursor coordinates void mouse_position x y int x y int fnum arg2 arg3 arg4 fnum 3 get button position and status cmouses amp fnum amp arg2 amp arg3 amp arg4 x arg3 y arg4 return path direction void mouse_motion deltax deltay char deltax deltay int fnum arg2 arg3 arg4 fnum 1 1 get movement direction cmouses amp fnum amp arg2 amp arg3 amp arg4 if arg3 gt 0 deltax RIGHT else if arg3 lt 0 deltax LEFT else
131. ntrole do loop include lt stdio h gt Um programa que ilustra o loop for main int contador for contador 1 contador lt 100 contador printf Jod contador Obs contador tem o mesmo efeito que contador contador 1 contador tem o mesmo efeito que contador contador 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 7 of 162 SytCom Training 2014 All rights reserved 5 Blocos de c digo Como C uma linguagem ESTRUTURADA ela suporta a cria o de blocos de c digo if x lt 10 int novo printf Muito baixo tente outra vez n novo x 2 printf Que tal x d novo scanf d amp x Nota a vari vel novo s existe dentro deste bloco de c digo sendo eliminada da mem ria ap s o fechamento da ltima chave 6 B sico sobre Caracteres e Strings include lt stdio h gt Um exemplo usando caracteres main char ch ch A printf c ch ch B printf c ch ch C printf c ch include lt stdio h gt include lt conio h gt main char ch ch getche 1 um caractere do teclado if ch H printf voc pressionou a minha tecla magica n Em C uma string uma segii ncia de caracteres char organizada em uma matriz unidimensional vetor terminada pelo caracter nulo null O caracter nulo o 0 A linguagem C n o tem uma vari vel tipo string propriamente como o
132. o strlen retorna o tamanho de s O programa seguinte imprimir o tamanho da string que for inserida pelo teclado imprime o tamanho da string digitada include lt stdio h gt include lt string h gt main char str 80 printf digite uma string gets str printf Jd strlen str Imprime uma string na ordem inversa include lt stdio h gt include lt string h gt main char str 80 int 1 printf digite uma string gets str for i strlen str 1 i gt 0 i printf c str i informa tamanho e igualdade entre duas strings e concatena include lt stdio h gt Documento Tutorial Linguagem C Aplicada Engenharia Page 36 of 162 SytCom Training 2014 All rights reserved include lt string h gt main char s1 80 s2 80 printf digite duas strings gets s1 gets s2 printf tamanhos d d n strlen s1 strlen s2 if Istremp s 1 s2 printf As strings sao iguais n streat s1 s2 printf s s1 Usando o terminador nulo converte uma string para letras mai sculas include lt stdio h gt include lt string h gt include lt ctype h gt main char str 80 int 1 printf Informe uma string em letras mintsculas gets str forG 0 str i i str i toupper str i for termina quando printf s str str i 0 Obs O complementar de toupper tolower Uma Varia o da Fun
133. o apontado indiretamente por um ponteiro para um ponteiro o operador asterisco deve ser aplicado duas vezes como mostrado no pequeno exemplo a seguir include lt stdio h gt main Documento Tutorial Linguagem C Aplicada Engenharia Page 57 of 162 SytCom Training 2014 All rights reserved int x p q x 10 p amp x q amp p printf d q imprime o valor de x Aqui p declarado como um ponteiro para um inteiroe q como um ponteiro para um ponteiro para um inteiro A chamada a printf imprimir o n mero 10 na tela Inicializando Ponteiros Depois que declarado mas antes que tenha sido associado a um valor um ponteiro conter um valor desconhecido Se tentarmos usar um ponteiro antes de dar a ele um valor provavelmente nao s travar o programa como tamb m o sistema operacional um tipo de erro muito desagrad vel Por conven o um ponteiro que est apontando para nenhum lugar deve ter valor nulo Entretanto somente o fato de um ponteiro ter um valor nulo nao o torna seguro Se usarmos um ponteiro nulo no lado esquerdo de uma declara o de atribui o correremos o risco de travar o programa e o sistema operacional Como um ponteiro nulo considerado in til podemos us lo para tornar muitas rotinas de ponteiros f ceis de codificar e mais eficientes Por exemplo podemos usar um ponteiro nulo para marcar o final de uma matriz de ponteiros Se isso feito a rotina que ac
134. oat x 3 y float x 2 y 1 5 y float x 2 y 1 0 Documento Tutorial Linguagem C Aplicada Engenharia Page 16 of 162 SytCom Training 2014 All rights reserved include lt stdio h gt main imprime i e 1 3 com a parte fracion ria int i for i 1 i lt 100 i printf d 3 f n i float 1 3 18 Declara es de Controle do Programa Declara o if A forma geral da declara o if if condi o declara o else declara o A cl usula else opcional Se condi o V 0 declara o ou bloco de declara es que forma o destino de if executada caso contr rio a declara o ou bloco que forma o destino do else executada O programa a seguir ilustra o uso do if Este programa introduz dois novos formatos para scanf e printf que s o o x e o associados leitura scanf e impress o printf respectivamente de dados hexadecimais e octais Programa de convers o de base num rica 1 decimal gt hexadecimal hexadecimal gt decimal decimal gt octal octal gt decimal include lt stdio h gt main int op o int valor printf Converter An printf 1 decimal para hexadecimal n printf 2 hexadecimal para decimal n printf 3 decimal para octal n printf 4 octal para decimal n printf informe a sua op o scanf d amp op ao if opcao 1 printf informe um valor em decim
135. ocaliza o 2000 que o endere o de mem ria que foi atribu do a count addr A opera o do operador pode ser lembrada como valor contido no endere o Neste caso entao a declara o pode ser lida como val recebe o valor que est no endere o count addr Documento Tutorial Linguagem C Aplicada Engenharia Page 46 of 162 SytCom Training 2014 All rights reserved Com rela o ao mapeamento de mem ria anterior envolvendo as vari veis mult sum letter e os ponteiros set e ptrl se tivessemos feito a declara o de uma outra vari vel inteira digamos de nome teste e fiz ssemos a seguinte declara o teste set teste recebe o valor da vari vel p a qual set aponta teste receberia o valor de sum que 32000 De mesma maneira se teste fosse declarada como float e fiz ssemos teste ptrl teste receberia o valor de mult que 315 2 Infelizmente o sinal de multiplica o e o sinal valor no endere o sao os mesmos Isso algumas vezes confunde iniciantes na linguagem C Esses operadores nao se relacionam um com o outro Tanto amp como t m preced ncia maior que todos os outros operadores aritm ticos exceto o menos un rio com o qual eles se igualam Aqui est um programa que usa esses operadores para imprimir o n mero 100 na tela imprime 100 na tela include lt stdio h gt main int count addr count val count 100 count addr amp count pega o endere o de count
136. om as vari veis globais necess rias char entrada 80 char palavra 80 char p main int loc printf Informe a senten a em ingl s gets entrada p entrada d a p o endere o da matriz entrada printf tradu o r stica para o portugu s pega palavra pega a primeira palavra Este o la o principal Ele l uma palavra por vez da matriz entrada e traduz para o portugu s do procura o ndice da palavra em ingl s em trans loc verifica palavra imprime a palavra em portugu s se uma correspond ncia encontrada Documento Tutorial Linguagem C Aplicada Engenharia Page 54 of 162 SytCom Training 2014 All rights reserved if loc 1 printf s trans loc 1 else printf lt desconhecida gt pega_palavra pega a proxima palavra while palavra repete at que uma string nula encontrada O programa opera desta maneira primeiro o usu rio solicitado a informar uma senten a em ingl s Essa senten a lida na string entrada O ponteiro p entao associado ao endere o do in cio de entrada e usado pela fun o pega palavra para ler uma palavra por vez da string entrada e coloc la na matriz palavra O la o principal verifica entao cada palavra usando a fun o verifica e retorna o ndice da palavra em ingl s ou 1 se a palavra nao estiver na tabela Adicionando se um a este ndice a palavra correspondente em portugu s
137. omizar o gerador de n mero rand mico da linguagem C que usado para gerar o movimento do computador como veremos em breve A primeira fun o necess ria aquela que cria o movimento do computador O computador submarino gera o seu movimento usando o gerador de n meros rand micos da linguagem C rand que retorna um n mero rand mico entre 0 e 32 767 Tanto a fun o rand como randomize usam o arquivo cabe alho header stdlib h A fun o randomize requer ainda o arquivo time h Um valor rand mico gerado tanto para a coordenada X quanto para a Y toda a vez que o computador chamado a gerar um movimento Esses valores sao usados entao em uma opera o de m dulo para prover um n mero entre O e 2 Finalmente o computador verifica se encontrou e por defini o destruiu o coura ado Se o movimento gerado tem as mesmas coordenadas da localiza o atual do coura ado o submarino vence Se o computador venceu a fun o retorna verdadeira caso contr rio retorna falso A fun o tent sub apresentada aqui tent sub gera o pr ximo movimento do computador usando um gerador de n meros rand micos Documento Tutorial Linguagem C Aplicada Engenharia Page 42 of 162 SytCom Training 2014 All rights reserved matriz compX compY apaga ltima posi o do submarino compX rand 3 o resto de uma divisao por 3 sempre O 1 ou 2 compY rand 3 if matriz compX compY BI r
138. onteiro nulo void free void p free libera a mem ria alocada a partir do ponteiro gerado por malloc NUNCA use free p liberar o bloco de mem ria apontada por um ponteiro que nao tenha sido gearado por malloc ou a mem ria usada ser perdida void realloc void p unsigned tamanho realloc altera o tamanho da mem ria alocada por p para o tamanho especificado por tamanho Se nao houver mem ria suficiente retorna um ponteiro nulo e libera executa free o bloco original l um arquivo num rico de nome a especificar no formato de 2 colunas include lt dos h gt Documento Tutorial Linguagem C Aplicada Engenharia Page 94 of 162 SytCom Training 2014 All rights reserved include lt stdio h gt include lt stdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt include lt alloc h gt main argc argv int argc char argv FILE in float x y float tempx tempy int i teste numlido if argc 2 puts Digite o nome do arquivo exit 1 if in fopen argv 1 rt NULL sempre texto c fscanf e fprintf puts Nao posso abrir arquivo exit 1 x float malloc sizeof float if x LBLMEM puts Mem6oria insuficiente exit 1 y float malloc sizeof float if y goto LBLMEM i 0 while 1 teste fscanf in f f amp ctempx amp tempy if teste 1 break testa EOF fscanf retorna 1 quando encontra o
139. ontrole consiste de tr s conjunto de caracteres especificadores de formato Caracteres de espa o em branco caracteres de espa o nao branco Os especificadores de formato de entrada sao precedidos pelo sinal e dizem a scanf qual tipo de dado deve ser lido em seguida A lista de argumentos cont m uma lista de ponteiros para as vari veis argumentos correspondentes em tipo n mero e ordem de ocorr ncia aos especificadores de formato na string de controle Especificadores de formato de scanf Especificador Dado a ser lido Joc Um nico caractere d Decimal inteiro oi Decimal inteiro Documento Tutorial Linguagem C Aplicada Engenharia Page 78 of 162 SytCom Training 2014 All rights reserved pp n Hexadecimal inteiro Cp L o valor de um ponteiro L o valor de um ponteiro far O argumento associado um ponteiro para um inteiro onde colocado o n mero de caracteres lidos le ou lg Id ntico ao caso sem o modificador 1 s que l tc atone Caracteres de espa o em branco Um caratere de espa o em branco na string de controle faz com que a fun o scanf salte um ou mais caracteres em branco no buffer de entrada Um caractere de espa o em branco pode ser um espa o ou uma tabula o ou um newline Enter Essencialmente um caractere de espa o em branco na string de controle far com que a scanf leia mas nao armazene qualquer n mero de espa os em branco incluindo zero
140. orial Linguagem C Aplicada Engenharia Page 71 of 162 SytCom Training 2014 All rights reserved Note que cada argumento da linha de comando deve ser separado do seguinte por um espa o ou uma tabula o nao sao v lidos a v rgula ou ponto e v rgula Se for necess rio passar um argumento de linha de comando contendo espa os deve se coloc lo entre aspas O argumento env declarado da mesma maneira que argv Ele um ponteiro para a matriz que contem as definiCOES do ambiente do DOS vari veis ambientais mostra o ambiente do DOS include lt stdio h gt main argc argv env int argc char argv char env int 1 forG 0 env i i printf s n env i Retornando valores de main para o DOS usado no comando IF ERRORLEVEL do DOS zero gt sucesso nao zero gt erro programa p executar comandos do DOS sequencialmente include lt stdio h gt include lt stdlib h gt main int argc char argv int 1 for i 1 i lt argc i if system argv i printf s falha n argv i return 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 72 of 162 SytCom Training 2014 All rights reserved 42 Fun es recursivas determina o fatorial de um n mero inteiro RECURSIVAMENTE Vantagem c digo menor se comparado com a versao nao recursiva Desvantagem roda ligeiramente mais lenta opera o com pilha Obs colocar watches em n n 1 e res
141. oxyCex sxt1 1 gt 5putch i AS gotoouc l ey sy 1 s putehcz gt window lt ex ey ext1 ey sgotoxy 1 1 gt putch 4 gt windowlsx sy ex ev hack to original window forCi 251i lt ex sx3it gt lt gotoxyCi 1 gt 5 putch gt 5 gt for i 25i lt ey sy it gt lt gotoxyt1 i gt putch gt 3 gt forCi 25i lt ex sx3it gt lt gotoxyCi ey syti gt putch gt 5 gt for i 25i lt ey sy it gt lt gotoxyCex sxt1 i gt putch gt 3 gt void storewincoord wlft wup wrgt wdwn sptr int wlft wup wdwn wico sptr text screen 1 1 80 25 virtual screen 0 0 640 200 mouse cursor 8x8 Documento Tutorial Linguagem C Aplicada Engenharia Page 146 of 162 SytCom Training 2014 All rights reserved xt 1 gt xv 0 e xt 80 gt xv 640 8 632 yt 1 gt yv 0 e yt 25 gt xv 200 8 192 640 8 amp 200 8 gt cursor mouse 8x8 pixels coordinates transformation virtual 8 text 8 sptr gt 1f 8 wlft 8 sptr gt up 8 wup 8 sptr gt rg 8 wrgt 8 sptr gt dw 8 wdwn 8 66 Ap ndice IV PROGRAMA DEMONSTRATIVO DE CONTROLE DO MOUSE EM MODO GR FICO Programa de desenho simples p Mouse IBM e monitor VGA EGAVGA bgi deve estar no diretorio corrente Por Eng Fernando C sar C de Castro CREARS 48711 15 12 1992 include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt ctype
142. plicada Engenharia Page 41 of 162 SytCom Training 2014 All rights reserved 34 Um Jogo de Caga ao Submarino No jogo de ca a ao submarino o computador controla um submarino e voc um coura ado O objetivo do jogo uma embarca o destruir a outra Contudo os navios t m capacidades de radar limitadas A nica maneira do submarino encontrar o coura ado estar diretamente sob ele O vencedor aquele que encontrar o outro primeiro com o submarino e o coura ado alternando movimentos aleat rios sobre o oceano O oceano um pequeno campo de jogo que mede 76 2 x 76 2 mm Tanto o submarino quanto o coura ado tratam esse plano como coordenadas X Y com 0 0 sendo o canto superior esquerdo Uma matriz bidimensional chamada de matriz usada para guardar o tabuleiro de jogo e cada elemento nele inicializado com um espa o o que denota um elemento nao usado A fun o main c suas vari veis globais sao mostradas aqui char matriz 3 3 vars globais Te EL At v 2 CE St Ti 3 3 CE EPET ae j int compX compY jogX jogY main randomize inicializa gera a semente inicial aleatoriamente o gerador de n meros rand micos compX compY jogX jogY 0 inicializa vars de coordenadas for if tent_sub printf O submarino venceu n break if tent_jog printf O coura ado voc venceu n break exibe tabuleiro A fun o randomize serve para rand
143. po float no formato decimal Joc Exibe um caractere hos Exibe uma string Exemplos printf s d Esta uma string 100 exibe Esta uma string 100 printf esta uma string d 100 exibe esta uma string 100 printf o n mero d decimal f ponto flutuante 10 110 789 exibe o n mero 10 decimal 100 789 ponto flutuante Documento Tutorial Linguagem C Aplicada Engenharia Page 9 of 162 SytCom Training 2014 All rights reserved printf s Al6 n exibe Al e avan a uma linha 8 Vari veis Constantes Operadores e Express es Tipos de dados Tamanho e intervalo dos tipos b sicos de dados do Turbo C Tipo Tamanho em bits Intervalo char 8 128a 127 int 16 32768 a 32767 float 32 3 4E 38 a 3 4E 38 double 64 1 7E 308 a 1 7E 308 void 0 sem valor 9 Modificadores de Tipos signed unsigned long short Todas as combina es poss veis dos tipos b sicos e modificadores do Turbo C Tipo Tamanho em bits Intervalo decimal 8 bits 1 byte char 8 128 a 127 unsigned char 8 0a 255 signed char 8 128 a 127 int 16 32768 a 32767 unsigned int 16 0 a 65535 signed int 16 32768 a 32767 short int 16 32768 a 32767 unsigned short int 16 0 a 65535 signed short int 16 32768 a 32767 long int 32 2147483648 a 2147483647 signed long int 32 2147483648 a 2147483647 unsigned long int 32 O a 4294967295 float 32 3 4E 38 a 3 4E 38 double 64 1 7E 308 a 1 7E
144. posta para acompanhamento include lt stdlib h gt include lt stdio h gt unsigned long int factr main unsigned long int n f printf Digite um numero scanf ld amp n f factr n printf O fatorial de ld l1d n n f unsigned long int factr n unsigned long int n unsigned long int resposta if n 1 In 0 return 1 resposta factr n 1 n printf ld n resposta opcional para visualiza o return resposta determina o fatorial de um numero inteiro NAO RECURSIVAMENTE include lt stdlib h gt include lt stdio h gt unsigned long int factr main unsigned long int n f printf Digite um n mero scanf Gold amp n f factr n printf O fatorial de ld ld n nft Documento Tutorial Linguagem C Aplicada Engenharia Page 73 of 162 SytCom Training 2014 All rights reserved unsigned long int factr n unsigned long int n unsigned long int resposta t for t 1 t lt n t resposta resposta t return resposta Quando uma fun o chama a si pr pria as novas vari veis locais e os argumentos sao alocados na pilha e o c digo da fun o executado com esses novos valores a partir do in cio Uma chamada recursiva nao faz uma nova c pia da fun o Somente os argumentos e as vari veis sao novos Quando cada chamada recursiva retorna as antigas vari veis locais e os par metros sao removidos da pilha e
145. r x 2 Um uso bastante comum de matrizes de ponteiros armazenar ponteiros para mensagens de erros Voc pode criar uma fun o que emite uma mensagem dado o seu n mero de c digo como mostrado na fun o serror abaixo Documento Tutorial Linguagem C Aplicada Engenharia Page 52 of 162 SytCom Training 2014 All rights reserved serror int num char err nao possso abrir o arquivo n erro de leitura n erro de escrita n falha na midia n printf s err num Como voc pode ver a fun o printf chamada dentro da fun o serror com um ponteiro do tipo caractere que aponta para uma das v rias mensagens de erro indexadas pelo n mero do erro passado para a fun o Por exemplo se num passado com valor 2 a mensagem de erro de escrita exibida Uma outra aplica o interessante para matrizes de ponteiros de caracteres inicializadas usa a fun o de linguagem C system que permite ao seu programa enviar um comando ao sistema operacional Uma chamada a system tem esta forma geral system comando onde comando um comando do sistema operacional a ser executado inclusive outro programa Por exemplo assumindo se o ambiente DOS esta declara o faz com que o diret rio corrente seja exibido system DIR O programa seguinte implementa uma pequena interface com o usu rio dirigida por menu que pode executar quatro comandos do DOS DIR CHKDSK TIME e DATE Uma
146. r ncia finclude lt stdio h gt void troca main void double x y printf Digite dois n meros scanf lf Golf Ex amp y printf Valores iniciais x lf y 9lfn x y troca amp x amp y troca opera diretamente sobre os valores de x e y alterando os printf Valores trocados x lf y 9lAn x y void troca a b double a b double temp temp a guarda em temp o valor contido no endere o de x a b coloca em x o valor de y b temp coloca x em y Chamando funCOES com argumentos do tipo matriz Documento Tutorial Linguagem C Aplicada Engenharia Page 65 of 162 SytCom Training 2014 All rights reserved Quando uma matriz usada como argumento para uma fun o somente o endere o da matriz passado para a fun o e nao a matriz inteira Em outras palavras quando chamamos uma fun o com um argumento matriz um ponteiro para o primeiro elemento da matriz passado para a fun o LEMBRE Em C um nome de qualquer array conjunto sem ndice um ponteiro para o primeiro elemento do array Isto significa que a declara o do argumento no prot tipo da fun o deve ser a de um ponteiro de tipo compat vel Existem tr s maneiras de se declarar um argumento em uma fun o que ir receber um ponteiro de uma matriz Primeiro o ponteiro argumento pode ser declarado como uma matriz do mesmo tipo e tamanho daquela usada como argumento na chamada da
147. r j 0 j lt 16 j printf 2X buf i 16 j imprime 16 col em hexa printf separa mostrador hexa do ascii for j 0 j lt 16 j imprime 16 col em ascii s imprim veis if isprint buf i 16 j printf c buf i 16 j else printf printf n 48 Os Fluxos Padroes Toda vez que um programa come a a execu o sao abertos 5 fluxos padroes stdin aponta p o teclado se nao redirecionado pelo DOS Ex MORE lt FILE TXT stdout aponta p a tela se nao redirecionado pelo DOS Ex DIR gt PRN stderr recebe mensagens de erro aponta para a tela stdprn aponta p a impressora stdaux aponta p a porta serial Para entender o funcionamento destes fluxos note que putchar definida em stdio h como define putchar c putc c stdout e a fun o getchar definida como define getchar getc stdin Ou seja estes fluxos permitem serem lidos e escritos como se fossem fluxos de arquivos Toda entrada de dado de um program feita por stdin e toda sa da por stdout localiza uma palavra especificada pela linha de comando em um arquivo redirecionado para stdin mostra a linha e seu n mero rodar no prompt do DOS o seguinte comando tmp argv lt tmp c include lt string h gt strstr necessita include lt stdio h gt main int argc char argv char string 128 int line 0 while fgets string sizeof string stdin Documento Tutorial Linguage
148. r o elemento saldo atrav s de ptr temos duas sintaxes float x y x ptr saldo atribui a x o saldo de cliente y ptr gt saldo atribui a y o saldo de cliente A segunda sintaxe de acesso usa o chamado operador seta e universalmente preferida em rela o a primeira Seguem dois exemplos de programas um chamando funC ES por valor e outro por refer ncia a estruturas de dados Ambos utilizam a palavra reservada typedef que define um novo nome para um tipo de dado j existente Nao confundir com define que atribui a uma sequ ncia de caracteres um identificador define ERRO Imposs vel abrir arquivo n atribui o identificador ERRO sequ ncia de caracteres que o segue puts ERRO typedef struct cliente tipo float divida Int atraso char nome 40 char tipo divida 80 cliente cliente lista_clientes NUM_CLIENTES define uma matriz de estruturas do tipo cliente chamada lista_clientes Documento Tutorial Linguagem C Aplicada Engenharia Page 106 of 162 SytCom Training 2014 All rights reserved Obs cliente nao uma vari vel do tipo cliente tipo mas sim um outro nome para a struct cliente_tipo puts lista_clientes 4 nome imprime na tela o 5 nome da lista de clientes Programa de operaCOES simples c complexos para demonstra o da passagem de estruturas p funC ES com chamada por valor include lt dos h gt include lt stdio h gt include lt s
149. rdenada Vertical Y temos o seguinte sistema de equaC ES O Ay topy By MAXY Ay boty By Resolvendo p Ay e By temos Ay MAXY boty topy By MAXY 1 boty topy Para a coordenada horizontal X temos o seguinte sistema de equaCOES O Ax botx Bx MAXX Ax topx Bx Resolvendo p Ax e Bx temos Ax MAXX topx botx Bx MAXX 1 topx botx Calcula Ax Bx Ay e By Ax MAXX topx botx Ay MAXY boty topy if botx 0 Bx 0 Para evitar divisao por zero else Bx MAXX 1 topx botx if topy 0 By 0 Para evitar divisao por zero else By gt MAXY 1 boty topy Faz a transforma o de coordenadas for i 0 i lt numlido i Documento Tutorial Linguagem C Aplicada Engenharia Page 160 of 162 SytCom Training 2014 All rights reserved x 1 Ax x 1 Bx ylil Ay yli By plota na tela settextstyle SMALL FONT HORIZ DIR 4 setcolor EGA LIGHTBLUE for i 0 i lt numlido 1 1 line int x i int y i Gint x 1 int y i 1 desenha linha vertical e horizontal da escala setcolor EGA YELLOW line MAXX 2 0 MAXX 2 MAXY setcolor EGA LIGHTRED line 0 MAXY 2 MAXX MAXY 2 desenha 11 marcadores num ricos na escala vertical setcolor EGA YELLOW th textheight W tw textwidth W delta topy boty 10 for i 0 accum topy i lt MAXY i MAXY 1 10 accum delta coloca os 10 1 s marcadores sprintf num 4 2G accum ifG
150. re do scanset include lt stdio h gt main char str 80 puts Informe d gitos e letras min sculas excluindo a b c scanf Na b str puts str 44 Entrada e saida de disco O ponteiro de arquivo A linha comum que une o sistema de E S de disco do Turbo C o ponteiro de arquivo Um ponteiro de arquivo um ponteiro para uma rea na mem ria buffer onde estao contidos v rios dados sobre o arquivo a ler ou escrever tais como o nome do arquivo estado e posi o corrente O buffer apontado pelo ponteiro de arquivo a rea intermedi ria entre o arquivo no disco e o programa Este buffer intermedi rio entre arquivo e programa chamado fluxo e no jargao dos programadores comum falar em funC ES que operam fluxos em vez de arquivos Isto se deve ao fato de que um fluxo uma entidade l gica gen rica que pode estar associada a uma unidade de fita magn tica um disco uma porta serial etc Adotaremos esta nomenclatura aqui Um ponteiro de arquivo uma vari vel ponteiro do tipo FILE que definida em stdio h Para ler ou escrever em um arquivo de disco o programa deve declarar uma ou mais de uma se formos trabalhar com mais de um arquivo simultaneamente vari vel ponteiro de arquivo Para obter uma vari vel ponteiro de arquivo usa se uma declara o semelhante a esta ao declararmos as demais vari veis do programa FILE fp onde fp o nome que escolhemos para a vari vel podia ser
151. res que se quer que seja examinada entre colchetes Um sinal deve anteceder o colchete inicial Por exemplo 01234567 diz scanf para ler somente os d gitos de O a 7 A vari vel argumento correspondente a scanset deve ser um ponteiro para uma matriz de caracteres isto uma string analisa os dados de entrada e converte os n meros para float include lt stdio h gt include lt math h gt main char s1 80 char s2 80 float x puts Digite um n mero seguido de caracteres nao num ricos scanf 123456789 eE s s1 s2 printf Voce digitou o n mero f n atof s1 printf E a sequ ncia nao num rica foi s s2 Podemos especificar um intervalo dentro de um scanset usando um h fen Por exemplo o c digo abaixo diz scanf para aceitar os caracteres de A a Z A Z Documento Tutorial Linguagem C Aplicada Engenharia Page 81 of 162 SytCom Training 2014 All rights reserved Podemos tamb m especificar mais de um intervalo dentro de um scanset O programa abaixo por exemplo 1 d gitos e letras min sculas Ele demonstra tamb m o uso de especificador de campo m ximo 78 no caso para scanset include lt stdio h gt main char str 80 puts Informe d gitos e letras mintsculas scanf 78 a z0 9 str puts str Scanset permite tamb m a especifica o da exclusao de conjuntos de caracteres mediante o especificador colocado como primeiro caracte
152. rgumentos quantos forem os especificadores de formato necessitando haver uma correspond ncia de tipo entre especificador de formato e argumento na ordem de ocorr ncia respectiva de cada um na string de controle e lista de argumentos printf Ola c Jd s c 10 todos mostra Ol c 10 todos Especificadores de formato de printf EU Nota ocient fica E mai sculo 6 22E17 _ Domo o Decimalpontoflutuante Igual a g s que usa E mai sculo no caso de acionar e Octal inteiro String de caracteres DE vai Imprime o sinal Documento Tutorial Linguagem C Aplicada Engenharia Page 76 of 162 SytCom Training 2014 All rights reserved SL Vi ama a nj A p O endere o hexadecimal de 16 bits deslocamento para o qual aponta o argumento ponteiro associado dentro de um segmento de 64Kb ponteiro near O endere o hexadecimal de 20 bits para o qual aponta o argumento ponteiro associado no formato segmento deslocamento ponteiro far caracteres escritos at entao Ver exemplo abaixo Imprime o numero de caracteres impresso por printf include lt stdio h gt include lt conio h gt include lt ctype h gt main char str 80 int 1 gets str printf s n str amp i imprime str e 2 espa os printf d 1 Os especificadores de formato podem ter modificadores que especificam o tamanho do campo o n mero de casas decimais e um indicador de justifica o a d
153. ri vel como expressao condicional com o valor dessa vari vel sendo indicado em v rios pontos ao longo do loop funcl int trabalhando trabalhando 1 isto verdadeira while trabalhando trabalhando process1 if trabalhando trabalhando process2 if trabalhando trabalhando process3 No c digo acima qualquer das tr s rotinas process podem retornar falso zero e fazer com que o loop seja encerrado Nao h em absoluto a necessidade de qualquer declara o no corpo do loop while Por exemplo while ch getche A a atribui o ch dentro da expressao condicional do while funciona por que o sinal de igual na realidade somente um operador que especifica o valor do seu operando direita simplesmente ser executado at que o caractere A seja digitado 26 Loop infinito com while while 1 conjunto de declaraC ES id ntico ao for conjunto de declaraC ES j que a condi o do while sempre 1 verdadeiro Loop do while fa a enquanto do declara o while condi o Documento Tutorial Linguagem C Aplicada Engenharia Page 26 of 162 SytCom Training 2014 All rights reserved Exemplos 1 numeros do teclado at que um deles seja menor que 100 include lt stdio h gt main int num do scanf d amp num printf voce digitou d n num while num gt 100 O uso mais comum do loop
154. s caracteres na string de controle no exemplo anterior incluindo espacos tabulaCOES e newlines eles serao usados para correspond ncia e descarte de caracteres de entrada Qualquer caracter que corresponder descartado e se nao corresponder scanf termina digite xtyz e depois x yz include lt stdio h gt main Documento Tutorial Linguagem C Aplicada Engenharia Page 80 of 162 SytCom Training 2014 All rights reserved char a b c puts Digite xtyz na primeira tentativa e na segunda x yz scanf ct c c amp a amp b amp c printf a c b c c c a b c Outro exemplo No programa a seguir scanf nao retornar at que seja digitado um caractere depois de digitar um caractere de espa o em branco Isso ocorre em razao de espa o ap s O s que instruiu a scanf a ler e descartar espa os tabulaCOES e newlines include lt stdio h gt main char str 80 puts Digite uma string um espa o e um caractere Depois nao obede a esta regra de entrada scanf Jos str puts str A fun o scanf inclui tamb m o recurso chamado scanset Scanset define um conjunto de caracteres que serao correspondidos por scanf A fun o scanf continuar a ler caracteres enquanto eles estiverem no scanset Assim que um caractere entrado nao corresponder a nenhum caractere do scanset segue para o pr ximo especificador de formato se existir Um scanset definido colocando a lista de caracte
155. s diferentes A declara o de uma union similar a de uma estrutura como mostrado union u_tipo int i char ch Assim como com estruturas esta declara o nao declara qualquer vari vel Pode se declarar uma vari vel tanto colocando se o nome dela no fim da declara o como pelo uso de uma declara o em separado Para declarar uma vari vel union chamada cnvt do tipo u tipo usando a declara o dada anteriormente escreve se union u tipo cnvt Em cnvt o inteiro i e o caractere ch compartilham a mesma localiza o de mem ria Obviamente i ocupa 2 bytes e ch ocupa 1 byte A figura a seguir mostra como i e ch compartilham o mesmo endere o Byte 0 Byte 1 Quando uma vari vel union declarada o compilador aloca automaticamente um rea de mem ria grande o suficiente para armazenar o tipo da vari vel de maior tamanho da union Para acessar um elemento de uma union usa se a mesma sintaxe de estruturas os operadores ponto e seta Quando se opera diretamente na union usa se o operador ponto Se a vari vel union acessada por meio de um ponteiro usa se o operador seta Por exemplo para atribuir o inteiro 10 ao elemento i de cnvt deve se escrever cnvt i 10 Unioes sao usadas frequentemente quando sao necess rios conversoes de tipo de dados nao realiz veis com um cast simples uma vez que elas permitem que se considere uma regiao de mem ria de mais de uma maneira Por exemplo a fun o de bibliotec
156. s funC ES de E S de janela No entanto se estivermos usando uma janela pequena em algum lugar da tela seremos obrigados a usar as funC ES de janela Fun o Uso cprintf como printf s que escreve para a janela ativa cputs como puts s que escreve para a janela ativa putch escreve um char para a janela ativa getche l um caractere de dentro da janela ativa cgets l uma string de dentro da janela ativa Quando se usa uma fun o de janela o texto de entrada ou sa da se quebra automaticamente no limite da janela ativa demonstra o de algumas das funCOES de janela de texto include lt conio h gt include lt stdio h gt void borda main clrscr cria uma janela window 3 2 20 9 borda 3 2 20 9 gotoxy 2 2 cprintf Esta linha quebrara na borda da janela Documento Tutorial Linguagem C Aplicada Engenharia Page 126 of 162 SytCom Training 2014 All rights reserved printf Esta linha nao quebrar na borda da janela getch return O Desenha uma borda em torno de uma janela de texto void borda int iniciox int inicioy int fimx int fimy register int i gotoxy 1 1 for i 0 i lt fimx iniciox i putch putch escreve um char p a janela ativa gotoxy 1 fimy inicioy for i 0 i lt fimx iniciox i putch for i 2 i lt fimy inicioy i gotoxy 1 i putch gotoxy fimx iniciox 1 i putch Outra carac
157. scentar dados ao final do arquivo deve usar o modo a Para se abrir um arquivo para operaCOES de leitura necess rio que o arquivo j exista Se ele nao existir ser retornado um erro Finalmente se o arquivo aberto para escrita leitura as operaC ES feitas nao apagarao o arquivo se ele existir entretanto se nao existir ser criado Escrevendo um caractere A fun o putc usada para escrever caracteres para um fluxo que foi previamente aberto para escrita pela fun o fopen A fun o declarada como int putc int ch FILE fp onde fp o ponteiro de arquivo retornado pela fun o fopen e ch o caractere a ser escrito Por razoes hist ricas ch chamado formalmente de int mas somente o caractere de mais baixa ordem usado Se uma opera o com a fun o putc for satisfat ria ela retornar o caractere escrito Em caso de falha um EOF retronado EOF uma macrodefini o em STDIO H que significa fim do arquivo Documento Tutorial Linguagem C Aplicada Engenharia Page 84 of 162 SytCom Training 2014 All rights reserved Lendo um caractere A fun o getc usada para ler caracteres do fluxo aberto em modo de leitura pela fun o fopen A fun o declarada como int getc FILE fp onde fp um ponteiro de arquivo do tipo FILE retornado pela fun o fopen Por razoes hist ricas a fun o getc retorna um inteiro por m o byte de mais alta ordem zero A fun
158. sens 49 MATRIZES DE PONTEIROS ssss ssnsnssesinrisisisinristerinturistnrinturtotasratintauntatistasranintnanraninnannranne nana 52 PONTEIROS PARA DONTEIROS 57 6 FUNC ES EE 60 BLOCOS DE C DIGO E VARI VEIS LOCAIS cssccssccsseceseceseceseseseeeseesceescseecseecauecsaeesaecsaeesaeeeseeees 64 ARGUMENTOS ARGC ARGV E ENV PARA A FUN O MAIN 70 FUNGOES RECURSIVAS vas setvesivsadsadevsscveessaxdstnasacseltsnadvast na dada dra da edad sda ee o sagas trees 73 ENTRADA E SA DA DO CONSOLE enne 75 ENTRADA E SA DA DE Dec 82 ABRINDO UM ARQUIVO ccssesecssecssesecssecssesscusessesseessescsassessecuassaessesusescsassaeesecsaccaeeseesaeeaeeeeaeaeeaas 83 FECHANDO UM ARQUIVO EE 85 ACESSO RAND MICO A ARQUIVOS FSEEK ccccsccsscsecssscsseseceaecaseseesecsaecaecsecsaccaecsecuaeeaseceaeseenes 90 OS FLUXOS PADR ES asiain iaito eenia sandea aai aeea e aasia e eiaa aaee Eaa dae Eaei NERE aE 92 ALOCA O DIN MICA DA MEMORILA 94 ESTRUTURAS n a a a RAE AM dA 96 MATRIZES DE ESTRUTURAS nnii ai i EE aA a i aaa a eaa an 97 ATRIBUINDO ESrpnuUTupag 104 ESTRUTURAS ANINHADAG n s nssssnsieeaensisiiristesisrarietarirtaiotisintintotanratintauntunistaninrnnraanrnrinna renn 112 E el 113 Documento Tutorial Linguagem C Aplicada Engenharia Page 3 of 162 SytCom Training 2014 All rights reserved 55 UNIONS eege eebe Eege Een 116 56 OPERADORES L GICOS DEET 119 57 FUN ES DE CONTROLE DA TELA raras 121 58 As FUN ES B SICAS DE MODO TEXTO
159. signed portas unsigned joystick unsigned sem uso unsigned num impressoras 2 eq Re Fa Li Fa NN Ne O programa seguinte usa este campo bit para exibir o n mero de drives de discos flex veis e o n mero de portas seriais include lt stdio h gt include lt bios h gt main struct perif unsigned boot_floppy unsigned tem_coproc unsigned ram_placa unsigned modo video unsigned drive floppy unsigned DMA unsigned portas unsigned joystick unsigned sem uso unsigned num impressoras 2 eq Re Fa Li Fa NN NR ke Documento Tutorial Linguagem C Aplicada Engenharia Page 114 of 162 SytCom Training 2014 All rights reserved int 1 i int amp eq i biosequip printf d drives n eq drive_floppy 1 0 0 1 drive printf d portas n eq portas return 0 O endere o eq atribu do ao ponteiro para inteiroi eo valor de retorno da fun o biosequip atribu do a eq por meio deste ponteiro Isto necess rio uma vez que a linguagem C nao permitir que um inteiro seja um ponteiro para uma estrutura Como se pode ver por este exemplo cada campo bit associado usando se o operador ponto Entretanto se a estrutura referenciada por meio de um ponteiro deve se usar o operador seta Nao necess rio nomear cada campo bit Isto torna f cil encontrar o bit que se quer rejeitando os nao usados Por exemplo o campo sem uso pode ser deixado sem nome como mostrado
160. struct perif unsigned boot floppy unsigned tem coproc unsigned ram placa unsigned modo video unsigned drive floppy unsigned DMA unsigned portas unsigned joystick unsigned unsigned num impressoras 2 eq Re WR EA EA NN Re Vari veis do tipo campo bit t m certas restriCOES Nao se pode obter oendere o de uma vari vel campo bit As vari veis campo bit nao podem ser colocadas em matrizes Nao se pode ultrapassar o limite dos inteiros Sea m quina usa a regra mem ria baixa byte baixo DEC e National ou mem ria baixa byte alto Intel e Motorola afeta o modo de endere amento dos campos Isto implica que qualquer c digo que usa os campos bit pode ter alguma depend ncia de m quina Pode se misturar membros normais de estruturas com elementos campos bit Por exemplo struct emp struct addr endereco float salario unsigned situacao 1 demitido ou em atividade unsigned contrato 1 horista ou mensalista unsigned deducoes 3 deducoes IR I APAS at 243 8 1 Esta estrutura define um registro de empregados que usa somente um byte para armazenar tres pedacos de informa o situa o contrato e deduCOES Sem o uso do campo bit estas informaCOES poderiam requerer 3 bytes Documento Tutorial Linguagem C Aplicada Engenharia Page 115 of 162 SytCom Training 2014 All rights reserved 55 Unions Em C uma union uma localiza o de mem ria usada por muitos tipos de vari vei
161. t main int x y clrscr Preenche a tela inteira com algumas linhas for y 1 y lt 25 y for x 1 x lt 80 x gotoxy x y printf c y 1 A getch apaga todas as linhas alternadas e insere uma linha em branco no lugar for y 2 y lt 26 y 2 gotoxy 1 y delline insline return O 59 Criando Janelas Para se criar janelas de qualquer tamanho e em qualquer lugar desde que caibam na tela usa se window void window int esquerda int acima int direita int abaixo Se alguma coordenada inv lida window nao realiza qualquer a o demonstra window include lt conio h gt include lt stdio h gt main system cls limpa a tela gotoxy 2 3 printf coord 2 3 da tela window 10 10 60 15 gotoxy 2 3 printf coord 2 3 da janela Documento Tutorial Linguagem C Aplicada Engenharia Page 124 of 162 SytCom Training 2014 All rights reserved Observe que as coordenadas usadas para chamar window sao absolutas da tela e nao relativas 4 janela correntemente ativa Isto significa que m ltiplas janelas podem ser abertas sem terem coordenadas uma relativa outra isto nao sao consideradas aninhadas No entanto uma janela pode superpor se outra janela Um programa de demonstra o de janela de texto include lt conio h gt include lt stdio h gt void borda main clrscr Desenha uma borda em volt
162. t graphics h gt int driver modo driver CGA modo CGACO um initgraph amp driver amp modo assume o arquivo CGA BGI no diret rio corrente Deixando o modo gr fico temporariamente e definitivamente include lt graphics h gt int driver modo driver CGA modo CGACO initgraph amp driver amp modo assume o arquivo CGA BGI no diret rio corrente faz algo no modo grafico restorecrtmode volta p texto temporariamente faz algo no modo texto setgraphmode modo volta ao modo grafico dado por modo faz algo no modo grafico novamente closegraph sai definitivamente do modo gr fico esvazia a mem ria do driver BGI Cores e Paletas EGA VGA O tipo de placa de video conectada ao seu sistema determina os tipos e cores dispon veis quando se est em modo grafico A tend ncia atual a linha de monitores VGA onde se incluem os EGA A CGA 4 cores d acesso a 4 cores por paleta e 4 paletas para escolher Comparado com os demais monitores o CGA de uma limita o mpar no que diz respeito a apresenta o de modo gr fico colorido Nao cobriremos cores no CGA Nos monitores EGA VGA e SVGA quando se quer estabelecer uma cor para as diversas funC ES de desenho do Turbo C sobre uma cor de fundo faz se setcolor cor d a cor do tra ado de uma fun o de desenho subsequentemente chamada setbkcolor cor de fundo d a cor
163. ta ou de prop sito especial na RAM como uma rea auxiliar buffer Se uma vari vel cont m o endere o de uma outra vari vel a primeira conhecida como um ponteiro para a segunda Essa situa o ilustrada abaixo Seja o seguinte c digo float mult 315 2 int sum 32000 char letter A equivalente a char letter 65 int set declara o ponteiro set float ptr1 set amp sum inicializa pointer set ptrl amp mult inicializa pointer ptrl O c digo anterior gera o seguinte mapa de mem ria Endere o de Valor da vari vel na mem ria mem ria decimal exceto hexadecimal indica o contr ria 3 152 E 02 mult 4 bytes Documento Tutorial Linguagem C Aplicada Engenharia Page 45 of 162 SytCom Training 2014 All rights reserved STE PA Le FA14 32000 FAIS us PAI FA14 hex FA18 FA19 FA10 hex FAIA Vari veis Ponteiro sum 2 bytes gt letter 1 byte gt Valor ASCII do caracter A set 2 bytes gt set aponta para sum gt ptrl 2 bytes gt ptrl aponta para mult Se uma vari vel vai armazenar um ponteiro ela deve ser declarada como tal Uma declara o de ponteiro consiste em um tipo base um e o nome da vari vel A forma geral para declara o de uma vari vel ponteiro tipo nome da vari vel onde o tipo pode ser qualquer tipo v lido da linguagem C e o nome da vari vel o nome da vari v
164. tcolor bcolor ecolor int noit system cls textmode 0x03 16 color text 80x25 virtual screen 640x200 mouse cursor 8x8 pixel ver tabela abaixo mouse reset init mouse wup W UP wdwn WDWN wlft WLFT HINIT bcolor BLUE ecolor LIGHTBLUE tcolor WHITE nwin 0 noit 0 while nwin lt 42 6 octaves with 7 pitch if nwin 0 wlft wrgt SPACE pos inicial prox janela na linha horiz de janelas wret wlft strlen notes noit 2 HGAP if wrgt gt 80 wup wup HEIG VGAP wdwn wdwn HEIG VGAP wlft WLFT HINIT wret wlft strlen notes noit 2 HGAP Documento Tutorial Linguagem C Aplicada Engenharia Page 143 of 162 SytCom Training 2014 All rights reserved storewincoord wlft wup wrgt wdwn amp we nwin stores window coordinates cwindow wlft wup wrgt wdwn bcolor ecolor window wlft 1 wup 1 wrgt 1 wdwn 1 textcolor tcolor gotoxy wrgt wlft 2 wdwn wup 2 cputs notes noit bcolor ecolor if abs ecolor bcolor 8 bcolor avoid edge color background color if bcolor 8 0llbcolor BLACK bcolor avoid background color BLACK nwin noit if nwin 7 0 fnoit 0 if remainder zero gt end of octave window 1 1 80 25 back to original window textcolor YELLOW cursor on do mouse position amp x amp y show mouse position gotoxy 1 25 cprintf Virtual Coords 03d 03d x y if leftb_pressed nosound
165. tdlib h gt include lt ctype h gt include lt math h gt include lt conio h gt typedef struct z a etiqueta z opcional double re double im cpx typedef struct zplus a etiqueta zplus opcional double re double im double mag double ang cpxp cpxp soma cpxp subt cpxp mult cpxp divi cpxp polar main char op sign cpx z1 z2 cpxp zout do printf nQual opera o com complexos desejada op getche while op amp amp op amp amp op amp amp op puts n nInforme dois complexos Z1 R1 j I1 e Z2 R2 j I2 entrando puts na seguinte forma R1 I1 R2 I2 scanf Golf lf Golf lf amp z1 re amp z1 im amp z2 re amp z2 im switch op case Documento Tutorial Linguagem C Aplicada Engenharia Page 107 of 162 SytCom Training 2014 All rights reserved zout soma z1 z2 break case zout subt z1 z2 break case zout mult z1 z2 break case zout divi z1 z2 break default puts Erro exit 1 if zout im lt 0 sign zout im zout im sign d o sinal da else sign parte imagin ria de zout no formato da printf printf nZ1 c Z2 lf c j lf op zout re sign zout im printf lf lt lf zout mag zout ang cpxp soma argl arg2 cpx argl arg2 Cpxp res res re argl re arg2 re res im argl im
166. ter stica importante das funCOES de janela de texto que elas nao sao redirecion veis pelo DOS nem a n vel de entrada nem a n vel de sa da Experimente redirecionar a sa da do programa anterior para um arquivo e observe a tela e arquivo use type Modos Texto O padrao PC IBM para modo de v deo uma tela com 80 colunas por 25 linhas Dependendo da placa de v deo que um computador dispoe poss vel selecionar v rios modos de v deo para texto pela fun o textmode void textmode int modo modo macro inteiro equivalente descri o BW40 0 40 col PB C40 1 40 col colorido BW80 2 80 col 16 tons cinza C80 3 80 col colorido MONO 7 80 col monocrom tico LASTMODE 1 modo anterior original Documento Tutorial Linguagem C Aplicada Engenharia Page 127 of 162 SytCom Training 2014 All rights reserved 60 Exibindo textos em cores A fun o textcolor cor muda a cor dos textos subsequentes para a cor especificada pelo argumento cor S funciona se for usada uma das funCOES de janela printf nao funciona void textcolor int cor Obs 0 lt cor lt 15 Do mesmo modo podemos definir uma cor de fundo para os textos void textbackground int cor Obs 0 lt cor lt 7 importante observar que estas funCOES s alteram sa das de texto ap s sua chamada no programa cor macro inteiro equivalente BLACK 0 BLUE 1 GREEN 2 CYAN 3 RED 4 MAGENTA 5 BROWN 6 LIGHTGREY 7 DARKGREY 8 LIGHTB
167. tf s s1 Como strepy strcat retorna um valor cujo significado ser visto adiante A fun o strempQ Uma chamada a stremp tem esta forma stremp s1 s2 A fun o stremp compara duas strings e retorna O se elas forem iguais Sesl lexicograficamente maior Exemplos BBBB gt AAAA e AAA gt X que s2 entao um numero positivo retornado se for menor que s2 um numero negativo retornado A seguinte fun o pode ser usada como uma rotina de verifica o de senha Retorna verdadeiro se a senha aceita falso caso contr rio include lt stdio h gt main char s 80 printf informe a senha gets s if stremp s senha strings diferentes printf senha invalida n return 0 a string comparada a mesma return 1 Documento Tutorial Linguagem C Aplicada Engenharia Page 35 of 162 SytCom Training 2014 All rights reserved O segredo da utiliza o da fun o stremp que ela retorna falso quando as strings sao iguais Portanto voce precisar usar o operador NOT se desejar que alguma coisa ocorra quando a string igual le strings at que se digite sair include lt stdio h gt include lt string h gt main char s 80 for CH printf Informe uma string gets s if stremp sair s break A Fun o strlen x A forma geral da chamada strlen strlen s onde s uma string A fun
168. tipo void FunCOES que nao retornam valor sem especifica o de void farao o compilador emitir warning Function should return a value Nenhuma outra consequencia haver include lt stdio h gt void imprime_vertical char str void main char alfa 80 printf Digite uma string gets alfa printf n n imprime_vertical alfa void imprime_vertical char str while str printf c n str 40 Blocos de c digo e vari veis locais void f void char ch printf continuar s n ch getche if ch s char s 80 s s criada como vari vel local de if se a resposta s printf informe o nome Obs s s conhecido dentro do bloco de if gets s processl s executa algum processo sobre a string s Chamando uma fun o por valor do argumento chamada por valor imprime o valor de pi e de pi 2 include lt stdio h gt include lt math h gt Documento Tutorial Linguagem C Aplicada Engenharia Page 64 of 162 SytCom Training 2014 All rights reserved double sgr void main void double pi M_PI printf lf Golf pi sqr pi double sqr x quando sqr chamada ela copia o valor de pi em x deixan do pi inalterado double x x x x retum x Chamando uma fun o por refer ncia ao argumento chamada por refer ncia programa p demonstra o da chamada de funC ES por refe
169. trado aqui Jogo Coura ado x Submarino include lt stdio h gt include lt stdlib h gt include lt time h gt requerido por randomize char matriz 3 3 vars globais Documento Tutorial Linguagem C Aplicada Engenharia Page 43 of 162 SytCom Training 2014 All rights reserved 1 int compX compY jogX jogY main randomize inicializa gera a semente inicial aleatoriamente o gerador de n meros rand micos compX comp Y jogX jog Y 0 for if tent_sub printf O submarino venceu n break if tent_jog Q printf O coura ado voc venceu n break exibe tabuleiro tent_sub gera o pr ximo movimento do computador usando um gerador de n meros rand micos matriz compX compY compX rand 3 comp Y rand 3 if matriz compX compY B return 1 O submarino ganhou a batalha else matriz compX compY Sr return 0 Ele nao acertou tent jog pega o pr ximo movimento do jogador matriz jogX jogY do printf Informe as novas coordenadas X Y scanf dd amp jogX amp jogY while GogX lt 0lhogX gt 2IjogY lt 0ljogY gt 2 if matriz jogX jog Y S return 1 O coura ado ganhou a batalha else matriz jogX jog Y RI return 0 Ele nao acertou exibe_tabuleiro Exibe tabuleiro do jogo printf n printf c c c n matriz 0 0 matriz 0 1 matriz
170. triz de strings Cada elemento desta matriz unidimensional aponta para um argumento digitado na linha de comando Todos os argumentos de linha de comando sao strings qualquer n meo digitado dever ser convertido por atof atoi ou atol mostra os argumentos digitados e converte p double os dados num ricos include lt stdio h gt include lt process h gt include lt math h gt necessario p atof main argc argv int argc char argv equivalente a argv int ij char flag v indica numero char str 80 printf argc d n argc for i 0 i lt arge i strepy str argv 1 copia argv i p str mas argv i poderia ser impresso printf argv d s n i str diretamente em printf como uma string printf n Convertendo para double os argumentos num ricos n n forGi 0 i lt arge i flag v forG 0 j lt strlen argv i j if isdigit argv i j amp amp argv i j amp amp tolower argv i j e flag f break if flag v double x x s6 existe neste bloco x atof argv i printf argv d lf n i x Basicamente argc e argv sao usados para se obter os argumentos iniciais para o programa a ser executado Normalmente o DOS permite at 128 caracteres na linha de comando Normalmente usa se estes argumentos para indicar um arquivo a ser lido ou escrito ou entao uma op o format a chkdsk f etc A Documento Tut
171. unda maneira de uma fun o poder retornar pelo uso da declara o return A declara o return pode ser usada sem qualquer valor associado a ela Por exemplo a seguinte fun o imprime o resultado de um Documento Tutorial Linguagem C Aplicada Engenharia Page 60 of 162 SytCom Training 2014 All rights reserved n mero elevado a uma pot ncia positiva Se o expoente negativo a declara o return faz com que a fun o termine antes que a chave final seja encontrada mas nenhum valor retornado void pot ncia int base int exp inti if exp lt 0 return nao pode calcular com expoente negativo i 1 for exp exp 0 i base i printf A resposta d i Retornando um Valor max int a int b int temp if a gt b temp a else temp b return temp Note que uma fun o retorna um valor inteiro Esse o tipo de retorno padrao de uma fun o se nenhum outro explicitamente especificado na defini o da fun o poss vel uma fun o conter duas ou mais declaraC ES return Por exemplo a fun o max melhor escrita como mostrado aqui max int a int b if a gt b return a else return b Outro exemplo de fun o que usa duas declaraCOES return a encontra_substr mostrada aqui Ela retorna o indice de in cio de uma substring dentro de uma string ou 1 se nenhuma correspond ncia encontrada Sem o uso da segunda declara o return uma vari vel t
172. volve um valor double cujo valor m ximo 1 7E308 Estamos atribuindo o retorno de n pow raio 2 vari vel float res valor m ximo 3 4E38 Portanto devemos esperar overflow da fun o area para raios maiores que 1 04E19 sgrt 3 4E38 m A fun o pow em si s acusar overflow para valores de retorno acima de 1 7E308 Obs2 A declara o dos argumentos no prot tipo antes de main opcional FunCOES que retornam ponteiros Exemplos testa correspondencia entre uma string e um caractere include lt stdio h gt char corresp main char alfa 80 char ch p int loc printf nDigite uma string gets alfa printf Digite um caractere ch getche p corresp ch alfa loc strlen alfa strlen p 1 d a localiza o da correspondencia if p printf nExiste correspondencia no d caractere loc existe correspondencia else printf nNenhuma correspondencia encontrada Retorna um ponteiro p o primeiro caractere em s que corresponde a c char corresp char c char s int count count 0 while c s count amp amp s count NO count testa igualdade e nulo if s count return amp s count se ha correspondencia retorna ponteiro else return char MI caso contr rio retorna um ponteiro nulo Documento Tutorial Linguagem C Aplicada Engenharia Page 63 of 162 SytCom Training 2014 All rights reserved FunCOES
173. ximo Esse modificador um n mero inteiro colocado entre o sinal e o c digo de comando de formato que limita o n mero de caracteres lidos para qualquer campo Por exemplo para ler nao mais do que 20 caracteres em str escreve se scanf 20s str Se o buffer de entrada contiver mais do que 20 caracteres scanf termina a leitura e s atribui a str os 20 primeiros caracteres deixando os restantes no buffer Uma chamada subsequente a scanf come ar a leitura do buffer de entrada onde ela terminou Por exemplo se digitarmos ABCDEFGHIJKLMNOPQRSTUVWXYZ em resposta chamada de scanf deste exemplo somente os 20 primeiros caracteres at T serao colocados em str Na pr xima chamada scanf serao colocadas em str a string UVWXYZ demonstra modificador de comprimento m ximo de campo de scanf include lt stdio h gt main char str 80 puts Digite abcdefghijklmnopqrstuvwxyz scanf 20s str puts str scanf 20s str o programa nao parar nesta chamada a scanf porque puts str ainda haver caracteres nao transferidos no buffer de entrada Ainda que espa os tabulaCOES e newlines Enter sejam usados como separadores de campos quando da leitura de um nico caractere esses ltimos sao lidos como qualquer outro caractere Por exemplo entrando no teclado com x y scanf c c c ca ch Sch far a x belle c y Cuidado se tivermos quaisquer outro

Download Pdf Manuals

image

Related Search

Related Contents

3-1-1 メール  『ミーナ・リラクシア・伸びの美FRP』 【後編】 (2015/8~)    LAGRANGE LIGNE ET SAVEURS  manual de regulação médica de urgência  NRS 1-50 - Gestra AG  PDFファイル  Siemens SINAMICS G110 - JS  詩毒ャナー本体について知りたいときは、付属の口8225皿 取扱説明書  

Copyright © All rights reserved.
Failed to retrieve file