Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o...
Transcript of Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o...
![Page 1: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/1.jpg)
Funções
![Page 2: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/2.jpg)
2MF.
Introdução às funções
Exercício: Escreva um programa que coloque no ecrã o seguinte output:
******************** escrever 20 asteriscosNúmeros entre 1 e 5********************12345********************
![Page 3: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/3.jpg)
3MF.
Introdução às funções#include<stdio.h>
main(){
int i;
for (i=1; i<=20; i++)putchar('*');
putchar('\n');
puts("Números entre 1 e 5");
for (i=1; i<=20; i++)putchar('*');
putchar('\n');
for (i=1; i<=5; i++)printf("%d\n",i);
for (i=1; i<=20; i++)putchar('*');
putchar('\n');}
Código repetido
![Page 4: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/4.jpg)
Solução???
![Page 5: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/5.jpg)
5MF.
Tipo de funções
Funções Pré-definidas pela linguagem (funções de biblioteca)
Funções Definidas pelo programador
![Page 6: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/6.jpg)
6MF.
Funções definidas pelo utilizador
Reduzir a complexidade de um programa
Evita-se a repetição de código ao longo do programa
Têm de ter um nome único
A localização da função é indiferente desde que coloque o protótipo (cabeçalho) da função antes da função main()
![Page 7: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/7.jpg)
7MF.
Funções
SINTAXEEspecificador_de_tipo nome_da_função ( lista de parâmetros )
{
corpo da função
}
Especificador_de_tipo - especifica o tipo de valor que o comando return da função devolve, podendo ser qualquer tipo válido.
nome_da_função - é um identificador escolhido pelo programador que não se deve repetir.
lista de parâmetros - é uma lista de nomes de variáveis separadas por virgulas e seus tipo, que recebem os valores dos argumentos quando a função é chamada.
![Page 8: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/8.jpg)
8MF.
Funçõescorpo da função - é constituído por instruções de C de acordo com a
sintaxe da linguagem. Em C não se podem definir funções dentro de funções.
tem de estar imediatamente a seguir ao cabeçalho da função e é escrito entre chavetas
sempre que uma função é invocada pelo programa, o corpo da função é executado, instrução a instrução, até terminar o corpo da função ou até ser encontrada uma instrução return.
![Page 9: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/9.jpg)
9MF.
FunçõesResolução do programa anterior recorrendo às funções
#include<stdio.h>linha(){
int i;for (i=1; i<=20; i++)
putchar('*');putchar('\n');
}main(){ int i;
linha();puts("Números entre 1 e 5");
linha();for (i=1; i<=5; i++)
printf("%d\n",i);linha();
}
![Page 10: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/10.jpg)
10MF.
Características de uma função
Cada função tem que ter um nome único, o qual serve para a sua invocação algures no programa a que pertence;
Uma função pode ser invocada a partir de outras funções;
Uma função deve realizar uma única tarefa bem definida;
Uma função deve comportar-se como uma caixa negra. Não interessa como funciona, o que interessa é que o resultado final seja o esperado, sem efeitos colaterais;
![Page 11: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/11.jpg)
11MF.
Características de uma função
O código de uma função deve ser o mais independente
possível do resto do programa, e deve ser tão genérico
quanto possível, para poder ser reutilizado noutros
projectos.
Uma função pode receber parâmetros que alterem o seu
comportamento de forma a adaptar-se facilmente a
situações distintas;
Uma função pode retornar, para a entidade que a
invocou, um valor como resultado da sua execução.
![Page 12: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/12.jpg)
12MF.
Funções - notas
se nenhum tipo é especificado, o compilador assume que a função devolve um resultado inteiro (int)
uma função pode não ter parâmetros e neste caso a lista de parâmetros é vazia.
todos os parâmetros da função devem incluir o tipo e o nome da variável.
![Page 13: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/13.jpg)
13MF.
Passar parâmetros à função
Passagem de parâmetros por valor - uma cópia do argumento é passada para a função
O parâmetro comporta-se como uma variável local
……………printf("Introduza o valor de x e N\n\n");scanf("%d%d",&x,&n);Y = 2* soma(x , n)/ soma (x , n);……………
int expressao (int a, int b){ return a+b;}
argumentos
parâmetros
Livro Pág. 166
![Page 14: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/14.jpg)
14MF.
Passar parâmetros à função
#include <stdio.h> #include <math.h>
char minusculo (char ch);
main ( ){ printf (" %c", minusculo ('A') ); }
char minusculo (char ch){ if (( ch >= 'A') && (ch <= 'Z'))
return (ch + 'a'- 'A'); else return (ch);}
![Page 15: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/15.jpg)
15MF.
Passar parâmetros à função - exercício
void main ( ){ int num, b; printf (“ Digite um valor”); scanf (“ %d”, &num ); printf (“ Valor absoluto de num é %d”, abs(num) );}
int abs (int x){ return ( ( x < 0 ) ? -x : x );}
Efectuar um programa para achar o valor absoluto de um número:
![Page 16: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/16.jpg)
16MF.
Passando vários argumentos
Ex 1:float área_retângulo (float
largura, float altura){ return (largura * altura);
}
Ex 2:float potência (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base return resultado;
}
![Page 17: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/17.jpg)
17MF.
Funções Resolução para a seguinte expressão:
1º Verificar o que de repete? Leitura de variáveis x, a, b Somas x+a e x+b
2º pensar na funções Função para ler Função para somar
bx
a)(x*2y
![Page 18: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/18.jpg)
18MF.
Funções – Exemploint ler( )
{
int valor;
puts("Qual o valor: ");
scanf("%d",&valor);
return valor;
}
int soma (int a, int b)
{
return a+b;
}
Agora é só aplicar as funções na expressão na função main()
bx
a)(x*2y
![Page 19: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/19.jpg)
19MF.
Funções – Exemplo
bx
a)(x*2y
#include <stdio.h> #include <math.h>
int ler();int soma (int a, int b);
void main ( ){ int x; float y;
x=ler(); y= 2 * soma( x,ler()) / sqrt( soma(x,ler()) ); printf("O valor y é %4.2f",y);}
![Page 20: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/20.jpg)
20MF.
#include <stdio.h> #include <math.h>
int ler(); int soma (int a, int b);
void main ( ){ int x; float y;
x=ler(); y= 2 * soma( x,ler()) / sqrt( soma(x,ler()) ); printf("O valor y é %4.2f",y);}
int ler( ){ int valor; puts("Qual o valor: "); scanf("%d",&valor); return valor;}
int soma (int a, int b){ return a+b; }
![Page 21: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/21.jpg)
Procedimentos “Funções” que não retornam valores retornam void #include <stdio.h> void desenha();main ( ){ desenha ( ); puts (“\n1ª função”); desenha ( );}void desenha( ){ int i; for (i = 0; i < = 10; i++)
printf (“*”);}
Output
**********1ª função**********
![Page 22: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/22.jpg)
Funções
Retornam valores#include <stdio.h>int fatorial (int);int fatorial (int n){ int i, resultado = 1; for ( i = 1; i <= n; i ++)
resultado *= i; return resultado;} main ( ){ printf (“ o fatorial de 4 = %d”, fatorial(4) ); printf (“ o fatorial de 3 = %d”, fatorial(3) );}
![Page 23: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/23.jpg)
23MF.
Variáveis locais
Variáveis declaradas dentro de uma função são denominadas locais e apenas podem ser usadas dentro do próprio bloco
São criadas apenas na entrada do bloco e destruídas na saída (automáticas)
![Page 24: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/24.jpg)
Variáveis Locais
void desenha ( ){ int i, j; . . .}
main ( ){
int a; desenha();
a = i; erro
. . .}
void desenha ( ){ int i, j; . . . . . .}void calcula ( ){ int i, j; . . . . . .}
i, j em desenha são variáveis diferentes de i, j em calcula.
![Page 25: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/25.jpg)
25MF.
Variáveis Globais
Variável que é declarada externamente podendo ser acedida por qualquer função
#include <stdio.h>main ( ){ int i; ......... .........desenha ( );calcula ( );}
void desenha ( ){ int j; i = 0; . . .} void calcula ( ){ int m; i = 5; . . .}
![Page 26: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/26.jpg)
26MF.
Comando Return
Permite a atribuição de uma expressão a uma função e
força o retorno imediato ao ponto de chamada da função. #include <stdio.h>main ( ){ char letra; printf (“Letra minúscula”); letra = minúsculo ( ); if (letra == ‘a’) printf (“ok”);}
char minúsculo ( ){ char ch;
scanf(“%c”, ch); if ( (ch >= ‘A’) && (ch <= ‘Z’)) return (ch + ‘a’ - ‘A’); else return (ch);}
![Page 27: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/27.jpg)
27MF.
Note pelo exemplo anterior que a função minúsculo lê um valor internamente convertendo-o para minúsculo.
Como usar esta função se já temos uma letra e
desejamos convertê-la para minúsculo?
![Page 28: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/28.jpg)
Exercício prático
S(x, n) = x/1! + x2/2! + x3/3! + ... + xn/ n!
#include <stdio.h>float serie (float , int );float potencia (float , int) int fat (int);void main( ){ float x; int termos;
printf(“Numero de termos: “); scanf(“%d”, &termos); printf(“valor de X: “); scanf(“%f”, &x); printf(“O valor da série = %f “, serie(x, termos));}
![Page 29: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/29.jpg)
float potencia (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base; return resultado;}
float serie (float x, int n){ int i; float resultado = 0; for ( i = 1; i <= n; i++) resultado += potência( x, i ) / fat( i ); return resultado;}
![Page 30: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/30.jpg)
int fat (int n)
{
int i, resultado = 1;
for ( i = 1; i <= n; i ++)
resultado *= i;
return resultado;
}
![Page 31: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/31.jpg)
31MF.
#include <stdio.h>float serie (float x, int n);float potencia (float base, int expoente) int fat (int n);void main( ){ float x; int termos;
printf(“Numero de termos: “); scanf(“%d”, &termos); printf(“valor de X: “); scanf(“%f”, &x); printf(“O valor da série = %f “, serie(x, termos));}
float serie (float x, int n){ int i; float resultado = 0; for ( i = 1; i <= n; i++) resultado += potência( x, i ) / fat( i ); return resultado;}
float potencia (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base; return resultado;}
int fat (int n){ int i, resultado = 1; for ( i = 1; i <= n; i ++)
resultado *= i; return resultado;}
![Page 32: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/32.jpg)
32MF.
Passando um vetor para uma função
#include <stdio.h>
int maximum( int [] ); /* ANSI function prototype */
main( )
{
int values[5], i, max;
printf("Entre com 5 numeros:\n");
for( i = 0; i < 5; ++i )
scanf("%d", &values[i] );
max = maximum( values );
printf("\nValor Maximo: %d\n", max );
}
![Page 33: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/33.jpg)
33MF.
int maximum( int values[5] ) { int max_value, i; max_value = values[0]; for( i = 0; i < 5; ++i ) if( values[i] > max_value ) max_value = values[i]; return max_value; }
Saída: Entre com 5 numeros: 7 23 45 9 121Valor Maximo: 121
![Page 34: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/34.jpg)
34MF.
Matrizes
em ‘C’ podemos definir um vetor em que cada posição temos um outro vetor (matriz).
estrutura de dados homogênea multidimensional Note:
int matéria [ 4 ] [ 40 ];
temos 4 matérias, cada uma com 40 alunos
![Page 35: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/35.jpg)
35MF.
Matrizes - Leitura
int i, j, matéria [ 4 ] [ 40 ];
for ( i = 0 ; i < 4; i++ ) {
printf (“entre com as notas da matéria %d”, i+1);
for ( j = 0; j < 40; j++) {
printf (“entre com a nota do aluno %d”, j+1);
scanf (“%d”, &materia [ i ] [ j ]);
}
}
![Page 36: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/36.jpg)
36MF.
Variável String
matriz do tipo char terminada pelo caractere null ‘\0’ cada caractere de um string pode ser acessado
individualmente vetor de tamanho n string de tamanho ( n-1 )
Ex: char string[10] = “exemplo” ;
char string[10] = { “exemplo” }; char string[10] = { ‘e’, ‘x’, ‘e’, ‘m’, ‘p’, ‘l’, ‘o’, ‘\0’ };
printf ( “%s”, string ); printf ( “%c”, string [ 0 ] );
![Page 37: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/37.jpg)
37MF.
Lendo Strings
scanf : lê o string até que um branco seja encontrado
Ex:main ( ) {
char nome[40];
printf ( “Digite seu nome: “ );scanf ( “%s”, &nome[ 0 ] );//scanf ( “%s”, nome ); printf ( “Bom dia %c”, nome[0] );
}
Saída:Digite seu nome: Jose MariaBom dia Jose
![Page 38: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/38.jpg)
38MF.
Lendo Strings
Getslê caracteres até encontrar ‘\n’
substitui ‘\n’ por ‘\0’
Ex:main ( ) {
char nome[40];
printf ( “Digite seu nome: “ );gets ( &nome[ 0 ] ); // ou gets(nome);printf ( “Bom dia %s”, nome );
}
Saída:Digite seu nome: Jose Maria
Bom dia Jose Maria
![Page 39: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/39.jpg)
39MF.
Imprimindo Strings
printf puts
Ex:main ( ) {
char nome[40];
printf ( “Digite seu nome: “ );gets ( &nome[ 0 ] );puts ( “Bom dia ” ); puts ( nome );
}
Saída:Digite seu nome: Jose MariaBom dia Jose Maria
![Page 40: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/40.jpg)
40MF.
Funções de manipulação de strings
Strlenretorna o tamanho do string - não conta ‘\0’
Ex:main ( ) {
char nome[40];
printf ( “Digite seu nome: “ );gets ( &nome[ 0 ] );printf (“Tamanho = %d”, strlen(&nome[ 0 ]) );
}
Saída:Digite seu nome: Jose MariaTamanho = 10
![Page 41: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/41.jpg)
41MF.
Funções de manipulação de strings
strcat ( str1, str2 )concatena str2 ao final de str1
Ex:main ( ) {
char nome[40] = “Jose”, char sobrenome[30] = “Maria”;
strcat(nome, sobrenome);puts (sobrenome);puts (nome);
}
Saída:MariaJoseMariaCuidado: dado str1 + str2 tem que caber em str1
![Page 42: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/42.jpg)
42MF.
Funções de manipulação de strings
strcmp ( str1, str2 ) compara dois strings retornando:
– negativo se str1 < str2
– 0 se str1 = str2
– positivo se str1 > str2
a comparação é feita por ordem alfabética
![Page 43: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/43.jpg)
#include <stdio.h>main ( )
{char nome[40] = “Jose”;char sobrenome[30] = “Maria”;
if ( strcmp ( nome, sobrenome ) !=0) puts ( “os strings são diferentes” );else puts ( “os strings são identicos” );
}
![Page 44: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/44.jpg)
44MF.
Conversões
podemos também converter strings e números
(inteiros/fracionários) conforme desejarmos:
Exemplo: Conversão de String em Número Inteiro#include <stdio.h>main(){int i;char s[10];printf(“Digite uma sequencia de numeros com letras: “);gets(s);i = atoi(s);printf(“Numero: %d “,i);}
![Page 45: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/45.jpg)
45MF.
Ponteiros
Ponteiros, como o próprio nome diz, é um
tipo de variável que aponta para outra (de um
tipo qualquer). Na verdade um ponteiro
guarda o endereço de memória (local onde
se encontra na memória) de uma variável.
![Page 46: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/46.jpg)
46MF.
Ponteiros
int teste=20;
int *p;
p=&teste;
p irá armazenar o endereço de memória da variável teste. Ou seja, p não armazena o valor 20, mas sim o endereço de teste que, este sim, armazena o valor 20.
como chegar ao valor 20 usando a variável p?
int teste=20;int *p;
p=&teste;printf("%d\n",*p);
![Page 47: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/47.jpg)
47MF.
Ponteiros
Outro exemplo:
char algo[5] = { 5, 4, 3, 2, 1 };char *c;
c=&algo[2];
Colocamos em c o endereço do terceiro elemento de algo: c[0]=3, c[1]=2 e c[2]=1.
Se tivéssemos feito c=&algo[3], então: c[0]=2 e c[1]=1.
![Page 48: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/48.jpg)
Ponteiros
int vet_notas[50];
int *pont_notas;
pont_notas=vet_notas;
Para imprimir a primeira e a décima nota de nosso vetor, temos duas opções:
print ("A primeira nota é: %d", vet_notas[0]);
print ("A primeira nota é: %d", *pont_notas);
print ("A décima nota é: %d", vet_notas[9]);
print ("A décima nota é: %d", *(pont_notas+9));
![Page 49: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/49.jpg)
49MF.
Equivalência entre vetores e ponteiros
vet_notas[0]==*(pont_notas);
vet_notas[1]==*(pont_notas+1);
vet_notas[2]==*(pont_notas+2);
![Page 50: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/50.jpg)
50MF.
Malloc e Free
Alocação dinâmica
#include <stdio.h>
main()
{
int *notas, numero, i;
![Page 51: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/51.jpg)
Printf(“Entre com o número total de alunos\n’”);
scanf(“%d”, &numero);
notas=(int *)malloc(numero * sizeof(int));
for (i=0; i,numero; i++) {
printf(“Digite a nota do aluno %d”, i+1);
scanf(“%d”, ¬as[i]);
printf(“\n A nota do aluno %d é :%d: , i+1, notas[i]);
}
free(notas);
}
![Page 52: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/52.jpg)
52MF.
Estruturas
Uma estrutura é um conjunto de variáveis dentro de um mesmo nome. Em geral, uma variável é de um tipo específico, por exemplo, temos uma variável do tipo inteira e estamos fechados a nos referenciar aquele nome que lhe foi dado sempre por um número do tipo inteiro, logicamente. Já as estruturas, dentro de um mesmo nome podemos nos referenciar a uma gama de variáveis pré-definidas.
![Page 53: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/53.jpg)
53MF.
Estruturas
struct molde_conta
{
char nome[50];
int telefone;
float saldo ;
};
Definido o molde, devemos agora declarar a variável que utilizará desse molde:
struct molde_conta conta;
![Page 54: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/54.jpg)
54MF.
Estruturas
struct molde_conta{char nome[50];int telefone;float saldo;} conta1, conta2;
equivalente a: struct molde_conta conta1, conta2;
![Page 55: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/55.jpg)
55MF.
Estrutras - Utilização do tipo
Podemos fazer atribuição de structs, do tipo conta2 = conta, e os valores serão idênticos.
Para contar o número de caracteres de nome dentro da
estrutura conta, podemos fazer:
for (i=0,conta.nome[i],++i) ;
printf ("o nome tem -> %d letras \n",i);
![Page 56: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/56.jpg)
56MF.
Vetores de Estruturas
struct molde_conta conta[100];
conta[1].telefone=2212324; conta[1].nome=“joao carlos”; conta[1].saldo=1245.89;
conta[5].telefone=2212888; conta[5].nome=“Maria dos Santos”; conta[5].saldo=6908.79;
![Page 57: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/57.jpg)
57MF.
Arquivos - feopen( )
A função “fopen” tem duas finalidades:
- abrir uma fila de bytes
- ligar um arquivo em disco àquela fila
FILE *fopen(char *NomeArquivo, char *modo);
FILE *arquivo;
if ((arquivo = fopen(“teste”,”w”)) == NULL) {
puts(“Não posso abrir o Arquivo teste.\n”);
exit(1); /* força o término da execução da rotina */
}
![Page 58: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/58.jpg)
Modo Significado “r” Abre Arquivo de Texto para Leitura “w” Cria Arquivo de Texto para Gravação “a” Anexa a um Arquivo de Texto “rb” Abre Arquivo Binário para Leitura “wb” Cria Arquivo Binário para Gravação “ab” Anexa a um Arquivo Binário “r+” Abre Arquivo de Texto para Leitura/Gravação “w+” Cria Arquivo de Texto para Leitura/Gravação “a+” Abre ou Cria Arquivo de Texto para Leitura/Gravação “r+b” Abre Arquivo Binário para Leitura/Gravação “w+b” Cria Arquivo Binário para Leitura/Gravação “a+b” Abre ou Cria Arquivo Binário para Leitura/Gravação
![Page 59: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/59.jpg)
59MF.
Arquivos - putc ( )
Grava caracteres em fila previamente abertos
int putc(int ch, FILE *fp);
ch é o caracter a ser gravadofp é o ponteiro devolvido por fopen
putc(‘a’, arquivo);
![Page 60: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/60.jpg)
60MF.
Arquivos - getc ( )
Ler caracteres em uma fila aberta
int getc(FILE *arquivo);
Exemplo:
ch = getc(arquivo);
while (ch != EOF)
ch = getc(arquivo);
![Page 61: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/61.jpg)
61MF.
Arquivos - fclose ( )
Fechar as filas abertas. Caso o programa seja encerrado sem que as filas sejam fechadas, dados gravados nos buffers podem ser perdidos.
int fclose(FILE *fp);
fclose(arquivo);
![Page 62: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/62.jpg)
main(){FILE *arq;char ch;if ((arq=fopen(“teste.dat”,”w”)) == NULL) {
printf(“Arquivo não pode ser criado\n”);
exit(1); }do{
ch=getchar();putc(ch,arq);
}while (ch!=0);fclose(arq);}
![Page 63: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/63.jpg)
63MF.
Arquivos - ferror ( )
Determina se a operação de arquivo produziu um erro. Sua forma geral será:
int ferror(FILE *fp);
![Page 64: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/64.jpg)
64MF.
Arquivos - rewind( )
Reinicia o arquivo, equivale ao Reset do Pascal, ou seja apenas movimenta o ponteiro do arquivo para seu início.
![Page 65: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/65.jpg)
65MF.
Arquivos - fwrite ( ) fread ( )
Permitem que leiamos/gravemos blocos de dados, sua forma geral é a seguinte:
int fread(void *buffer, int num_bytes, int cont,
FILE *fp);
int fwrite(void *buffer, int num_bytes, int cont,
FILE *fp);
![Page 66: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/66.jpg)
Arquivos - fwrite ( )
main()
{
FILE *fp;
float f = 12.23;
if ((fp=fopen(“teste”,”wb”)) == NULL) {
printf(“Arquivo não pode ser criado\n”);
exit(1);
}
fwrite(&f,sizeof(float(),1,fp);
fclose(fp);
}
![Page 67: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/67.jpg)
67MF.
Arquivos - fseek ( )
Entrada e saída com acesso aleatórioint fseek(FILE *fp, long int num_bytes, int origem);
fp - é o ponteiro de arquivo devolvido por fopen().num_bytes - é um inteiro longo que representa o número
de bytes desde a origem até chegar a posição corrente.
OBS: Este comando é normalmente utilizado em arquivos binários.
![Page 68: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/68.jpg)
Exemplo : Leitura de um caracter em um arquivo binário.
main()
{
FILE *fp;
if ((fp=fopen(“teste”,”rb”)) == NULL) {
printf(“Arquivo não pode ser aberto\n”);
exit(1);
}
fseek(fp,234L,0); /* L força que seja um inteiro longo */
return getc(fp); /* lê o caracter 234 */
}
![Page 69: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/69.jpg)
carga(){FILE *fp;int i;if ((fp=fopen(“LISTA.DAT”,”rb”)) == NULL) {puts(“Falha na Abertura do Arquivo!”);return;
}inicia_matriz();for (i=0; i < 100; i++)if (fread(&matriz[i], sizeof(struct registro), 1, fp) != 1) {
if (feof(fp)) {fclose(fp);return;
}else {
puts(“Erro de Leitura! “);fclose(fp);
return; } } }
Exemplo de montagem de um pequeno cadastro de nomes, endereços e salários de funcionários em arquivo.
![Page 70: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/70.jpg)
salvar()
{
FILE *fp;
int i;
if ((fp=fopen(“LISTA.DAT”,”wb”))==NULL) {
puts(“Falhou Abertura! “);
return;
}
for (i=0;i<100;i++)
if (*matriz[i].nome)
if(fwrite(&matriz[i],
sizeof(struct registro), 1,fp) != 1)
puts(“Falha na Gravacao! “);
fclose(fp);
}
![Page 71: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/71.jpg)
Vamos supor que desejamos criar um programa que escreva num arquivo cujo nome será fornecido na chamada do programa
(Exemplificando: KTOD TESTE <Enter>).
Gostaríamos que o DOS criasse o arquivo TESTE guardando o conteúdo digitado durante a execução do programa.
![Page 72: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/72.jpg)
main(argv,argc)
onde
argc - tem o número de argumentos contidos nas linha de comando (necessariamente maior ou igual a um, pois o próprio programa já é considerado um argumento pelo D.O.S.).
argv é um ponteiro que acomodará os caracteres digitados.
![Page 73: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/73.jpg)
Exemplo 1: Programa KTOD, que escreve caracteres num arquivo criado/aberto via D.O.S.
#include “stdio.h”
main(argc,argv)
int argc;
char *argv[];
{
FILE *fp;
char ch;
if (arg != 2) {
printf(“Digite o Nome do Arquivo\n”);
exit(1);
}
![Page 74: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/74.jpg)
if ((fp=fopen(argv[1],”w”)) == NULL) {
printf(“Arquivo não pode ser aberto\n”);
exit(1);
}
do {
ch = getchar();
putc(ch,fp);
} while( ch != ‘$’);
fclose(fp);
}
![Page 75: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/75.jpg)
Exemplo 2: Programa DTOV, que apresenta em vídeo os
caracteres digitados via KTOD.
#include “stdio.h”main(argc,argv)int argc;char *argv[];{FILE *fp;char ch;if (arg != 2) {
printf(“Digite o Nome do Arquivo\n”);exit(1);
}if ((fp=fopen(argv[1],”r”)) == NULL) {
printf(“Arquivo não pode ser aberto\n”);exit(1);}
ch = getc(fp);
![Page 76: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/76.jpg)
do {putchar(ch);ch=getc(fp);
} while( ch != ‘$’);fclose(fp);}
![Page 77: Funções. 2MF. Introdução às funções Exercício: Escreva um programa que coloque no ecrã o seguinte output: ******************** escrever 20 asteriscos.](https://reader034.fdocumentos.com/reader034/viewer/2022051820/552fc119497959413d8c93e7/html5/thumbnails/77.jpg)
Exemplo 3: Programa para copiar Arquivos.
#include “stdio.h”main(argc,argv)int argc;char *argv[];{FILE *in, *out;char ch;if (arg != 3) {
printf(“Digite o Nome dos Arquivos\n”);exit(1);}
if ((in=fopen(argv[1],”rb”)) == NULL) {printf(“Arquivo origem não existe\n”);exit(1);}
if ((out=fopen(argv[2],”wb”)) == NULL) {printf(“Arquivo destino não existe\n”);exit(1);}
while (! feof(in)) putc(getc(in),out); /* esta é a cópia propriamente dita */
fclose(in);fclose(out);}