Você está na página 1de 19

Módulo 4 – Estruturas de

Dados Estática

Disciplina:Programação e
Sistemas de Informação

DESENVOLVIDO POR
CÉSAR PINTO
E
BRUNO MACHADO
2

Introdução
Com este trabalho queremos fazer inovações no 1 tgpsi e achamos que
conseguimos , apresentamos as funções strings , vetores e uma grande
surpresa
3

Strings
Na programação de computadores, uma cadeia de caracteres ou string é
uma sequência de caracteres, geralmente utilizada para representar
palavras, frases ou textos de um programa.

Pode ser observado na imagem seguinte um programa que foi


construído utilizando uma função de STRINGS neste caso foi utilizado
a função denominada por “STR_SIZE”.

Passo a explicar, o objetivo desta função é retornar o tamanho de


caractere apropriado para tornar uma string especificada em uma largura
especificada em uma janela. A largura é especificada em coordenadas
normalizadas. A função é extremamente útil para dimensionar strings e
rótulos em janelas gráficas redimensionáveis.
4

Por muito complicado que este


programa parece ser, ele realiza uma
função muito simples.

Simplesmente compara a string1 e a


string2, e verifica se estas estão
igualmente escritas

Passemos para a próxima função


string a “STRPBRK”.

Esta função encontra o primeiro


caractere na string s1 que
corresponde a qualquer caractere
especificado em s2

Como pode ser observado na


imagem aqui ao nosso lado, foi
construído um programa utilizando
essa denominada função.

Este programa inicia pedindo


caracteres para poder encontrar
na segunda string, logo de seguida
termina demonstrando o que
encontrou do que foi pedido pelo
utilizador.
5

Array unidimensionais( vetores)


#include <stdio.h>
#include <stdlib.h>

/*

Código escrito por César Pinto


Março de 2021
*/

typedef struct{
int dia, mes, ano;
}DataNas;

typedef struct{
DataNas dataNas;
int idade;
char sexo;
char nome[100];
}Pessoa;

// Procedimento para imprimir os dados de uma Pessoa


void imprimirPessoa(Pessoa p){
printf("\n\tNome: %s", p.nome);
printf("\tIdade: %d\n", p.idade);
printf("\tSexo: %c\n", p.sexo);
printf("\tData de nas.: %d/%d/%d\n\n", p.dataNas.dia,
p.dataNas.mes, p.dataNas.ano);
}

// função que lê os dados de uma pessoa e retorna para quem


chamou
Pessoa lerPessoa(){
Pessoa p;
printf("\nDigite seu nome: ");
fgets(p.nome, 100, stdin);
printf("Digite sua idade: ");
scanf("%d", &p.idade);
scanf("%c");
printf("Digite f ou m para o sexo:");
scanf("%c", &p.sexo);
printf("Digite sua data de nascimento no formato dd mm
aaaa:");
6

scanf("%d%d%d", &p.dataNas.dia, &p.dataNas.mes,


&p.dataNas.ano);
scanf("%c");
return p;
}

int main() {
int i;
Pessoa pessoas[3];

for(i = 0; i < 3; i++)


pessoas[i] = lerPessoa();

for(i = 0; i < 3; i++)


imprimirPessoa(pessoas[i]);

return 0;

Os arrays são estruturas de dados que podem armazenar mais que um


valor de um mesmo tipo de dado.

Enquanto uma variável somente consegue armazenar um único valor, um


array pode armazenar um conjunto de valores.

Em linguagem C os arrays são implementados como variável ponteiro. Isso


significa que eles não se comportam como variáveis e sim como um
ponteiro.

Existem dois tipos de arrays: vetores e matrizes.

Os vetores são arrays unidimensionais e as matrizes são arrays


multidimensionais.

Sendo arrays unidimensionais, os vetores funcionam como arranjos de


valores de um mesmo tipo de dado.
Podemos imaginar um vetor como uma linha de uma tabela, composta por
diversas células. Em cada célula é possível armazenar um valor.
7
8
9

O Comando typedef
O comando typedef permite ao programador definir um novo nome para
um determinado tipo.

#include <stdio.h>
typedef struct tipo_endereco
{
char rua [50];
int numero;
char bairro [20];
char cidade [30];
char sigla_estado [3];
long int CEP;
} TEndereco;
typedef struct ficha_pessoal
{
char nome [50];
long int telefone;
TEndereco endereco;
}TFicha;
void main(void)
{
TFicha *ex;
...
}

Bidimensionais (Matrizes)
10

Matrizes: Os vetores bidimensionais ou matrizes são estruturas de dados


que representam um conjunto de valores do mesmo tipo (estrutura
homogênea), referenciados pelo mesmo nome e individualizados entre si
através de sua posição de linha e coluna dentro desse conjunto (variáveis
indexadas bidimensionais).
11
12

#include iostream
Esta biblioteca serve para definir um "espaço de nomes", ou namespace. Um
namespace permite a definição de estruturas, estruturas, classes, funções,
constantes, etc, que estarão vinculadas a ele.

#include windows.h

Esta biblioteca contém declarações para todas as funções da API do


Windows, todos os macros comuns utilizados pelos programadores do
Windows, e todos os tipos de dados utilizados pelas várias funções e
subsistemas. Possibilita fazer coisas como: Criar janelas e botões.

#include time.h
Esta biblioteca contém um arquivo cabeçalho que fornece protótipos para
funções, macros e definição de tipos da biblioteca padrão da linguagem de
programação C para manipulação de datas e horários de modo padrão.

Criamos uma função que percorrerá as matrizes. E também já vamos


declarar todas as variáveis que utilizaremos neste programa. Vamos
explicar o que cada uma faz conforme precisemos delas.

Esta função irá para as posições x,y da nossa matriz, vamos utilizá-la para
desenhar as 4 paredes do nosso jogo, para isso iremos utilizar laços for(), e
para desenhá-las vamos utilizar a tabela ASCII. Nosso código ficará assim:
13

O que fizemos foi criar um laço, e dentro dele utilizar a função mgotoxy()
que percorre por toda a matriz, desenhando nela com caracteres especiais,
no caso usamos o de número 219, que representa a “|”, e para desenhar as 4
paredes, fizemos uma por vez, através de 4 laços, a primeira percorre de 0
até X(18), a segunda de X(50) até 0, a terceira de 50 até X(18), e a quarta de
X(51, para o cursor ficar fora das paredes) até 18.

Para movimentar a Cobra, vamos usar as setas do teclado, então vamos


declarar da seguinte forma

Se seta==0 então o ponto se move para a esquerda


Se seta==1 então o ponto se move para a cima
Se seta==2 então o ponto se move para a direita
Se seta==3 então o ponto se move para a baixo

Agora, vamos criar as variáveis que armazenam o ponto, e as que apagam


o rastro da cobra conforme ela se move pela tela. Vamos criar uma
variável que armazena o tamanho da cobra, em seguida iremos explicar o
que cada linha do código faz.
14

Com isto, criamos toda a lógica que vai fazer a cobra se movimentar pela
tela, mas ainda não funciona. O que fizemos primeiro foi criar um laço,
dentro dele esta variável ‘tecla’ que declaramos sendo do tipo char e
contendo a letra ‘a’, enquanto ela for ‘a’ o laço continua. Em seguida,
usamos o conectivo E NÃO FOR (&&!) com a função kbhit()

A função kbhit() basicamente espera o usuário pressionar uma tecla. Agora


vamos desenhar a maçã, e colocá-la de modo aleatório na tela, para isto
iremos usar a função rand() que está na biblioteca time.h, mas para que a
maçã sempre apareça em um local diferente da tela, iremos usar a função
srand. As próximas linhas ficam assim:

srand(time(NULL));
mx=(rand()%49)+1;
my=(rand()%17)+1;

O valor de “mx” são os nossos valores de "x'' da matriz, e os de “my” são os


de''y `` da matriz.

Agora, vamos desenhar a maçã, usando a tabela ASCII mais uma vez.
mgotoxy(mx,my);
printf("%c",1);

O jogo está quase pronto, vamos fazer o código de quando a cobra passa

pela maçã e aumenta de tamanho, e quando isso acontece, nós geramos

outra maça aleatoriamente.


15

if(mx==cx[0]&&my==cy[0])

{ t++;

mx=(rand()%25)+1;

my=(rand()%17)+1;

Para terminar a lógica, vamos fazer o fim do jogo. Se a cobra cx[0]; cy[0]

estiver sobre ela mesmo, o jogo acaba.

if(mx==cx[0]&&my==cy[0])

{ t++;

mx=(rand()%25)+1;

my=(rand()%17)+1;

Nosso jogo está terminado e a funcionar. Agora só vamos deixá-lo um

pouco mais bonito visualmente, vamos criar um menu flutuante indicando os

pontos e a velocidade da cobra, e também, criar uma variável para

controlar a função Sleep(), que deve diminuir a cada vez que a cobra pegar

uma maçã, aumentando a velocidade do jogo.

int velo = 100, velo2 = 5, int pontos =0;

A variável ‘velo’ irá controlar nossa função Sleep(), começando com 100 e

diminuindo seu valor a cada vez que a maçã for pega, assim a velocidade

aumenta. A variável ‘velo2’ e ‘pontos’ irá aparecer no nosso menu flutuante.


16

Agora, vamos na parte do código onde se a cobra come a maçã, ela

aumenta de tamanho e colocamos as seguintes linhas:

if(mx==cx[0]&&my==cy[0])

{ t++;

pontos++;

mx=(rand()%25)+1;

my=(rand()%17)+1;

velo-=5;

velo2+=5;

Ou seja, quando a cobra come a maçã, a variável ‘velo’ diminui em 5, e a

variável ‘velo2’ que aparece no nosso menu aumenta em 5. Agora só falta

escrever o menu e colocar nossa variável de controle na função Sleep(),

para isto, vamos usar a função mgotoxy() para andar por nossa matriz, e

assim, desenhar o menu flutuante, na parte onde desenhamos a cobra e a

maça, escrevemos isso:

mgotoxy(55,10);

textcolor(MAGENTA);

printf ("Pontos: %d",pontos);

mgotoxy(55,3);

printf ("Velocidade: %d",velo2);


17

mgotoxy(3,22);

textcolor(11);

printf ("Jogo desenvolvido por Cesar pinto e Bruno Manchado");

Sleep(velo);

Agora, por fim, vamos criar uma mensagem de game over, para que o

usuário saiba quando perdeu e quantos pontos o mesmo fez. Colocamos

esta linha fora dos while(), mas dentro da main()

system("cls");

system("pause");

textcolor(14);

printf ("\n\n\t Perdeste \n\n");

textcolor(13);

printf ("\n\n\t Fizeste%d PONTOS",pontos);


18

Conclusão
COM ESTE TRABALHO SUPERAMOS QUALQUER META DECLARADA PELA A
PROFESSORA E CRIAMOS ALGO INOVADOR PARA O 1 TGPSI

ESPERO QUE TENHAM GOSTADO!!!!


19

WEBGRAFIA

https://www.inf.pucrs.br/~flash/lapro2ec/aulas/aula_strings.html

http://mtm.ufsc.br/~azeredo/cursoC/aulas/cb60.html
https://wagnergaspar.com/como-criar-um-vetor-array-unidimensional-de-
struct/
https://www.sanfoundry.com/c-program-implement-strpbrk-function/
http://mtm.ufsc.br/~azeredo/cursoC/aulas/cb60.html
https://www.geeksforgeeks.org/strpbrk-in-c/
https://linuxhint.com/pass-string-function-c-language/

Você também pode gostar