Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento



Documentos relacionados
INF 1005 Programação I

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

INF 1005 Programação I

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

double pcompra[1000], pvenda[1000], codclient[1000]; //sempre que o usuário voltar ao menu principal ele poderá

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Algoritmos e Programação Estruturada

Capítulo 2: Introdução à Linguagem C

Curso de C para Engenharias

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

17 - Funções e Procedimentos em C Programação Modular

Estruturas II UFOP 1/1

Estruturas (Registros)

428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n));

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Aula 06 - Funções. O que é uma Função - Comando return - Protótipos de Funções - Tipos de Funções - Escopo de Variáveis - Passagem de parâmetros

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Introdução a Computação

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

V - Lista de Exercícios de SO e Lab. 1-) Escreva um programa em C para criar um arquivo texto, com informações fornecidas pelo usuário não formatadas.

14.1 Vetor - Problemas

Computação Informática

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

MC-102 Aula 19 Registros

Linguagem C Funções definidas pelo usuário. Lógica de Programação

José Romildo Malaquias

Exercício de Revisão Linguagem C

Estrutura de um programa em linguagem C

48 { printf("ocorreu um erro o arquivo nao pode ser aberto\n");

MC-102 Aula 17 Strings e Matrizes

INF 1620 P1-10/04/02 Questão 1 Nome:

INF 1007 Programação II

Linguagens de Programação I

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

struct LISTA item quant

Resumo da Introdução de Prática de Programação com C. A Linguagem C

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Fundamentos de Programação 1

Curso de Linguagem C

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Plano de Aula. if(condição) { bloco de comandos; } else { bloco de comandos2; }

Caracteres e Cadeias de Caracteres

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

INF 1620 P1-13/09/02 Questão 1 Nome:

Programação: Estruturas de seleção

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Revisão Aula Anterior Estruturas de Decisão (If e Switch)

Analise o código abaixo:

Exemplos. char c; int i=67;... c= A ; c=c+1; if (c== B )... c=i; i=c; i++; if (i>= C )...

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Este tutorial mostra como utilizar as ferramentas Send Mail e Web Commands.

DESCRIÇÃO DO TRABALHO - VERSÃO DE 29/04/ :00.

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Tabela ASCII de caracteres de controle

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Árvores Binárias - continuação

Algoritmos de Busca em Tabelas

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011

Registros. Técnicas de Programação. Rafael Silva Guimarães

Introdução à Programação Bacharelado em Sistemas de Informação 3ª Lista de Exercícios - Solução Procedimentos e Funções

Unidade IV: Ponteiros, Referências e Arrays

Persistência de Dados

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1

Solucionário de. Programação

BC0501 Linguagens de Programação

Prof. Esp. Adriano Carvalho

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Busca. Pesquisa sequencial

1 Resumo: Strings e vetores de caracteres. Departamento de Ciência da Computação IME/USP

Estrutura de Dados Básica

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

LINGUAGEM C. Estrutura básica de um programa

Componentes da linguagem C++

Q1 Q2 Q3 Nota. Departamento de Informática - PUC-Rio INF 1005 Programação I P4 28/06/2011. Aluno: Matrícula: Turma: _

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Resumo da Matéria de Linguagem de Programação. Linguagem C

1) <stdio.h> - Contém protótipos de funções da biblioteca padrão de entrada/saída e as informações utilizadas por elas.

Lista de Exercícios da 3ª Unidade. ( Ponteiros, Alocação dinâmica, Arquivos, Estruturas de Dados)

Algoritmos e Estruturas de Dados I 01/2013. Arquivos. Pedro O.S. Vaz de Melo

Capítulo 9. Vetores e Matrizes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Pilhas. Profa Morganna Diniz

Strings. Todas as funções apresentadas neste documento estão no arquivo de cabeçalho string.h.

Estruturas de entrada e saída

Transcrição:

1/5 Exercício 1 Um sistema de segurança militar, usado num submarino nuclear, controla o acesso de usuários a três subsistemas (armamento, navegação e comunicações) através da digitação do login do usuário e de sua senha. Cada usuário tem um certo privilégio de acesso a cada um dos três subsistemas; o privilégio definirá o que o usuário poderá fazer no sub-sistema específico. Você deve implementar, em linguagem de programação C, algumas funções deste sistema de segurança, atendendo completamente as especificações. Leia todas as especificações do programa antes de começar a implementar! a. Especificações gerais: o controle é representado através de uma tabela conforme o exemplo (Tabela 1), denominada Tabela de Controle de Acessos. Nenhuma variável global deve ser usada, tampouco macros ou constantes com #define. A tabela será representada no programa através de matrizes com os tipos apropriados; um máximo de três matrizes pode ser usado. As matrizes são definidas na função main (que não precisa ser implementada). Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento Privilégio Navegação Privilégio Comunicações lcalrissian 88aagh 1 0 2 organa 7ghav0 3 2 5 ackbar 4sithlo 8 8 5............... b. Função cadastra_usuario: Esta função criará a tabela de controle de acessos, com dados digitados por um administrador de sistema. A função deve solicitar a digitação do login, da senha e dos privilégios de acesso para cada usuário, continuamente, até que o administrador decida encerrar a entrada de dados. Gravar estes dados nas matrizes já definidas dentro da função main. A função deve prever um campo login de tamanho limite 12, o campo senha com tamanho máximo de 6, mas esta função deve ser capaz de trabalhar com tabelas com qualquer número de linhas (e este número não será digitado pelo usuário). c. Função lista_usuarios: imprime na tela o conteúdo da tabela de controle de acessos (que foi criada em outra função do programa), com um cabeçalho apropriado. A função deve prever campo login com tamanho máximo 12, campo senha com tamanho máximo 6 e qualquer número de linhas. d. Função pedido_acesso: ler, do teclado, o login e a senha do usuário. Esta função determinará se a senha digitada coincide com a senha armazenada na Tabela de Controle de Acessos. Caso positivo, a função deve retornar o valor do privilégio de acesso que o usuário tem para o sub-sistema; este subsistema em questão será passado para a função como parâmetro. Se a senha não for válida ou o login não for encontrado na Tabela, a função deve retornar o valor -1.

2/5 Solução: / SISTEMA DE SEGURANÇA DE SUBMARINO NUCLEAR Privilegio Login Senha Sub 1 Sub 2 Sub 3 O privilégio mínimo para acesso aos subsistemas é: Sub-Sistema Privilégio Armamento 8 Navegação 3 Comunicações 4 #include <stdio.h> #include <stdlib.h> #include <string.h> //Protótipos int pedido_acesso(char login[][13], char senha[][7], int privilegio[][3], int linha, int subsis); void cadastra_usuario(char login[][13], char senha[][7], int privilegio[][3], int linha); void lista_usuarios(char login[][13], char senha[][7], int privilegio[][3], int linha); void mensagem(int privsubsis, int priv); int main() { char login[3][13]={0, senha[3][7]={0; int privilegio[3][3]={0; int escolha, priv; 1: definição matriz 1: chamar funções opção 1, 2, saída. 1: chamar funções de acesso sub-sistema while (1) { printf("\n\nsistema de Controle de Acesso - Submarino Nuclear\n\n"); printf("1 - Cadastrar usuarios, senhas, privilegios"); printf("\n2 - Listar usuarios, senhas, privilegios"); printf("\n3 - Acessar Sub-sistema Armamentos"); printf("\n4 - Acessar Sub-sistema Navegacao"); printf("\n5 - Acessar Sub-sistema Comunicacoes"); printf("\n0 - Sair do programa"); printf("\nopcao: "); scanf("%d", &escolha); switch (escolha) { case 1: cadastra_usuario(login, senha, privilegio, 3); case 2: lista_usuarios(login, senha, privilegio, 3); case 3: priv=pedido_acesso(login, senha, privilegio, 3, 0);

3/5 mensagem(8, priv); case 4: priv=pedido_acesso(login, senha, privilegio, 3, 1); mensagem(3, priv); case 5: priv=pedido_acesso(login, senha, privilegio, 3, 2); mensagem(4, priv); case 0: return 0; default: printf("\nopcao invalida."); / CADASTRA USUARIOS, SENHAS E PRIVILEGIOS void cadastra_usuario(char login[][13], char senha[][7], int privilegio[][3], int linha) { int i; char p; char cont; for (i=0; i<linha; i++) { printf("\nusuario %d:", i); printf("\n\tlogin: "); 1: passagem parâmetros 1: loop controlado pelo usuário, mas com limite para evitar estouro das matrizes 1: ler login e senha 1: ler privilégios fgets(login[i], 13, stdin); //limita entrada a 12 letras, pois última posição (coluna) tem de ser reservado para \0 //limpa resquícios deixados no buffer printf("\tsenha: "); fgets(senha[i], 7, stdin); /É preciso remover o caractere newline do string digitado. strchr busca o char '\n' (newline) no string digitado. O ponteiro p é igualado ao retorno desta função dentro do if. Se o ponteiro não for NULL (isto é, o newline foi encontrado), então o conteúdo da memória apontado por p é substituído por \0. Ou seja, o newline é substituído por \o no string nome[i]. if ((p=strchr(login[i], '\n'))!= NULL) if ((p=strchr(senha[i], '\n'))!= NULL) printf("\tprivilegio Armamentos: "); scanf("%d", &privilegio[i][0]); printf("\tprivilegio Navegacao: "); scanf("%d", &privilegio[i][1]); printf("\tprivilegio Comunicacoes: "); scanf("%d", &privilegio[i][2]); printf("\ndigite 'x' para sair, qualquer outra para continuar a entrada: "); scanf("%c", &cont); if (cont == 'x') return;

4/5 / LISTA USUARIOS, SENHAS E PRIVILEGIOS void lista_usuarios(char login[][13], char senha[][7], int privilegio[][3], int linha) { int i, j; 1: funcionamento requerido printf("\n\ntabela de Controle de Acessos\n\n"); printf("\t\t\t\tprivilegios\n"); printf("login\t\tsenha\tsubsist 1 SubSist 2 SubSist 3\n"); for (i=0; i<linha; i++) { printf("\n%12s\t%6s\t", login[i], senha[i]); for (j=0; j<3; j++) { printf("\t%d", privilegio[i][j]); / TESTA LOGIN E SENHA, DEVOLVE PRIVILEGIO ACESSO int pedido_acesso(char login[][13], char senha[][7], int privilegio[][3], int linha, int subsis) { char loginl[13], senhal[7]; char p; int i=0; printf("\nlogin: "); fgets(loginl, 13, stdin); printf("\nsenha: "); fgets(senhal, 7, stdin); //remove newline \n se houver if ((p=strchr(loginl, '\n'))!= NULL) if ((p=strchr(senhal, '\n'))!= NULL) 1: passagem parâmetros 1: ler login e senha 1: busca por login (strcmp) 1: teste se senha confere (strcmp) 1: retorno de privilégio ou -1 //faz busca na lista de usuarios e compara senha while (i<linha) { if (strcmp(loginl, login[i])==0) { //login encontrado if (strcmp(senhal, senha[i])==0) return privilegio[i][subsis]; //senha confere; retorne privilégio else return -1; //login encontrado, mas senha não confere; retorne imediatamente com -1 i++; //login ainda não encontrado; continue a busca return -1; //login não encontrado na lista; retorne com -1 / COMPARA PRIVILEGIOS E MOSTRA MENSAGEM void mensagem(int privsubsis, int priv) { if (privsubsis < priv) printf("\nacesso liberado."); else if (priv == -1) 1: funcionamento requerido

5/5 printf("\nsenha invalida ou usuario inexistente."); else printf("\nacesso negado.");