Guião laboratorial n.º 1 – exercício 8
Desenvolva um função que determine em que posição de uma tabela de inteiros se encontra o elemento que regista a maior subida em relação ao elemento anterior. Esta posição deve ser devolvida como resultado. A função recebe como argumentos um ponteiro para o início da tabela e o número de elementos que esta contém. A sua declaração é a seguinte:
int maior_subida(int *tab, int dim);
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 10 int maior_subida(int *tab, int dim){ int *p, *q; p=tab; q=tab+1; int dif=0, aux2=0, valor=0,i=0; for(p=tab; p<tab+dim && q <tab+dim; p++,q++){ aux2=*p-*q; if(aux2<0) { aux2=-aux2; } printf("\n%d\t%d\t%d\t%d", i, *p, *q, aux2); if(aux2>dif){ dif=aux2; valor=i; } i++; } return valor; } int main() { int tabela[]={1,3,7,42,22,10,9,7,7,33}; int posicao; posicao=maior_subida(tabela, TAM); printf("\nPosicao da maior subira: %d", posicao); return 0; }
Guião laboratorial n.º 1 – exercício 7
Desenvolva uma função,
void procura_dupla(int a[], int tam, int *prim, int *seg);
que encontre os dois maiores elementos de um vetor de inteiros. A função recebe, como argumentos, o nome e a dimensão do vetor, e os ponteiros para as variáveis onde os dois maiores elementos devem ser armazenados.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 10 void procura_dupla(int *a, int tam, int *prim, int *seg){ int *p; p=a; int aux1=0, aux2=0; for(p=a; p<a+tam; p++){ if(*p>aux1){ aux1=*p; } } for(p=a; p<a+tam; p++){ if(*p>aux2 && *p<aux1){ aux2=*p; } } *prim=aux1; *seg=aux2; } int main() { int tabela[]={1,3,7,5,22,10,9,7,7,33}; int primeiro, segundo; procura_dupla(tabela, TAM, &primeiro, &segundo); printf("\nPrimeiro maior: %d", primeiro); printf("\nSegundo maior: %d", segundo); return 0; }
Guião laboratorial n.º 1 – exercício 6
“Desenvolva uma função que receba um tabela de inteiros positivos e o seu tamanho e verifique quantos dos elementos da tabela são pares e quantos são ímpares. Deve ainda calcular qual o maior valor presente na tabela e a posição onde ele se encontra.
Por exemplo, se o conteúdo da tabela for:
1 3 7 5 2 10 9 7 7 1
Existem 2 números pares, 8 números ímpares. O maior número é o 10 e está na posição 5.
A função recebe como argumentos um ponteiro para o início da tabela, o número de elementos que esta contém, um ponteiro para o inteiro onde deve colocar o n.º de elementos ímpares, um ponteiro para o inteiro onde deve colocar o n.º de elementos pares, um ponteiro para o inteiro onde deve colocar o maior valor armazenado na tabela e um ponteiro para o inteiro onde deve colocar a posição onde o maior valor se encontra. A sua declaração é a seguinte:
void f(int *t, int tam, int *np, int *ni, int *maior, int *pos);
”
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 10 void f(int *t, int tam, int *np, int *ni, int *maior, int *pos){ int *p; p=t; int conta_par=0, conta_impar=0, m= p[0],posicao=0, aux=0; for(p=t; p<t+tam; p++){ if(*p%2==0){ conta_par++; }else{ conta_impar++; } if(*p>m){ m=*p; } } for(p=t; p<t+tam; p++){ aux++; if(*p==m){ printf("%d %d", aux, posicao); posicao=aux; } } *np=conta_par; *ni=conta_impar; *maior=m; *pos=posicao; } int main() { int tabela[]={1,3,7,5,22,10,9,7,7,11}; int n_pares=0, n_impares=0, maior=0, posicao=0; f(tabela, TAM, &n_pares, &n_impares, &maior, &posicao); printf("\nTotal de numeros pares: %d", n_pares); printf("\nTotal de numeros impares: %d", n_impares); printf("\nO maior numero: %d", maior); printf("\nPosicao do maior numero: %d", posicao); return 0; }
Guião laboratorial n.º 1 – exercício 5
“Desenvolva uma função que verifique se uma sequência de caracteres representa um número de telefone da rede fixa PT. A sequência deve obedecer à seguinte propriedade:
– É composta por 9 caracteres, em que o primeiro representa o dígito 2 e os restantes
qualquer um dos 10 dígitos existentes.
A declaração da função é a seguinte: void verifica(char *tel, char *c);
O argumento tel aponta para o primeiro elemento da sequência de caracteres que representa o número de telefone (existe um ‘\0’ no final) e o argumento c aponta para uma variável do tipo caracter onde deve ser colocado o resultado da avaliação. Se o número de telefone analisado for válido deve aí ser colocado o caracter ‘V’. Caso contrário, deve ser colocado o caracter ‘I’.
Nota: pode utilizar a função int isdigit(char c); da biblioteca
um valor diferente de 0 se o argumento c for um caracter que represente um dígito.
”
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 9 void verifica(char *tel, char *c){ int tamanho=0; tamanho=strlen(tel); if(tel[0]=='2' && tamanho==TAM){ *c='V'; }else{ *c='I'; } } int main() { char numero[]="223456789"; char avaliacao; verifica(&numero, &avaliacao); printf("\nVericado (V)valido (I)invalido: %c ", avaliacao); return 0; }
Guião laboratorial n.º 1 – exercício 4
“Desenvolva uma função que determine quantos elementos de uma tabela de inteiros são iguais à média dos seus dois vizinhos. A função recebe como argumentos um ponteiro para o início da tabela, o número de elementos que esta contém e um ponteiro para uma variável inteira onde deve ser colocado o resultado (i.e., quantos elementos são iguais à média dos seus vizinhos). A sua declaração é a seguinte:
void vizinhos(int *tab, int dim, int *igual);
”
#include <stdio.h> #include <stdlib.h> #define TAM 10 void vizinhos(int *tab, int dim, int *igual){ float media=0; int *p, conta=0, soma=0; for(p=tab+1; p<tab+dim; p++){ soma=soma+ *p; } media=soma/dim; for(p=tab+1; p<tab+dim; p++){ if(*p==media){ conta++; } } printf("\nMedia %f ", media); *igual=conta; } int main() { int vector[]={0,1,2,3,4,5,6,7,8,9}; int resultado=0; vizinhos(vector, TAM, &resultado); printf("\nTotal de elementos iguais a media dos visizinhos %d ", resultado); return 0; }
Guião laboratorial n.º 1 – exercício 3
“Desenvolva uma função de nome calculo que receba por parâmetro dois inteiros A e B e dois ponteiros para inteiro P e Q. A função deve calcular a subtração entre os dois inteiros e colocar a diferença no local referenciado por P. Deve igualmente calcular a adição dos dois inteiros e colocar a soma no local referenciado por Q.”
#include <stdio.h> #include <stdlib.h> void calculo(int a, int b, int *p, int *q){ *p=a+b; *q=a-b; } int main() { int aa=4,bb=2, soma=0, subtracao=0; calculo(aa,bb, &soma, &subtracao); printf("a soma vem: %d e a subtracao vem %d:", soma,subtracao); return 0; }
Guião laboratorial n.º 1 – exercício 2
“Desenvolva uma função que receba, como argumentos, o nome a dimensão de uma tabela unidimensional de números inteiros e que coloque a zero todos os elementos cujo valor seja inferior à média dos elementos dessa tabela. Pode assumir que quando a função for chamada a tabela já foi inicializada.”
#include <stdio.h> #include <stdlib.h> #define TAM 10 void recebe(int *d, int t){ int *e,soma=0; float media=0; for(e=d;e<d+t;e++){ soma=soma+ *e; } printf("\nsoma: %d", soma); media=(soma/t); printf("\nmedia: %f", media); for(e=d; e<d+t;e++){ if(*e<media){ *e=0; } } } int main() { int nome[TAM]={0,1,2,3,4,5,6,7,8,9}; int *q; printf("\nAntes "); for(q=nome+0;q<nome+TAM;q++){ printf("%d ", *q); } recebe(nome, TAM); printf("\nDepois "); for(q=nome+0;q<nome+TAM;q++){ printf("%d ", *q); } return 0; }
Guião laboratorial n.º 1 – exercício 1
”
Considere o seguinte esqueleto da função main():
#include
int main()
{
int a, b, total, *p = &a, *q = &b, *r = &total;
/* completar esta secção */
}
O objetivo do programa é pedir dois números inteiros ao utilizador e guardá-los nas variáveis a, b. A seguir deve somar esses valores e guardar o resultado na variável total. Finalmente deve apresentar ao utilizador o valor da adição. Termine a implementação da função main(), sem nunca se referir explicitamente (i.e., pelo seu nome) às variáveis a, b ou total.”
#include <stdio.h> #include <stdlib.h> int main() { int a, b, total, *p = &a, *q = &b, *r = &total; printf("\nQual o valor de a: "); scanf("%d",p); printf("\nQual o valor de b: "); scanf("%d",q); *r=*p+*q; printf("\nO valor da soma: %d", *r); return 0; }
Guião laboratorial n.º 1
Tópicos da matéria:
– Noções básicas sobre ponteiros e endereços.
– Aritmética de ponteiros
– Tabelas de ponteiros para caracter.
– Argumentos da linha de comando.
Bibliografia:
K. N. King, C Programming: A Modern Approach: Capítulos 11, 12 e 13.
Guião laboratorial n.º 0 – exercício 12
“Desenvolva uma função que elimine os espaços em branco supérfluos que poderão existir entre palavras de uma string recebida como argumento.”
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 100 void vazio(char s[TAM]){ int i,conta=0,e=0; conta=strlen(s); for(i = 0; i<conta; i++){ if(s[i] != ' ' && s[i] != '\0'){ printf("%c", s[i]); e=0; } if(e==0 && s[i] == ' '){ printf(" "); } if(s[i] == ' '){ e++; } } printf("%d", e); } int main () { char texto[TAM]="1 467 6 4 1 "; vazio(texto); return 0; }
Guião laboratorial n.º 0 – exercício 11
“Desenvolva uma função que verifique se uma string recebida como argumento armazena uma capicua. A função devolve 1 se isso se verificar ou 0 no caso contrário.”
nota: LINK
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 100 int capicua(char s[TAM]){ int i,conta=0, e=0; conta=strlen(s); for(i = 0; i<conta; i++, conta--){ if(s[i] != '\0'){ if(s[i] == s[conta-1]) { printf("\n%c - %c", s[i],s[conta-1]); }else{ e++; } } } if(e>0){ return 0; }else{ return 1; } } int main () { char texto[TAM]="1467641"; if(capicua(texto)){ printf("\ntemos capicua!"); }else{ printf("\nnao temos capicua!"); } return 0; }
Guião laboratorial n.º 0 – exercício 10
“Desenvolva uma função que, após receber uma string como argumento, escreva cada uma das palavras que a constituem numa linha separada. Considere que as palavras estão separadas por um ou mais espaços em branco, podendo também existir espaços no início e fim da frase. Se a string passada por argumento for: Hoje e Domingo!
No monitor deve surgir:
Hoje
e
Domingo!
”
#include <stdio.h> #include <stdlib.h> #define TAM 100 void comes(char s[TAM]){ int i,conta=0, e=1; conta=strlen(s); for(i = 0; i<conta; i++){ if(s[i] != ' ' && s[i] != '\0'){ printf("%c", s[i]); e=0; } if(e==0 && s[i] == ' '){ printf("\n"); } if(s[i] == ' '){ e++; } } } int main () { char texto[TAM]=" Ola vamos programar! "; comes(texto); return 0; }
Guião laboratorial n.º 0 – exercício 9
“Desenvolva uma função que receba uma string como argumento (i.e., um vetor contendo uma sequência de caracteres terminada com ‘\0’) e que a escreva invertida no monitor. Se a string passada por argumento for: Hoje e Domingo! No monitor deve surgir: !ognimoD e ejoH
”
#include <stdio.h> #include <stdlib.h> #define TAM 100 void inverter(char s[TAM]){ int i,conta=0,aux2=0; char aux[TAM]; conta=strlen(s); aux2=conta; for(i = conta-1, aux2=0; i>=0; i--, aux2++){ aux[aux2]=s[i]; conta--; } aux[aux2]= '\0'; printf("%s\n", aux); } int main () { char texto[TAM]="Ola viva programar!"; inverter(texto); return 0; }
+ajudas: LINK
Guião laboratorial n.º 0 – exercício 8
“Um quadrado mágico é uma matriz 3×3 contendo valores entre 1 e 9 (sem repetições), de tal forma que a soma dos elementos de qualquer uma das linhas, colunas e diagonais é sempre igual. A figura seguinte mostra um exemplo de um quadrado mágico:
6 1 8
7 5 3
2 9 4
desenvolva uma função que verifique se uma matriz 3×3 passada como argumento é um quadrado mágico. A função devolve 1 se isso se verificar ou 0 no caso contrário.”
#include <stdio.h> #include <stdlib.h> #define LINHAS 3 #define COLUNAS 3 #define TAM 9 int quadradomagico(int v[TAM]){ int i,j, conta=0, vector[LINHAS][COLUNAS]; //preencher e mostrar for(i=0; i<LINHAS ; i++){ for(j=0; j<COLUNAS && conta < 10; j++){ vector[i][j]=v[conta]; conta++; }} printf("\n conta %d\n", conta); for(i=0; i<LINHAS; i++){ for(j=0; j<COLUNAS; j++){ printf("%d",vector[i][j]); } printf("\n"); } return 0; } int main () { int dados[TAM]={6,1,8,7,5,3,2,9,4}; quadradomagico(dados); return 0; }
Guião laboratorial n.º 0 – exercício 7
“Desenvolva uma função que preencha uma matriz 10×3 da seguinte forma: em cada uma das linhas, a primeira coluna deve ficar com um inteiro entre 1 e 100 introduzido pelo utilizador, a segunda coluna com o quadrado deste valor e a terceira com o cubo. Durante o preenchimento deve garantir que não existem repetições nos valores da primeira coluna. Antes de terminar, a função deve apresentar o conteúdo completo da matriz no monitor e indicar quantas posições têm valores superiores a 1000.”
#include <stdio.h> #include <stdlib.h> #include <math.h> #define LINHAS 10 #define COLUNAS 3 void matrix(){ int vector[LINHAS][COLUNAS]; int conta=0, aux=0, i, verifica=0, superiroes=0; //preencher a primeia coluna do{ printf("\nIntroduza o %d de %d: ", conta, LINHAS); scanf("%d", &aux); vector[conta][0]=aux; for(i=0; i<=conta; i++){ if(aux==vector[i][0]){ verifica++; } } if(verifica<2){ vector[conta][1]=vector[conta][0]*vector[conta][0]; vector[conta][2]=vector[conta][0]*vector[conta][0]*vector[conta][0]; printf("\nvalor v: %d foi inserido e (^2)%d e (^3)%d",vector[conta][0],vector[conta][1],vector[conta][2]); conta++; verifica=0; }else{ verifica=0; } }while(conta<10); for(i=0; i<LINHAS; i++){ printf("\n%d \t%d \t%d",vector[i][0],vector[i][1],vector[i][2]); if(vector[i][0] >1000){ superiroes++; } if(vector[i][1] >1000){ superiroes++; } if(vector[i][2] >1000){ superiroes++; } } printf("\n\ntotal de numeros maiores que 1000: %d", superiroes); } int main () { matrix(); return 0; }
Guião laboratorial n.º 0 – exercício 6
“Desenvolva uma função que calcule e devolva o desvio padrão de um conjunto de valores inteiros indicados pelo utilizador. A função recebe como argumento o número de valores a considerar. O desvio padrão de um conjunto de N valores (x1, x2, …, x) é calculado através da seguinte fórmula, em que X representa a média dos valores:”
#include <stdio.h> #include <stdlib.h> #include <math.h> #define TAM 10 float desvio_padrao(int v[TAM], int e){ float desviop=0; float media=0,somatorio=0,aux=0; int soma=0, i=0; for(i=0; i<e; i++ ){ soma=soma+v[i]; } media=soma/e; for(i=0; i<e; i++ ){ somatorio=somatorio+((float)v[i]-media)*((float)v[i]-media); } aux=somatorio/e; desviop=sqrt(aux); return desviop; } int main () { int vector[TAM]; int elementos,i; printf("Quantos elementos tem o conjunto (max %d):", TAM); scanf("%d",&elementos); if(elementos<TAM){ for(i=0; i<elementos;i++){ printf("\nQual o numero do conjunto para a posicao %d: ", i); scanf("%d", &vector[i]); } printf("\a\no desvio padrao vem: %f", desvio_padrao(vector, elementos)); }else{ printf("nao foi possivel calcular"); } return 0; }
coisas a ler sobre videojogos
Gostava de ter acesso a:
Game AI Pro 2: Collected Wisdom of Game AI Professionals – LINK
Is Playing Video Games Related to Cognitive Abilities? – LINK
Video games as civilizational configurations – LINK
Playing With The Past: Digital Games and the Simulation of History – LINK
Vários sobre videojogos – LINK
A ler:
U.S. Department of Education: The future of education includes video games in classrooms – LINK
Guião laboratorial n.º 0 – exercício 5
“Desenvolva uma função que encontre o segundo maior elemento armazenado num vetor de inteiros. A função recebe como argumentos o nome e a dimensão do vetor. Devolve como resultado o segundo maior valor existente no vetor. Pode assumir que o vetor recebido não contém elementos repetidos.”
#include <stdio.h> #include <stdlib.h> #define TAM 10 int funcao1(int v[TAM], int t){ int maior=v[0],maior2=v[0]; int vector_sem_maior[TAM]; int i; //vou procurar o maior for(i=0; i<t; i++){ if(v[i]>maior) { maior=v[i]; } } //vou preencher um vetor auxilar sem o maior for(i=0; i<t; i++){ if(v[i]!=maior) { vector_sem_maior[i]=v[i]; }else{ vector_sem_maior[i]=0; } } //vou procurar o segundo maior for(i=0; i<t; i++){ if(vector_sem_maior[i]>maior2) { maior2=vector_sem_maior[i]; } } return maior2; } int main() { int vector[TAM]={0,1,20,3,4,5,6,7,8,29}; printf("o segundo maior vem: %d", funcao1(vector, TAM)); return 0; }
Guião laboratorial n.º 0 – exercício 4
“Desenvolva uma função que descubra qual o elemento que surge mais vezes num vetor de inteiros. A função recebe como argumentos o nome e a dimensão do vetor. Devolve como resultado o elemento mais comum do vetor (i.e., o que surge mais vezes). Se existirem vários elementos mais comuns, a função deve devolver o maior deles. ”
#include <stdio.h> #include <stdlib.h> #define TAM 10 int funcao1(int v[TAM], int t){ int i,j,conta=0; //para guardar a informação acerca das repetições int aux[TAM]; int maior=0; int omaisC=aux[0]; int posicao_m=0; for(i=0; i<TAM; i++){ for(j=0; j<TAM; j++){ if(v[i]==v[j]){ conta++; } } aux[i]=conta; printf("%d ", aux[i]); conta=0; } for(i=0; i<TAM; i++){ if(aux[i]>maior) { maior=aux[i]; posicao_m=i; } } printf("\no maior vem na posicao do vetor %d ", posicao_m); omaisC=v[posicao_m]; return omaisC; } int main() { int vector[TAM]={1,1,12,12,4,10,10,10,9,9}; printf("\a \no mais comum vem: %d", funcao1(vector, TAM)); return 0; }
Guião laboratorial n.º 0 – exercício 3
“Desenvolva uma função que conte quantas vezes surge o maior elemento num vetor de inteiros. A função recebe como argumentos o nome e a dimensão do vetor. Devolve como resultado o número de vezes que o maior elemento surge no vetor.”
#include <stdio.h> #include <stdlib.h> #define TAM 10 int funcao1(int v[TAM], int t){ int maior=v[0]; int total=0; int i; for(i=0; i<t; i++){ if(v[i]>maior) { maior=v[i]; } } for(i=0; i<t; i++){ if(v[i]==maior) { total=total+1; } } return total; } int main() { int vector[TAM]={0,1,25,3,4,25,20,7,8,27}; printf("o maior vem: %d", funcao1(vector, TAM)); return 0; }
Guião laboratorial n.º 0 – exercício 2
“Desenvolva uma função encontre o maior elemento armazenado num vetor de inteiros. A função recebe como argumentos o nome e a dimensão do vetor. Devolve como resultado a posição em que se encontra o maior valor existente no vetor. Se o maior valor surgir várias vezes no vetor, a função devolve a primeira posição em que ele ocorre.”
#include <stdio.h> #include <stdlib.h> #define TAM 10 int funcao1(int v[TAM], int t){ int maior=v[0]; int posicao=0; int i; for(i=0; i<t; i++){ if(v[i]>maior) { maior=v[i]; posicao = i; } } return posicao; } int main() { int vector[TAM]={0,1,20,3,4,25,20,7,8,9}; printf("o maior vem: %d", funcao1(vector, TAM)); return 0; }
Guião laboratorial n.º 0 – exercício 1
“Desenvolva uma função que encontre o maior elemento armazenado num vetor de inteiros. A
função recebe como argumentos o nome e a dimensão do vetor. Devolve como resultado o maior
valor existente no vetor.”
#include <stdio.h> #include <stdlib.h> #define TAM 10 int funcao1(int v[TAM], int t){ int maior=v[0]; int i; for(i=0; i<t; i++){ if(v[i]>maior) { maior=v[i]; } } return maior; } int main() { int vector[TAM]={0,1,20,3,4,5,6,7,8,9}; printf("o maior vem: %d", funcao1(vector, TAM)); return 0; }