Daniel Lapa – Blog de Programação

Dezembro 11, 2008

Slot Machine – Abordagem em C++ segundo o paradigma ADT

Arquivado em: jogos c++, programação — daniellapa @ 8:52 pm

Nas últimas aulas de p.s.i estivemos a realizar uma ficha de trabalho na qual consistia criar um objecto segundo o paradigma de programação ADT.

Eu decidi criar uma slot machine.

Esta minha slot machine é um autêntico jogo de sorte, o qual consiste em acertar em vários tipos de combinações para ganhar créditos, que nos permitem continuar a jogar.

Uma Slot Machine real

A minha Slot Machine

Que operações se podem realizar com este objecto?

  • Gera um número aleatório para cada slot da slot machine.
  • Mostra a slot machine.
  • Verifica os créditos que temos e ao mesmo tempo verifica as combinações na mesma função.

O nome que vou definir à minha classe é Slot.

Classe :

Slot.h

#include <cstdlib>
#ifndef SLOT_H
#define SLOT_H
class Slot{
public:
	Slot();
	void PullTheLever();
	void ShowSlotMachine();
	void PlayTheGame();
	//prémios
	bool Jackpot();			// acertar em todas as slots
	bool DuasDiagonais();	// acertar em duas diagonais
	bool DuasVertical();	// acertar em duas verticais
	bool DuasHorizontal();	// acertar em duas horizontais
	bool HV();				// acertar numa horizontal e numa vertical
	bool DuasHV();			// acertar em duas verticais e em duas horizontais
	bool DHV();				// acertar numa diagonal numa vertical e numa horizontal
	bool Diagonal();		// acertar numa diagonal
	bool Vertical();		// acertar numa vertical
	bool Horizontal();		// acertar numa horizontal
private:
	int nslot[3][3];
};
#endif

Slot.cpp gera números aleatórios para cada slot, apresentando os valores obtidos através do desenho da slot machine e verifica os vários tipos de combinações possíveis:

Slot.cpp

#include <iostream>
#include "Slot.h"
using namespace std;
Slot::Slot(){
	PullTheLever();
}

void Slot::PullTheLever(){
	nslot[0][0] = rand()%9+1;
	nslot[0][1] = rand()%9+1;
	nslot[0][2] = rand()%9+1;
	nslot[1][0] = rand()%9+1;
	nslot[1][1] = rand()%9+1;
	nslot[1][2] = rand()%9+1;
	nslot[2][0] = rand()%9+1;
	nslot[2][1] = rand()%9+1;
	nslot[2][2] = rand()%9+1;
}

void Slot::ShowSlotMachine(){
	cout<<"*******************************"<<endl;
	cout<<"****     SLOT MACHINE      ****"<<endl;
	cout<<"*******************************"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"***  "<< nslot[0][0]<<"  *****  "<<nslot[0][1]<<"  *****  "<<nslot[0][2]<<"  ***"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"*******************************"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"***  "<<nslot[1][0]<<"  *****  "<<nslot[1][1]<<"  *****  "<<nslot[1][2]<<"  ***"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"*******************************"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"***  "<<nslot[2][0]<<"  *****  "<<nslot[2][1]<<"  *****  "<<nslot[2][2]<<"  ***"<<endl;
	cout<<"***     *****     *****     ***"<<endl;
	cout<<"*******************************"<<endl;
	cout<<"*******************************"<<endl;
};

bool Slot::Jackpot(){
	int padrao = nslot[0][0];
	if(padrao==nslot[0][0] && padrao==nslot[0][1] && padrao==nslot[0][2] &&
	   padrao==nslot[1][0] && padrao==nslot[1][1] && padrao==nslot[1][2] &&
	   padrao==nslot[2][0] && padrao==nslot[2][1] && padrao==nslot[2][2])
		return true;
	else
		return false;
}

bool Slot::DuasDiagonais(){
	int padrao = nslot[0][0];
	if(padrao==nslot[0][0] && padrao==nslot[1][1] && padrao==nslot[2][2] &&
	   padrao==nslot[0][2] && padrao==nslot[1][1] && padrao==nslot[2][0])
		return true;
	else
		return false;
}

bool Slot::Vertical(){
	if((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) ||
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) ||
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))

		return true;
	else
		return false;
}

bool Slot::Horizontal(){
	if((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) ||
	   (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) ||
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]))

		return true;
	else
		return false;
}

bool Slot::Diagonal(){
	if((nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2]) ||
	   (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0]))
		return true;
	else
		return false;
}

bool Slot::DHV(){
	if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

	   ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
	   (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
       (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
       (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
       (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
       (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
       (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) &&
       (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])))

		return true;
	else
		return false;
}

bool Slot::HV(){
	if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) ||

       ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) ||

       ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) ||

       ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])))

		return true;
	else
		return false;
}

bool Slot::DuasHorizontal(){
	if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) ||
	   ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) ||
	   ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])))
		return true;
	else
		return false;
}

bool Slot::DuasVertical(){
	if(((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) ||
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) ||
	   ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])))
		return true;
	else
		return false;
}

bool Slot::DuasHV(){
	if((((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) ||

       (((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) ||

       (((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) ||

	   (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) ||

       (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) ||

	   (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) &&
	   ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) ||

	   (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) ||

	   (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) &&
	   ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) ||

	   (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) &&
	   (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) &&
	   ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) &&
	   (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))))

		return true;
	else
		return false;
}

void menu(){
	cout<<endl<<"PREMIOS:"<<endl;
	cout<<"Jackpot 20 creditos"<<endl,
	cout<<"Duas horizontais e duas verticais 12 creditos"<<endl,
	cout<<"Duas horizontais 6 creditos"<<endl;
	cout<<"Duas verticais 6 creditos"<<endl;
	cout<<"Duas diagonais 6 creditos"<<endl;
	cout<<"Uma horizontal uma vertical e uma diagonal 6 creditos"<<endl;
	cout<<"Uma horizontal uma vertical 4 creditos"<<endl;
	cout<<"Uma diagonal 3 creditos"<<endl;
	cout<<"Uma horizontal 3 creditos"<<endl;
	cout<<"Uma verticalal 3 creditos"<<endl<<endl;
}

void Slot::PlayTheGame(){
	int credit=5;
	char op;
	menu();
	cout<<"Voce tem "<<credit<<" Creditos."<<endl;
	cout<<"Quer jogar Opção (y/n): ";cin>>op;

	if(op == 'y'){
	do{
		PullTheLever();
	    ShowSlotMachine();
	if(Jackpot()){
		cout << "Ganhou o Jackpot" << endl;
		credit=credit+20;
	}
	else 	if(DuasHV()){
				cout << "Ganhou o duas horrizontal e duas Vertical" << endl;
				credit=credit+12;
			}
			else	 if(DuasHorizontal()){
						cout << "Ganhou o DuasHorizontal" << endl;
						credit=credit+6;
					}
					 else	if(DuasVertical()){
								cout << "Ganhou o DuasVertical" << endl;
								credit=credit+6;
							}
							else	if(DuasDiagonais()){
										cout << "Ganhou o Duas Diagonais" << endl;
										credit=credit+6;
									}
									else	if(DHV()){
												cout << "Ganhou o uma horrizontal e uma Vertical e diagonal" << endl;
												credit=credit+6;
											}
											else	if(HV()){
														cout << "Ganhou o uma horrizontal e uma Vertical" << endl;
														credit=credit+4;
													}
													else	if(Diagonal()){
																cout << "Ganhou o Diagonal" << endl;
																credit=credit+3;
															}
															else	if(Horizontal()){
																		cout << "Ganhou o Horizontal" << endl;
																		credit=credit+3;
																	}
																	else	if(Vertical()){
																				cout << "Ganhou o Vertical" << endl;
																				credit=credit+3;
																			}
																			else
																				cout <<"Não ganhou !!!" <<endl;

		credit --;
		cout<<"Creditos: "<<credit<<endl;
		cout<<"Opção (y/n): ";cin>>op;
	}while((credit > 0) && (op == 'y'));
}
	if(op == 'n')
		cout<<"Ganhou "<<credit<<" Creditos."<<endl;

	if(credit==0)
		cout<<"Não tem mais creditos"<<endl;
}

O programa principal que faz o chamamento a todas as funções do Slot.cpp.

game.cpp:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include "Slot.h"
using namespace std;
int main(){
	srand(time(0));
	Slot Machine01;
	Machine01.PlayTheGame();
}

Aqui fica a minha slot machine, um dia mais tarde talvez a volte a criar com um melhor design.

Novembro 14, 2008

Módulo 08 – Conceitos Avançados de Programação

Arquivado em: programação — daniellapa @ 11:11 am

No inicio deste módulo começamos por realizar um trabalho de pares no qual consistia dizer o que é um Sistema Operativo, características de um Sistema Operativo, Sistemas operativos gráficos e “não gráficos”, elaborar uma lista de características dos sistemas operativos gráficos, identificando qual a vantagem associada, e o conceito de janela.

Aprendemos também a fazer a alocação dinâmica de memória em C++, onde aprendemos os comandos new e delete.

A declaração do apontador e a alocação da memória:


int *a = new int;

No fim libertar a memória que já não é utilizada:


delete a;


Outubro 20, 2008

Módulo 7 – Manipulação de ficheiros

Arquivado em: programação — daniellapa @ 10:11 am

Durante este módulo aprendemos a fazer a manipulação da ficheiros binários e de texto, elaboramos neste módulo cinco fichas de trabalho onde nos ajudou a aprender mais sobre como manipular ficheiros. Aprendemos a abrir e a fechar ficheiros em vários modos de acesso, aprendemos a inserir e a fazer a leitura de texto no ficheiro de carácter-a-carácter, aprendemos também a a escrever e a ler ficheiros de texto formatado enas últimas aulas aprendemos a escrever e a ler ficheiros binários.

Abrir ficheiro:

fp =fopen("meutexto.txt","r");

Fechar ficheiro:

fclose(fp);

Escrever um carácter num ficheiro de texto:

fputc('a',ficheiro);

Lê um caracter de um ficheiro de texto:

caracter=fgetc(ficheiro);

Escrever dados num ficheiro formatado:

fprintf(fp, "%d %s %.1f", a, b, c);

Ler dados de um ficheiro formatado:

fscanf(fp, "%d %s %f", a, b, c);

Escrever para um ficheiro binário:

fwrite(x,sizeof(int), 5, fp);

Ler um ficheiro binário:

fread(x,sizeof(int), 5, fp);

Módulo 7 – Manipulação de ficheiros Binários

Arquivado em: programação — daniellapa @ 9:49 am

Nas ultimas aulas do modulo aprendemos a manipular ficheiros binários.

Aprendemos a escrever e a ler ficheiros binários.

Escrever no ficheiro binário:

fwrite(x,sizeof(int), 5, fp);

Ler ficheiro binário:

fread(x,sizeof(int), 5, fp);

Neste exemplo escreve num fichiero binário:

#include <stdio.h>
int main(int argc, char *argv[]){
	FILE *fp;
	int x[5], i;

	fp = fopen(argv[1], "wb");
	for(i = 0; i < 5; i++){
		printf("Inserir um numero na posicao %d do array: ",i);
		scanf("%d", &x[i]);
	}
	fwrite(x,sizeof(int), 5, fp);
	printf("Operacao efectuada\n");
	fclose(fp);
	return 0;
}

Outro exemplo, este lê um ficheiro binário:

#include <stdio.h>
int main(int argc, char *argv[]){
	FILE *fp;
	int x[5], i;

	fp = fopen(argv[1], "rb");
	if(fp == NULL){
		printf("O ficheiro nao e válido\n");
		return 1;
	}
	fread(x, sizeof(int), 5, fp);
	for(i = 0; i < 5; i++){
		printf("Array[%d] = %d\n",i, x[i]);
	}
	fclose(fp);
	return 0;
}

Outubro 17, 2008

Modulo 7 – Escrever e ler ficheiros de texto formatado

Arquivado em: programação — daniellapa @ 9:52 am

Nas ultimas aulas aprendemos a escrever e a ler ficheiros de texto formatado.

Escrever dados formatados:

fprintf(fp, "%d %s %.1f", a, b, c);

Ler dados formatados:

fscanf(fp, "%d %s %f", a, b, c);

Este exemplo escreve dados no ficheiro num formato indicado:


#include <stdio.h>
int main(int argc, char *argv[]){

	FILE *fp;
	int a=11;
	char b[30]="texto";
	float c=12.50;

	fp = fopen(argv[1], "w");
    /*escreve dados no ficheiro num formato indicado*/
	fprintf(fp, "%d %s %.1f", a, b, c);
	fclose(fp);

	return 0;
}

Este exemplo lê dados do ficheiro no formato indicado:


#include <stdio.h>
int main(int argc, char *argv[]){

	FILE *fp;
	int a;
	char b[30];
	float c;

	if((fp = fopen(argv[1], "r"))!=NULL){
        /*lê dados do ficheiro no formato indicado*/
		fscanf(fp, "%d %s %f", &a, b, &c);
		printf("a = %d\n", a);
		printf("b = %s\n", b);
		printf("c = %.1f\n", c);
		fclose(fp);
	}
	else
		printf("O ficheiro especificado não existe!\n");
	return 0;
}

Outubro 7, 2008

Módulo 7 – Manipulação de ficheiros de texto

Arquivado em: programação — daniellapa @ 9:50 am

este módulo de PSI estamos aprendemos a fazer manipulação de ficheiros de texto.

Durante as aulas fomos aprendendo varias maneiras de manipulação de ficheiros através de vários exercícios e fichas de trabalho. Ao longo das primeiras aulas aprendemos a abrir e fechar ficheiros em vários modos de acesso, depois inserimos e fizemos a leitura de texto no ficheiro de carácter-a-carácter

Exemplo:

#include<stdio.h>
int main(){
 FILE *fp;      //apontador para o ficheiro
 /*Abrir ficheiro*/
 fp =fopen("meutexto.txt","r");
 /*Fechar ficheiro*/
 fclose(fp);

 return 0;
}

Aprendemos também a escrever e a ler um carácter de um ficheiro.

Ler carácter:

caracter=fgetc(ficheiro);

Escrever carácter:

fputc('a',ficheiro);

Exemplo de um programa que lê os carácter de um ficheiro e escreve para outro ficheiro

#include<stdio.h>
int main(int argc, char *argv[]){
	FILE *fa, *fb;
	char caracter;

	fa=fopen(textoa,"r");
	fb=fopen(textob,"w");	

	/*Le caracater a caracter*/
	while((caracter=fgetc(fa))!=EOF){
		fputc(caracter,fb); //escreve os caracter no ficheiro

	fclose(fa);
	fclose(fb);

	return 0;
}

Outro exemplo, este programa verifica se um ficheiro existe:


#include <stdio.h>
int main(int argc, char *argv[]){
	FILE *fp;
	fp = fopen(argv[1],"r");
	if (fp==NULL)
		printf("ficheiro não existe\n");
	else{
		printf("Ficheiro já existe\n");
		fclose(fp);
	}
	return 0;
}

Nas proximas aulas iremos aprender a manipular ficheiros binários.

Maio 20, 2008

Jogo do galo – C++

Arquivado em: jogos c++, programação — daniellapa @ 10:11 am

Poucas aulas atrás o professor de programação lançou-nos o desafio de fazer o jogo do galo, eu achei um pouco complicado de fazer.

#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
typedef struct{
	char pos[3][3];
}GALO;

void limpar_tabuleiro(GALO *g){
	int l,c;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			(*g).pos[l][c]=' ';
}
void mostrar(GALO g){
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[0][0]<<" | "<<g.pos[0][1]<<" | "<<g.pos[0][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[1][0]<<" | "<<g.pos[1][1]<<" | "<<g.pos[1][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[2][0]<<" | "<<g.pos[2][1]<<" | "<<g.pos[2][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;

}

bool vazio(GALO p){
	bool vazio=true;
	int l,c;

	//verificar se o tabuleiro está vazio
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			if(p.pos[l][c]!=' ')
				vazio=false;
	return vazio;
}
bool vitoriax(GALO p){
	//verificar vitória das x
	if(	(p.pos[0][0]=='x'&&p.pos[0][1]=='x'&&p.pos[0][2]=='x')||
		(p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[0][0]=='x'&&p.pos[1][0]=='x'&&p.pos[2][0]=='x')||
		(p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[0][0]=='x'&&p.pos[1][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[1][1]=='x'&&p.pos[0][2]=='x'))
		return true;
	else	return false;

}
bool vitoriao(GALO p){
	//verificar vitória das o
	if(	(p.pos[0][0]=='o'&&p.pos[0][1]=='o'&&p.pos[0][2]=='o')||
		(p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[0][0]=='o'&&p.pos[1][0]=='o'&&p.pos[2][0]=='o')||
		(p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[0][0]=='o'&&p.pos[1][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[1][1]=='o'&&p.pos[0][2]=='o'))
		return true;
	else	return false;
}

bool empateox(GALO p){
	//verificar empate
	int l,c;
	int ocupados=0;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			if(p.pos[l][c]!=' ')
				ocupados++;
	if(ocupados==9)
		return true;
	else	return false;
}

char vez(GALO g){
	int l,c;
	int o=0,x=0;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			switch(g.pos[l][c]){
				case 'x':x++;break;
				case 'o':o++;break;
			}
	if(x==o)
		return 'e';
	else	if(x>o)
				return 'o';
			else
				return 'x';
}
void jogar(GALO *p ,int posicao,char caracter){
	switch(posicao){
		case 1:(*p).pos[0][0]=caracter;break;
		case 2:(*p).pos[0][1]=caracter;break;
		case 3:(*p).pos[0][2]=caracter;break;
		case 4:(*p).pos[1][0]=caracter;break;
		case 5:(*p).pos[1][1]=caracter;break;
		case 6:(*p).pos[1][2]=caracter;break;
		case 7:(*p).pos[2][0]=caracter;break;
		case 8:(*p).pos[2][1]=caracter;break;
		case 9:(*p).pos[2][2]=caracter;break;
	}
}
int main(){
	GALO galo;
	char vez;
	int posicao;
	limpar_tabuleiro(&galo);

	vez='x';
	do{
		cout<<"Vai jogar o "<<vez<<"\n";
		mostrar(galo);
		cout<<"Indique a posição onde pretende jogar: ";cin>>posicao;
		jogar(&galo,posicao,vez);
		if(vez=='x')
			vez='o';
		else	vez='x';
	}while(!vitoriax(galo)&&!vitoriao(galo)&&!empateox(galo));
	mostrar(galo);
	if(empateox(galo))
		cout<<"O jogo terminou com um empate técnico!\n";
	else	if(vitoriax(galo))
			cout<<"Vitória do x\n";
		else	cout<<"Vitória do o\n";

	return 0;
}

As posições que o programa pede vão de 1 a 9 sendo 1, 2 ,3 da 1º linha, 4, 5, 6 2º linha, 7, 8, 9 da 3ºlinha.

O que são apontadores

Arquivado em: programação — daniellapa @ 9:39 am

Hoje na aula de programação aprendi o que são apontadores.
Eu acho que os apontadores são um pouco complicados ao inicio de compreender, mas depois de testarmos começamos a compreender melhor para que servem.

Aqui está um exemplo de um programa sem apontadores:

#include<iostream>
using namespace std;
int main(){
    int a=1,b=2;

	cout<<"A = "<<a<<endl;
	cout<<"B = "<<b<<endl;
	cout<<"A + B = "<<a+b<<endl;

	return 0;

}

E aqui está o mesmo programa só que com apontadores:


#include<iostream>
using namespace std;
int main(){
    int a=1,b=2;
    int *ptr_a=&a, *ptr_b=&b;

	cout<<"A = "<<*ptr_a<<endl;
	cout<<"B = "<<*ptr_b<<endl;
    cout<<"A + B = "<<*ptr_a+*ptr_b<<endl;

	return 0;
}

Com os apontadores, basicamente, podemos manipular os endereços da memória. Quando criamos uma variável, por exemplo “A”, é armazenado na memória um espaço que contem o valor de “A”. Quando voltamos a chamar a mesma variável, por exemplo “C=A+B”, é armazenado na memória outro espaço para a variável “A”. Com os apontadores podemos usar sempre o mesmo local de armazenamento da variável “A” sem mexer nas variáveis.

Os seguintes termos significam:

  • & significa “endereço de”.
  • * significa “aponta para”, ou se quisermos, “conteúdo do endereço apontado por”.

Maio 19, 2008

“HELLO WORLD”

Arquivado em: curiosidades, programação — daniellapa @ 9:46 am

Aqui temos um pequeno video do famoso programa “HELLO WORLD”.

Este é um bom exemplo de um programa para quem ainda esta a começar a programar.

Abril 29, 2008

Agenda – C++

Arquivado em: programação — daniellapa @ 10:22 am

Esta agenda foi feita em c++, e suporta no máximo 20 registos,e incluí as seguintes funções: inserir, eliminar, modificar, listar, procurar, terminar. Quando sair do programa todos os dados serão apagados.

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define R 20
struct contacto{
	int indice;		// 0=vazio   1=cheio
	string nome;
	string tele;
	string nasci;
} registo[20];

//funções

void terminar();
void limpar_tudo();
int leropcao();
int menu2();
void procuraregisto();
void procurarnome();
void procurartele();
void procurarnasci();
int menu();
void eliminar();
void inserir();
void procurar();
void listar();
void inserir2();
void modificar();
void eliminar_tudo();

int main(){
	int opcao;

	limpar_tudo();

	do{
		cout<<"****************************************************"<<endl;
		cout<<"			AGENDA	"<<endl;
		cout<<"****************************************************"<<endl;

		opcao=menu();
		switch(opcao){
			case 1: inserir();break;
			case 2: eliminar();break;
			case 3: eliminar_tudo();break;
  			case 4: procurar();break;
			case 5: listar();break;
			case 6: modificar();break;
			case 7: terminar();break;
			default: cout<<endl<<"Escolha outra opção"<<endl<<"-----------------------------------------"<<endl;
		}
	}while(opcao!=7);
}

int menu(){
	cout<<"Prima 1 para Inserir."<<endl;
	cout<<"Prima 2 para Eliminar."<<endl;
	cout<<"Prima 3 para Eliminar Tudo."<<endl;
	cout<<"Prima 4 para Procurar."<<endl;
	cout<<"Prima 5 para Listar."<<endl;
	cout<<"Prima 6 para Modificar."<<endl;
	cout<<"Prima 7 para Terminar."<<endl;

	return leropcao();

}

void inserir(){

	int pos=0;
	cout<<"Função inserir"<<endl;

	while(registo[pos].indice==1){
		pos++;}
	if(pos==20)
		cout<<"Agenda cheia"<<endl;
	else{
		cout<<"O nome do contacto: ";
		cin>>registo[pos].nome;
		cout<<"O numero de telefone: ";
		cin>>registo[pos].tele;
		cout<<"A data de nascimento: ";
		cin>>registo[pos].nasci;

		registo[pos].indice=1;
	}
}

void eliminar(){
	int i;
	char certeza;
	int total=0;
	cout<<"Função Eliminar"<<endl;

	for (i=0;i<R;i++)
		if (registo[i].indice!=0){
			cout<<"Registo "<<i<<endl;
			cout<<"Nome: "<<registo[i].nome<<endl;
			cout<<"Telefone: "<<registo[i].tele<<endl;
			cout<<"Data de nascimento: "<<registo[i].nasci<<endl;
			cout<<"----------------------------------------------"<<endl<<endl;
			total++;
		}
	if(total==0)
		cout<<"Não existe registos"<<endl;
	else{
		cout<<"Em que posição está o contacto a eliminar de 0 a 19 ? ";cin>>i;
		cout<<"Tem a certeza?(s/n)... ";cin>>certeza;
		if (certeza=='s')
			registo[i].indice=0;
	}
}

void eliminar_tudo(){
	int total=0;
	cout<<"Função eliminar tudo"<<endl;
	int i;
	char certeza;
	for (i=0;i<R;i++)
		if (registo[i].indice!=0){
			total++;

	cout<<"Tem a certeza que quer eliminar todos os registos da agenda?(s/n)... ";cin>>certeza;

	if(certeza=='s')
		for(i=0;i<R;i++)
			registo[i].indice=0;
		}	

	if(total==0)
		cout<<"Não existe registos"<<endl;
}

void modificar(){
	int i;
	int total=0;
	for (i=0;i<R;i++)
		if (registo[i].indice!=0){
			cout<<"Função modificar."<<endl;
			cout<<"Escolha o registo que pretende modificar de 0 a 19:";cin>>i;
			cout<<"registo "<<i<<endl;
			cout<<"Nome: ";cin>>registo[i].nome;
			cout<<"Telefone: ";cin>>registo[i].tele;
			cout<<"Data de nascimento: ";cin>>registo[i].nasci;
			total++;
		}

	if(total==0)
		cout<<"Não existe registos"<<endl;
}

void procurar(){
	int i;
	int opcao;
	int total=0;
	string nome;
	string n;
	string t;
	cout<<"Função procurar"<<endl;

	for(i=0;i<R;i++){
		if(registo[i].indice!=0)
			while(opcao!=5){
				opcao=menu2();

					switch(opcao){
						case 1: procuraregisto();break;
						case 2: procurarnome();break;
  						case 3: procurarnasci();break;
						case 4: procurartele();break;
						case 5: terminar();break;
						default: cout<<endl<<"Escolha outra opção"<<endl<<"-----------------------------------------"<<endl;
					}
				total++;
			}
	}
	if(total==0)
		cout<<"Não existe registos"<<endl;
}

void listar(){
	int total=0;
	int i;
	cout<<"Função listar "<<endl<<endl;
	cout<<"Registo:        Nome:          Telefone:          Data de nascimento:"<<endl;
	for(i=0;i<R;i++)
		if(registo[i].indice!=0){
			cout<<setw(5)<<i;
			cout<<setw(19)<<registo[i].nome;
			cout<<setw(16)<<registo[i].tele;
			cout<<setw(18)<<registo[i].nasci<<endl;
			total++;
		}
	if(total==0)
		cout<<endl<<"                 ***NÃO EXISTE REGISTOS***"<<endl<<endl;
}

int menu2(){
	cout<<endl;
	cout<<"Prima 1 para procurar por registo."<<endl;
	cout<<"Prima 2 para procurar por nome."<<endl;
	cout<<"Prima 3 para procurar por data de nascimento."<<endl;
	cout<<"Prima 4 para procurar por telefone."<<endl;
	cout<<"Prima 5 para sair."<<endl;

	return leropcao();

}

void procuraregisto(){
	int i;
	cout<<"Escolha o registo que pretende procurar de 0 a 19: ";cin>>i;
	cout<<"registo"<<i<<endl;
	cout<<"Nome: "<<registo[i].nome<<endl;
	cout<<"Telefone: "<<registo[i].tele<<endl;
	cout<<"Data de nascimento: "<<registo[i].nasci<<endl;
	cout<<"----------------------------------------------------"<<endl;
}

void procurarnome(){
	string nome;
	string n;
	int i;

	cout<<"Escolha o nome que pretende procurar: ";cin>>n;
	for(i=0;i<R;i++){
		if(registo[i].indice!=0)
			if(registo[i].nome==n){
				cout<<"registo "<<i<<endl;
				cout<<"Nome: "<<registo[i].nome<<endl;
				cout<<"Telefone: "<<registo[i].tele<<endl;
				cout<<"Data de nascimento: "<<registo[i].nasci<<endl;
				cout<<"----------------------------------------------------"<<endl;
			}
	}
}

void procurartele(){
	string tele;
	string t;
	int i;

	cout<<"Escolha o telefone que pretende procurar: ";cin>>t;
	for(i=0;i<R;i++){
		if(registo[i].indice!=0)
			if(registo[i].tele==t){
				cout<<"registo "<<i<<endl;
				cout<<"Nome: "<<registo[i].nome<<endl;
				cout<<"Telefone: "<<registo[i].tele<<endl;
				cout<<"Data de nascimento: "<<registo[i].nasci<<endl;
				cout<<"----------------------------------------------------"<<endl;

			}
	}
}

void procurarnasci(){
	string nasci;
	string na;
	int i;

	cout<<"Escolha a data de nascimento que pretende procurar: ";cin>>na;
	for(i=0;i<R;i++){
		if(registo[i].indice!=0)
			if(registo[i].nasci==na){
				cout<<"registo "<<i<<endl;
				cout<<"Nome: "<<registo[i].nome<<endl;
				cout<<"Telefone: "<<registo[i].tele<<endl;
				cout<<"Data de nascimento: "<<registo[i].nasci<<endl;
				cout<<"----------------------------------------------------"<<endl;
			}
	}
}

void terminar(){
	cout<<"Função terminar"<<endl;
}

void limpar_tudo(){
	int i;
	for(i=0;i<R;i++)
		registo[i].indice=0;
}

int leropcao(){
	int op;
	cout<<"A sua opção: ";
	cin>>op;
	return op;
}


Blog em WordPress.com.