fvox - Challenge 2 - FULL - Perl

Ir em baixo

fvox - Challenge 2 - FULL - Perl

Mensagem  fvox em Ter Jul 19, 2011 6:51 pm

Hi.

Caras, estou no trabalho, mas voltando, termino de fazer os dois últimos hahahah. Saio as 7!

1 - Faça um Programa que leia um número e exiba o dia correspondente da semana (Começando de domingo ). Caso você digite outro valor deve aparecer valor inválido.

1
2
3
4
my @d = ('domingo', 'segunda', 'terca', 'quarta', 'quinta', 'sexta', 'sabado'); #lista que armazena o nome dos dias da semana
print 'Digite um numero de 1 a 7 referente ao dia da semana: '; #Perguntando ao usuario o dia semana
my $i = int(<STDIN>); #Convertendo para inteiro para remover caracteres indesejaveis
print 'Dia ' . $i . ' eh ' . $d[$i - 1] . "\n"; #Estou buscando dentro da lista o valor $i - 1, pois ela começa com 0 e termina com 6


2 - Faça um Programa que peça um número correspondente a um determinado ano e em seguida informe se este ano é ou não bissexto.

1
2
3
4
5
6
print 'Digite uma data com o seguinte formato dd/mm/aaaa: ';
<<"#";
Ele aguarda a entrada do usuario e verifica atraves de expressao regular se o formato eh 00/00/0000, aceitando apenas numeros
Se passar na verificacao, ele utiliza o ultimo match na regexp $3 e aplica as regras de ano bissexto, imprimindo em seguida atraves do operador ternario
#
print 'Data ' . ((($3%400==0) || ($3%4==0&&$3%100!=0))?'Valida -':'Invalida - Nao') . " eh bissexto\n" if <STDIN> =~ /(\d{2})\/(\d{2})\/(\d{4})/;


3 - Faça um programa que peça uma nota, entre zero e dez. Mostre uma mensagem caso o valor seja inválido e continue pedindo até que o usuário informe um valor válido.


1
2
3
4
5
6
7
8
while(1){ #loop eterno
print 'Digite uma nota de 0 a 10 : ';
my $i = int(<STDIN>); #captura a entrada do usuario e converte para inteiro, assim removendo dados indesejados
if($i > 0 && $i < 10){ #se for maior de 0 e menor que 10...
print "Valor correto\n";
last; #sai do while e prossegue com a execução do programa
}
}


4 - Faça um programa que leia um nome de usuário e a sua senha e não aceite a senha igual ao nome do usuário, mostrando uma mensagem de erro e voltando a pedir as informações.


1
2
3
4
5
6
7
8
9
while (1){
#capturando as entradas do usuario. a funcao chomp() removera as quebras de linha do handle
print 'Digite seu login: ';
chomp(my $login = <STDIN>);
print 'Digite sua senha: ';
chomp(my $senha = <STDIN>);
last if $login ne $senha; #sai do loop se login for diferente de senha
print "Erro, a senha nao pode ser igual ao login\n"; #mensagem de erro caso nao tenha saido do loop
}



5 - Faça um programa que calcule a quantidade dinheiro gasto por um fumante com os seguintes dados:


1
2
3
4
5
6
7
8
9
#capturando a informacao do usuario e removendo a quebra de linha com chomp
print 'O numero de anos que ele fuma: ';
chomp(my $a = <STDIN>);
print 'O numero de cigarros fumados por dia: ';
chomp(my $c = <STDIN>);
print 'O preco da carteira de cigarro:';
chomp(my $p = <STDIN>);
#considerando que o box eh marlboro light que eu fumo e que vem 20, eu pego o preco de cada cigarro solto, multiplico pela quantidade de cigarros diarios e em seguida pela quantidade de dias do ano
print "\nO fumante gastou R\$ " . (($p/20)*$c*(365*$a)) . "\n";



6 - Escreva um algoritmo para encontrar o número do telefone correspondente a um determinado
nome, na seguinte lista telefônica:


1
2
3
4
my %lt = ('Fulano', '334-45566', 'Cicrano', '112-23344', 'Beltrano', '551-12233', 'Ze', '443-34422', 'Toinho', '661-12233', 'Luizinho', '776-65577'); #estrutura hash para a lista telefonica
print 'Digite o nome: ';
chomp($n = <STDIN>); #capturando a entrada do usuario e removendo a quebra de linha
print (defined($lt{$n}) ? 'Nome: ' . $n . "\tTel: " . $lt{$n} . "\n" : "Telefone nao encontrado na lista telefonica!\n"); #se esta na lista, mostra. senao, fail!



7 - Faça um Programa que leia dois vetores com 10 elementos cada podendo ser strings ou números. Gere um terceiro vetor de 20 elementos, cujos valores deverão ser compostos pelos elementos intercalados dos dois outros vetores.


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
my (@v1, @v2, @v3); #declarando os arrays
for( 1 .. 20 ){ #lerei 20 elementos, para os dois vetores
chomp($i = <STDIN>); #removendo a quebra de linha da entrada do usuario
my $a = (($_ <= 10) ? \@v1 : \@v2); #definindo uma arrayref conforme o loop
push $a, $i; #colocando dentro do array o input
}
for( 1 .. 2){ #misturando os dois vetores...
my $a = ($_ == 1 ? \@v2 : \@v1); #arrayref conforme o loop
for (0 .. 9){ #percorrendo o vetor
push @v3, $a->[$_]; #inserindo no vetor 3
}
}
$, = ', '; #separador
print @v3; #mostrando o novo vetor


8 - Utilizando vetores faça um programa que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são:


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use feature qw(say switch); #importando a funcao say e o given
my @qs = ('Telefonou para a vitima?', 'Esteve no local do crime?', 'Mora perto da vitima?', 'Devia para a vitima?', 'Ja trabalhou com a vitima?'); #lista de perguntas
my $c = 0; #contador de perguntas verdadeiras
foreach my $q (@qs){ #percorrendo a lista de perguntas
print $q . ' [s/n]: ';
chomp(my $i = <STDIN>); #chomp para remover a quebra de linha do input
$c++ if $i eq 's'; #aumenta o contador se a resposta for 's'
}
print 'Voce eh ';
given($c){ #caso o contador seja...
when (2) { say 'suspeito' } #suspeito para 2
when ([3,4]) { say 'cumplice' } #cumplice para 3 e 4
when (5) { say 'o assassino' } #assassino para 5
default { say 'inocente' } #inocente para o resto ;p
}



9 - Faça um programa que leia 2 strings e informe o conteúdo delas seguido do seu comprimento. Informe também se as duas strings possuem o mesmo comprimento e são iguais ou diferentes no conteúdo. Exemplo:


1
2
3
4
5
print 'String 1: ';
chomp(my $s1 = <STDIN>); #chomp para remover quebra de linha
print 'String 2: ';
chomp(my $s2 = <STDIN>); #chomp para... denovo?
print 'Tamanho de String 1 "' . $s1 . '": ' . length($s1) . " caracteres\nTamanho de String 2 \"" . $s2 . '": ' . length($s2) . " caracteres\nAs duas strings sao de tamanhos " . (length($s1) == length($s2) ? 'iguais' : 'diferentes') . ".\nAs duas strings possuem conteudos " . ($s1 eq $s2 ? 'iguais' : 'diferentes') . ".\n"; #length para o tamanho da string e printando tudo!




Chegando em casa eu faço o 10 e o moderate/hardcore pra brincar também =D

[]'s


Última edição por fvox em Qua Jul 20, 2011 3:00 pm, editado 1 vez(es)
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

fvox

Mensagem  Z3r0 em Ter Jul 19, 2011 7:19 pm

Bom te ver por aqui...... então se quer brincar no hardcore e moderate, muda o título do tópico para FULL ao invés de light =]
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  fvox em Qua Jul 20, 2011 4:18 pm

Hi.

Editei o primeiro post com o exercício 9, e farei o 10 mais tarde porque é meio grandinho e to com preguiça...
Enquanto isso, inicio o moderate. =P

MODERATE:

1 - Faça um programa que dado um vetor de elementos com uma repetição, encontre o elemento repetido. Ou seja, encontrar o elemento que aparece duas vezes dentro de um vetor. Detalhe: Você só pode usar um loop e os elementos exatamente são: [1,2,3,4,1,5].


1
2
3
4
5
my (@a, %tmp) = ((1,2,3,4,1,5), undef); #vetor pedido no desafio e hash temporaria para contabilizar
for ( 0 .. $#a){ #percorrendo a lista
$tmp{$a[$_]}++; #incrementando na hash
print 'Elemento repetido: ' . $a[$_] . "\n" if $tmp{$a[$_]} == 2; #se a quantidade for igual à 2, mostra a msg
}



2 - Já brincou de pedra, papel, tesoura? Então vamos brincar disto em programação. Faça um programa que simula dois jogadores brincando de pedra , papel, tesoura levando em conta os seguintes valores correspondentes à brincadeira:


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use feature 'switch';
my (%p1, %p2); #declarando as hashs dos players
#perguntando o nome dos jogadores e jogando pra hash dos players. a funcao chomp removera a quebra de linha do input
print 'Digite o nome do jogador 1: ';
chomp($p1{nome} = <STDIN>);
print 'Digite o nome do jogador 2: ';
chomp($p2{nome} = <STDIN>);

while(1){ #loop infinito para caso dê empate
$p1{atk} = &getAtk(); #inserindo na hash uma hashref com as informacoes de papel, pedra ou tesoura
$p2{atk} = &getAtk();
redo if $p1{atk}{nome} eq $p2{atk}{nome}; #se o sorteio for igual para ambos, refaz o sorteio
print 'Jogador ' . $p1{nome} . ' possui ' . $p1{atk}{nome} . "\nJogador " . $p2{nome} . ' possui ' . $p2{atk}{nome} ."\nO vencedor foi o jogador " . ($p1{atk}{win} eq $p2{atk}{nome} ? $p1{nome} . "\n" . ucfirst $p1{atk}{nome} . ' x ' . ucfirst $p2{atk}{nome} . ' = ' . ucfirst $p1{atk}{nome} : $p2{nome} . "\n" . ucfirst $p2{atk}{nome} . ' x ' . ucfirst $p1{atk}{nome} . ' = ' . ucfirst $p2{atk}{nome}) . "\n"; #imprime e calcula quem ganhou
last; #sai do while, terminando assim a execucao do programa
}

sub getAtk {
my %types = ( #hash contendo as informações
pedra => {nome => 'pedra', win => 'tesoura'}, #hashref para nome e quem vence quem
papel => {nome => 'papel', win => 'pedra'},
tesoura => {nome => 'tesoura', win => 'papel'}
);

given(int(rand 3)){ #sorteio
when(0) { return $types{pedra} } #caso seja valor x, escolha xxxx...
when(1) { return $types{papel} }
when(2) { return $types{tesoura} }
default { return 0 }
}
}




3 - Crie um programa que preencha aleatoriamente um vetor do tipo inteiro de 10 posições com números entre 0 e 99, peça pro usuário digitar um número e busque o número digitado no vetor. Se encontrado avise em que posição do vetor o número se encontra, se não encontrado avise que o número não existe e retorne para a pergunta inicial.


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
my @v; #declarando o vetor
push @v, int(rand 99) for 0 .. 9; #preenchendo-o com inteiros aleatorios

L: while(1){ #loop infinito para que as perguntas sejam repetidas
print 'Digite um numero: ';
my $i = int(<STDIN>); #convertendo o input para inteiro para remover caracteres indesejados
for(0 .. $#v){ #percorrendo o vetor
if($i == $v[$_]){ #verificando se o input eh igual ao item
print 'O numero ' . $i . ' esta na ' . qw(primeira segunda terceira quarta quinta sexta setima oitava nona decima)[$_] . " posicao\n";
last L; #para a execucao do programa
}
}
print "O numero nao existe\nVoltando a pergunta\n"; #nada foi encontrado! voltando ao inicio do while
}




4 - Em uma Universidade, alunos estão com diculdade em calcular a média das notas de três provas aplicadas em um trimestre. Faça um programa que peça a nota das três avaliações sendo que a média nesta Universidade, é 6.0. Antes de mais nada, fiquem atentos aos detalhes:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use List::Util 'sum'; #importando a funcao sum
my @notas; #declarando o array
while(1){ #loop inifinito
for ( 1 .. 2){ #loop para pedir a nota das provas
print 'Insira a nota da prova ' . $_ . ': ';
push @notas, <STDIN> + 0; #inserindo no array @notas o valor das notas. o + 0 serve para remover o \n sem peder os dados de float
}
if(sum(@notas)/@notas >= 6 ){ #se a media do array for maior ou igual a 6
print "Parabens, voce foi aprovado!\n";
}
elsif(sum(@notas)/@notas <= 4){ #se a media for menor ou igual a 4
print "A universidade nao aceita nota menor ou igual a 4 :(\n";
}
else { #senao precisou fazer uma terceira prova
print 'Voce precisou fazer uma terceira prova. Quanto voce tirou nela? ';
push @notas, <STDIN> + 0; #inserindo a nova nota no array
if(sum(@notas)/@notas >= 6){ #calculando a media
print "Parabens, voce foi aprovado!\n";
}
else { #pwned
print "Reprovado por nota\n";
}
}
print "\n"; #quebra de linha para voltar ao inicio do while
}




Última edição por fvox em Seg Jul 25, 2011 4:46 pm, editado 4 vez(es)
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  51L3N7 em Qua Jul 20, 2011 4:25 pm

Boa =D
Mas ainda falta editar o nome do tópico, trocando o Light pelo Full.
avatar
51L3N7

Mensagens : 18
Data de inscrição : 06/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  fvox em Qua Jul 20, 2011 4:29 pm

51L3N7 escreveu:Boa =D
Mas ainda falta editar o nome do tópico, trocando o Light pelo Full.

Não pretendo concorrer como full, se é que tem diferença... Mas já editaram por mim. =P
Estou fazendo mais por diversão/espalhar o perl mundo a fora hahahah.

Valeuz. ;-)
[]'s
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  Op@alo em Qua Jul 20, 2011 6:32 pm

fvox escreveu:
51L3N7 escreveu:Boa =D
Mas ainda falta editar o nome do tópico, trocando o Light pelo Full.

Não pretendo concorrer como full, se é que tem diferença... Mas já editaram por mim. =P
Estou fazendo mais por diversão/espalhar o perl mundo a fora hahahah.

Valeuz. ;-)
[]'s
eu pretendo aprender Perl =]
avatar
Op@alo

Mensagens : 67
Data de inscrição : 02/07/2011
Idade : 26
Localização : Parnamirim-RN

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  Z3r0 em Qua Jul 20, 2011 6:41 pm

Op@alo escreveu:eu pretendo aprender Perl =]

COm o conhecimento forte em C e o aprimoramento usando POO em C++, você terá a base que precisa para aprender qualquer linguagem.
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  Op@alo em Qua Jul 20, 2011 10:44 pm

Z3r0 escreveu:
Op@alo escreveu:eu pretendo aprender Perl =]

COm o conhecimento forte em C e o aprimoramento usando POO em C++, você terá a base que precisa para aprender qualquer linguagem.
POO pode ser em Python ?
avatar
Op@alo

Mensagens : 67
Data de inscrição : 02/07/2011
Idade : 26
Localização : Parnamirim-RN

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  Z3r0 em Qua Jul 20, 2011 11:48 pm

Sim mas...não tem muito sentido você começar em C , e pular pra python pra aprender POO. Lembrando que python assim como java e outras, são linguagens que foram criadas a partir do C++ que por sua vez vem de C.
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: fvox - Challenge 2 - FULL - Perl

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum