Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação (diário 2010-1) - Prof. Ederson Torresini"
Ir para navegação
Ir para pesquisar
Linha 67: | Linha 67: | ||
#Se o barco foi atingido, desenhar um X | #Se o barco foi atingido, desenhar um X | ||
#Ao final (todo os barcos atingidos): informar o usuário que venceu em 'n' movimentos | #Ao final (todo os barcos atingidos): informar o usuário que venceu em 'n' movimentos | ||
+ | |||
+ | ==Proposta de código== | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | #define QTDE_BARCOS 2 | ||
+ | |||
+ | |||
+ | int iniciaJogo(int *barcos, int *movimentos) | ||
+ | { | ||
+ | int barco; | ||
+ | for(barco=0; barco<QTDE_BARCOS; barco++) | ||
+ | { | ||
+ | *(barcos + 3*barco + 2) = 0; // endereço inicial (barcos) | ||
+ | // + qtde. objetos por linha | ||
+ | // * linhas | ||
+ | // + coluna (terceiro) | ||
+ | } | ||
+ | movimentos = 0; | ||
+ | } | ||
+ | |||
+ | char desenhaPonto(int linha, int coluna, int barcos[QTDE_BARCOS][3]) | ||
+ | { | ||
+ | int barco; | ||
+ | |||
+ | for (barco=0; barco<QTDE_BARCOS; barco++) | ||
+ | { | ||
+ | if (linha==barcos[barco][0] & coluna==barcos[barco][1]) | ||
+ | { | ||
+ | if (barcos[barco][2] == 1) | ||
+ | { | ||
+ | return 'X'; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | return '~'; | ||
+ | } | ||
+ | |||
+ | desenhaMar(int linhas, int colunas, char onda, int barcos[QTDE_BARCOS][3]) | ||
+ | { | ||
+ | int linha; | ||
+ | int coluna; | ||
+ | int barco; | ||
+ | int tinhaBarco; | ||
+ | |||
+ | for (linha=1; linha<linhas; linha++) | ||
+ | { | ||
+ | for (coluna=1; coluna<colunas; coluna++) | ||
+ | { | ||
+ | printf("%c", desenhaPonto(linha, coluna, barcos)); | ||
+ | } | ||
+ | printf("\n"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int seVenceu(int barcos[QTDE_BARCOS][3]) | ||
+ | { | ||
+ | int barco; | ||
+ | int atingidos = 0; | ||
+ | |||
+ | for (barco=0; barco<QTDE_BARCOS; barco++) | ||
+ | { | ||
+ | if (barcos[barco][2] == 1) | ||
+ | atingidos++; | ||
+ | } | ||
+ | if (atingidos == QTDE_BARCOS) | ||
+ | return 1; | ||
+ | else | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | int main(int argc, char* argv[]) | ||
+ | { | ||
+ | const char onda= '~'; | ||
+ | int barcos[QTDE_BARCOS][3]; | ||
+ | int latitude; | ||
+ | int longitude; | ||
+ | int barco; | ||
+ | int movimentos; | ||
+ | |||
+ | if (argc < 3) | ||
+ | { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Primeira embarcação | ||
+ | barcos[0][0] = 5; // linha, latitude | ||
+ | barcos[0][1] = 6; // coluna, longitude | ||
+ | |||
+ | // Segunda embarcação | ||
+ | barcos[1][0] = 7; | ||
+ | barcos[1][1] = 10; | ||
+ | |||
+ | |||
+ | iniciaJogo(&barcos, &movimentos); | ||
+ | // Estrutura principal de repetição: vai atirando sem parar... :-P | ||
+ | while (1) | ||
+ | { | ||
+ | // Limpa a tela | ||
+ | system("clear"); | ||
+ | // Desenha o mar | ||
+ | desenhaMar(atoi(argv[1]), atoi(argv[2]), onda, barcos); | ||
+ | |||
+ | if(seVenceu(barcos)) | ||
+ | { | ||
+ | printf("\nParabéns! Venceu o jogo em %d movimentos!\n", movimentos); | ||
+ | return 0; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | printf("\nMovimentos: %d\n", movimentos); | ||
+ | printf("\nDigite latitude e longitude:\n"); | ||
+ | printf("- Latitude: "); | ||
+ | scanf("%d", &latitude); | ||
+ | printf("- Longitude: "); | ||
+ | scanf("%d", &longitude); | ||
+ | for (barco=0; barco<QTDE_BARCOS; barco++) | ||
+ | { | ||
+ | if (latitude == barcos[barco][0] & longitude == barcos[barco][1]) | ||
+ | { | ||
+ | barcos[barco][2] = 1; | ||
+ | } | ||
+ | } | ||
+ | movimentos++; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
{{Voltar|Sistemas Operacionais e Introdução a Programação (página)|página principal da disciplina}} | {{Voltar|Sistemas Operacionais e Introdução a Programação (página)|página principal da disciplina}} |
Edição das 17h08min de 11 de fevereiro de 2010
- Arquitetura de Sistemas Computacionais
- Modelo de Alan Turing
- Modelo de von Neumann
- Processador
- Memória
- Barramento(s)
- Sistemas Operacionais
- Tríade usuários-processos-dados
- Sistemas de Arquivos
- Usuários
- Permissões e propriedades
- Processos
- Árvore, escalonamento e estados
- Tríade usuários-processos-dados
- Lógica de Programação
- Algoritmo
- Entrada -> Processamento -> Saída [-> Entrada]
- Pseudocódigo
- Diagrama de bloco
- Constantes e variáveis
- Operadores e expressões
- Estruturas
- Decisão
- Repetição
- Algoritmo
- Linguagem de Programação C (segundo Guia Básico de C)
- Programa compilado:
- Compilação -> Montagem -> Vinculação
- Estrutura de um programa
- Bibliotecas
- Definições
- Função principal: main
- O primeiro programa (vazio)
- O clássico "Hello World" :-)
- Constantes e variáveis
- Declaração (e porque fazê-lo)
- Números: inteiro, real...
- Caracter e string
- Vetores e ponteiros: área de memória = um número
- Operadores
- Expressões
- E/S
- Estruturas
- Decisão
- Repetição
- Funções
- Argumentos
- Escopo
- Passagem de parâmetro por valor e por referência
- Ponteiros
- Programa compilado:
Regras de um bom programa
- Entender o problema, modelá-lo, utilizar pseudocódigo / diagrama de bloco.
- Definir entrada, processamento e saída.
- Primeiro declarar, depois realizar expressões.
- Deixar claro (documentar) o escopo de cada função e estrutura de decisão e de repetição (quando não foi visíveis início e fim na mesma tela).
- Desenha 1 onda
- Desenha 1 linha de ondas
- Desenha 1 matriz de tamanho fixo de ondas
- Desenha 1 matriz de tamanho variável de ondas (scanf)
- Mapeia 1 barco: latitude e longitude (vetor)
- Desenha o mar com 1 barco
- Mapeia 10 barcos: latitude e longitude (matriz)
- Desenha os 10 barcos
- Mapeia 10 barcos: latitude, longitude e se já foi atingido
- Pede ao usuário atirar
- Se o barco foi atingido, desenhar um X
- Ao final (todo os barcos atingidos): informar o usuário que venceu em 'n' movimentos
Proposta de código
#include <stdio.h>
#define QTDE_BARCOS 2
int iniciaJogo(int *barcos, int *movimentos)
{
int barco;
for(barco=0; barco<QTDE_BARCOS; barco++)
{
*(barcos + 3*barco + 2) = 0; // endereço inicial (barcos)
// + qtde. objetos por linha
// * linhas
// + coluna (terceiro)
}
movimentos = 0;
}
char desenhaPonto(int linha, int coluna, int barcos[QTDE_BARCOS][3])
{
int barco;
for (barco=0; barco<QTDE_BARCOS; barco++)
{
if (linha==barcos[barco][0] & coluna==barcos[barco][1])
{
if (barcos[barco][2] == 1)
{
return 'X';
}
}
}
return '~';
}
desenhaMar(int linhas, int colunas, char onda, int barcos[QTDE_BARCOS][3])
{
int linha;
int coluna;
int barco;
int tinhaBarco;
for (linha=1; linha<linhas; linha++)
{
for (coluna=1; coluna<colunas; coluna++)
{
printf("%c", desenhaPonto(linha, coluna, barcos));
}
printf("\n");
}
}
int seVenceu(int barcos[QTDE_BARCOS][3])
{
int barco;
int atingidos = 0;
for (barco=0; barco<QTDE_BARCOS; barco++)
{
if (barcos[barco][2] == 1)
atingidos++;
}
if (atingidos == QTDE_BARCOS)
return 1;
else
return 0;
}
int main(int argc, char* argv[])
{
const char onda= '~';
int barcos[QTDE_BARCOS][3];
int latitude;
int longitude;
int barco;
int movimentos;
if (argc < 3)
{
return;
}
// Primeira embarcação
barcos[0][0] = 5; // linha, latitude
barcos[0][1] = 6; // coluna, longitude
// Segunda embarcação
barcos[1][0] = 7;
barcos[1][1] = 10;
iniciaJogo(&barcos, &movimentos);
// Estrutura principal de repetição: vai atirando sem parar... :-P
while (1)
{
// Limpa a tela
system("clear");
// Desenha o mar
desenhaMar(atoi(argv[1]), atoi(argv[2]), onda, barcos);
if(seVenceu(barcos))
{
printf("\nParabéns! Venceu o jogo em %d movimentos!\n", movimentos);
return 0;
}
else
{
printf("\nMovimentos: %d\n", movimentos);
printf("\nDigite latitude e longitude:\n");
printf("- Latitude: ");
scanf("%d", &latitude);
printf("- Longitude: ");
scanf("%d", &longitude);
for (barco=0; barco<QTDE_BARCOS; barco++)
{
if (latitude == barcos[barco][0] & longitude == barcos[barco][1])
{
barcos[barco][2] = 1;
}
}
movimentos++;
}
}
}