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; }
o inicio
Como funciona o blender:
Tutoriais ou ajudas online:
http://www.blender.org
Permite os downloads do Blender para todas as plataformas
http://www.blenderart.org
É um repositório de modelos e apresenta técnicas de uso do Blender
http://graphicall.org/builds
Poderá ajudar com correcção de erros
Videojogos software
Se consultarmos a wikipedia (LINK) verificamos que existe uma lista extensa de software para desenvolver videojogos, algumas mais “programáveis” do que outras, isto é, com necessidade de conhecimento de programação de alguma linguagem de programação para conseguir fazer qualquer coisa :) Contudo já existem no mercado várias opções do género do flash e outras, onde a programação pode ficar para segundo plano já que não é necessário sequer a usar :)
blender – http://www.blender.org/
construct 2 – https://www.scirra.com/construct2
Gamesalad – http://gamesalad.com/
stencyl – http://www.stencyl.com/
UDK:Unreal Development Kit – https://www.unrealengine.com/
Unity 3D – http://unity3d.com/