polska Posted July 23, 2012 at 04:38 PM Report Share #469777 Posted July 23, 2012 at 04:38 PM (edited) Boas pessoal, estava a resolver o topas 2008 quando me deparei com um output que não percebi, eu tentei várias soluções mas mesmo parecendo estar correcto, não estava... Reina grande confusão na quinta desde que Jacó chegou. Jacó aprendeu a imitar todos os animais na perfeição - ``piupiu'', ``muuu'', ``miao'', ``cocorocoo'', ``cacaraca'', ``quaqua'', ``auau'', ``meemee'', e ``jaco''. Um extenso repertório! e até faz composições com duas ou três palavras (``meemeeauau'', ``piupiumuu'', ``auaujacoquaqua'', ``cocorocoocacaraca'', etc). O dono começou a achar melhor oferecer Jacó, mas a sua afeição ao bicho impedia-o de tomar uma decisão. Num dia de menos trabalho, fez um registo da situação. Sem se enganar, anotou o número de patas do animal que fez barulho e o barulho que fazia: 2piupiu2meemee4muuu4miao2cocorocoo4meemee2jacocacaraca2auau2jaco2miao 2piupiuquaquajaco4miao4auau2piupiumeemee4muuu4meemee2piupiu2cacaraca... No fim, pensando melhor, viu que não sabia quais eram os registos do papagaio. Mas, nem tudo estava perdido. Tarefa Escrever um programa que, dada uma sequência de registos terminada por 0, cada um dos quais numa linha diferente, indique o número de registos total e o número mínimo e máximo dos do papagaio (escritos numa linha, separados por um espaço, e terminando com mudança de linha). Exemplo 1 Input 2 piupiu 2 meemee 4 muuu 2 jacoquaqua 4 auau 4 miao 0 Output 6 2 3 O problema é muito simples e eu tenho os outputs correctos, mas mesmo assim dá wrong answser, eu tenho quase a certeza que o problema é no ultimo inteiro do output... Eu não percebo o que eles querem com o número máximo de registo do papagaio... o mínimo é quantos sons foram produzidos pelo papagaio, mas o máximo?? Alguma ajuda? Edited July 23, 2012 at 04:39 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 05:12 PM Report Share #469783 Posted July 23, 2012 at 05:12 PM (edited) Alguma ajuda? Ajuda: quantas patas tem o papagaio? Edit: pode ter sido o papagaio a emitir o "som" abaixo? 4 auau Pode ter sido a ovelha a emitir o "som" abaixo? 2 meemee Edited July 23, 2012 at 05:20 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 05:34 PM Author Report Share #469784 Posted July 23, 2012 at 05:34 PM (edited) Ajuda: quantas patas tem o papagaio? Edit: pode ter sido o papagaio a emitir o "som" abaixo? 4 auau Pode ter sido a ovelha a emitir o "som" abaixo? 2 meemee 2 nao nao Ou seja, o número máximo é o número de registos que podiam ter sido do papagaio, mesmo não tendo sido, é isso ? Se sim, eu já tentei isso, mas continuo com wrong answer... Só se estou a trocar patas nos outros animais... //ler som scanf("%[^\n]", som); if(som[0] != '0') { //tratamento de input total++; found = false; switch(som[0]) { case '2': if(strcmp(som, "2 piupiu") == 0 || strcmp(som, "2 cocorocoo") == 0 || strcmp(som, "2 cacaraca") == 0 || strcmp(som, "2 quaqua") == 0 ) found = true; break; case '4': if(strcmp(som, "4 meemee") == 0 || strcmp(som, "4 miao") == 0 || strcmp(som, "4 auau") == 0 || strcmp(som, "4 muuu") == 0 ) found = true; break; } if(!found) jaco++; if(som[0] == '2') jaco1++; //limpar buffer scanf("%*[^\n]"); scanf("%*c"); } }while(som[0] != '0'); printf("%d %d %d\n", total, jaco, jaco1); Edited July 23, 2012 at 05:38 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 05:50 PM Report Share #469787 Posted July 23, 2012 at 05:50 PM (edited) Faltou-te a parte do "até faz composições com duas ou três palavras". Nenhuma das tuas condicoes considera a linha de exemplo 2 jacoquaqua Edited July 23, 2012 at 05:51 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 05:52 PM Author Report Share #469788 Posted July 23, 2012 at 05:52 PM (edited) Faltou-te a parte do "até faz composições com duas ou três palavras". Nenhuma das tuas condicoes considera a linha de exemplo 2 jacoquaqua porque eu no switch já comparo com os casos que não pode ter sido o papagaio a emitir.. Se não encontrar, é porque foi um som emitido pelo papagaio, como jacoquaqua, e conta na var jaco ... Edited July 23, 2012 at 05:53 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 05:55 PM Report Share #469789 Posted July 23, 2012 at 05:55 PM O "som" jacoquaqua tem, obrigatoriamente, de ter sido feito pelo papagaio. A unica duvida que eu tenho (mas suponho que nao aparece nos textos do TOPAS) e se uma galinha pode fazer composicoes ou so o papagaio ... 2 cacaracacacaracacacaraca What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 06:01 PM Author Report Share #469790 Posted July 23, 2012 at 06:01 PM (edited) O "som" jacoquaqua tem, obrigatoriamente, de ter sido feito pelo papagaio. Exacto... if(strcmp(som, "2 piupiu") == 0 || strcmp(som, "2 cocorocoo") == 0 || strcmp(som, "2 cacaraca") == 0 || strcmp(som, "2 quaqua") == 0 ) found = true; break; case '4': if(strcmp(som, "4 meemee") == 0 || strcmp(som, "4 miao") == 0 || strcmp(som, "4 auau") == 0 || strcmp(som, "4 muuu") == 0 ) Eu aqui comparo o som emitido com todos os sons que não podem ter sido emitidos pelo papagaio, ou seja, se não encontrar nenhum, é porque foi o papagaio, e incrementa sempre na variavel de registo mínimo... A variável de registos máximos aumenta se foi emitido um som com numero de patas 2. É suposto estar correcto o problema... Eu penso que não falta nada no enunciado, uma informação para resolver o problema não pode faltar... inclusive em algumas questões colocadas no servidor eles respondem que é preciso ler com cuidado.. Uma das respostas deles foi: Pergunta: eu já li e também ja pedi ajuda mas o senhor que me veio explicar não consegui dizer nada. E disse-me para perguntar aqui. No problema pede o número de registos, o mínimo e o máximo dos do papagaio e se for relativo ao número que aparece atrás do som que ele faz não aparece nenhum 3 no exemplo dado. Mas está um 3 no Output e essa é a minha dúvida Resposta: O numero de patas é 2 ou 4. O numero de que se fala diz respeito às intervenções do papagaio! Edited July 23, 2012 at 06:07 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 06:06 PM Report Share #469791 Posted July 23, 2012 at 06:06 PM (edited) Os numeros do resultado exemplo significam 6 ==> linhas de input 2 ==> sons que obrigatoriamente foram emitidos pelo papagaio (2 meemee + 2 jacoquaqua) 3 ==> sons que podia ter sido o papagaio (os de 2 patas) E ainda: nenhum dos teus strcmp() compara com "jaco". Edit: estou a assumir que "jaco" e um som natural para um animal especifico embora nao faca ideia qual seja esse animal Edited July 23, 2012 at 06:08 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 06:10 PM Author Report Share #469793 Posted July 23, 2012 at 06:10 PM (edited) E ainda: nenhum dos teus strcmp() compara com "jaco". Não preciso de comparar, tem este output lá também : 2 piupiu 2 auau 2 jaco 2 piupiumiaoquaqua 4 meemee 4 miao 2 auaujacomiao 4 muuu 0 Output 8 4 5 Se eu comparasse dava mal.. Edited July 23, 2012 at 06:10 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 06:12 PM Report Share #469795 Posted July 23, 2012 at 06:12 PM (edited) O animal que emite o som "jaco" tem 4 patas! Edit 8 linhas de input 4 papagaio: 2 auau + 2 jaco + 2 piupiumiaoquaqua + 2 auaujacomiao 5 duas patas Edit2: deve ser o jacare -- LOL Edited July 23, 2012 at 06:16 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 06:18 PM Author Report Share #469797 Posted July 23, 2012 at 06:18 PM O animal que emite o som "jaco" tem 4 patas! Edit 8 linhas de input 4 papagaio: 2 auau + 2 jaco + 2 piupiumiaoquaqua + 2 auaujacomiao 5 duas patas Edit2: deve ser o jacare -- LOL LOOOOL! 😄 É bem provável, o que me dá que pensar é que mesmo assim dá wrong answer! Porra! xD if(strcmp(som, "4 meemee") == 0 || strcmp(som, "4 miao") == 0 || strcmp(som, "4 auau") == 0 || strcmp(som, "4 muuu") == 0 || strcmp(som, "4 jaco") == 0) found = true; Eu pensei que jaco fosse mesmo o papagaio.. não outro animal... Mas nem dá de uma nem de outra maneira! xD Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 06:22 PM Report Share #469799 Posted July 23, 2012 at 06:22 PM Nos teus strcmp, quando o som for "2 piupiumiao", a comparacao seguinte falha e nao obriga esse som a ter sido produzido pelo papagaio strcmp(som, "2 piupiu") What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 06:27 PM Author Report Share #469800 Posted July 23, 2012 at 06:27 PM Nos teus strcmp, quando o som for "2 piupiumiao", a comparacao seguinte falha e nao obriga esse som a ter sido produzido pelo papagaio strcmp(som, "2 piupiu") Como assim? é normal que falhe não é? São strings diferentes, não encontra e incrementa.. Comigo esta a dar certo Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 06:37 PM Report Share #469801 Posted July 23, 2012 at 06:37 PM (edited) O meu codigo (dentro dum spoiler: acaba o teu antes de veres este) ficou assim #include <stdio.h> #include <string.h> int main(void) { char buffer[100] = {0}; unsigned minjaco = 0, maxjaco = 0, count = 0; while (fgets(buffer, sizeof buffer, stdin)) { if (buffer[0] == '0') break; count++; if (buffer[0] == '4') continue; maxjaco++; if (buffer[2] == 'a') minjaco++; else if (buffer[2] == 'm') minjaco++; else if (buffer[2] == 'j') minjaco++; else if ((buffer[2] == 'c') && (buffer[10] != '\n') && (buffer[11] != '\n')) minjaco++; else if ((buffer[2] == 'p') && buffer[8] != '\n') minjaco++; else if ((buffer[2] == 'q') && buffer[8] != '\n') minjaco++; memset(buffer, 0, sizeof buffer); } printf("%d %d %d\n", count, minjaco, maxjaco); return 0; } O meu codigo assume que sons repetidos so o papagaio pode fazer, isto e, uma galinha nao pode fazer 2 cacaracacacaraca Comigo esta a dar certo Se calhar sao os teus scanf()s A funcao scanf() nao e aconselhada para inputs variados. Usa fgets() para ler uma linha completa. Mete, imediatamente a seguir ao teu scanf() um print de debug, para veres o que o teu programa esta a considerar scanf("%[^\n]", som); printf("debug som tem [%s]\n", som); Edited July 23, 2012 at 06:42 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 06:47 PM Author Report Share #469802 Posted July 23, 2012 at 06:47 PM (edited) O meu codigo (dentro dum spoiler: acaba o teu antes de veres este) ficou assim #include <stdio.h> #include <string.h> int main(void) { char buffer[100] = {0}; unsigned minjaco = 0, maxjaco = 0, count = 0; while (fgets(buffer, sizeof buffer, stdin)) { if (buffer[0] == '0') break; count++; if (buffer[0] == '4') continue; maxjaco++; if (buffer[2] == 'a') minjaco++; else if (buffer[2] == 'm') minjaco++; else if (buffer[2] == 'j') minjaco++; else if ((buffer[2] == 'c') && (buffer[10] != '\n') && (buffer[11] != '\n')) minjaco++; else if ((buffer[2] == 'p') && buffer[8] != '\n') minjaco++; else if ((buffer[2] == 'q') && buffer[8] != '\n') minjaco++; memset(buffer, 0, sizeof buffer); } printf("%d %d %d\n", count, minjaco, maxjaco); return 0; } O meu codigo assume que sons repetidos so o papagaio pode fazer, isto e, uma galinha nao pode fazer 2 cacaracacacaraca Se calhar sao os teus scanf()s A funcao scanf() nao e aconselhada para inputs variados. Usa fgets() para ler uma linha completa. Mete, imediatamente a seguir ao teu scanf() um print de debug, para veres o que o teu programa esta a considerar scanf("%[^\n]", som); printf("debug som tem [%s]\n", som); Com os printf's, mostrava que a variavel ficava sempre com o input correcto... Eu usei scanf neste problema, porque o meu fgets estava a ler mal o input, por exemplo: //input do { //ler som fgets(som, sizeof som, stdin); if(som[0] != '0') { //tratamento de input total++; found = false; switch(som[0]) { case '2': if(strcmp(som, "2 piupiu") == 0 || strcmp(som, "2 cocorocoo") == 0 || strcmp(som, "2 cacaraca") == 0 || strcmp(som, "2 quaqua") == 0 ) found = true; break; case '4': if(strcmp(som, "4 meemee") == 0 || strcmp(som, "4 miao") == 0 || strcmp(som, "4 auau") == 0 || strcmp(som, "4 muuu") == 0 || strcmp(som, "4 jaco") == 0) found = true; break; } if(!found) jaco++; if(som[0] == '2') jaco1++; } }while(som[0] != '0'); printf("%d %d %d\n", total, jaco, jaco1); Aqui uso o fgets, e o output é 6 6 7...Ou seja, falha as comparações.. Enquanto se mudar para gets não posso porque o servidor não permite a utiização dessa função, e se usar scanf já dá o output correcto.. Já agora, o código está correcto, mas não percebo, o meu código também assume que todos os sons repetidos são feitos pelo papagaio, porque o 'found' iria ser false ... Será mesmo do scanf? Edited July 23, 2012 at 06:52 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 06:52 PM Report Share #469803 Posted July 23, 2012 at 06:52 PM (edited) mudar para gets NAO! Eu nao sugeri isso! Eu sugeri que mudasses para fgets(). Experimenta o print de debug ... Edit: Atencao que o fgets mantem o '\n' no fim da string! // fgets(...) // strcmp(..., "2 piupiu\n") Edited July 23, 2012 at 06:55 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 07:06 PM Author Report Share #469804 Posted July 23, 2012 at 07:06 PM (edited) NAO! Eu nao sugeri isso! Eu sugeri que mudasses para fgets(). Experimenta o print de debug ... ahahaha, eu mesmo assim não usaria, é pouco seguro.. Mas é como disse no post anterior, eu inicialmente usei fgets, mas não estava a ler direito o input e então não fazia as comparações direitas... Acabei de mudar o problema e mesmo assim dá problema, por exemplo, se som for 2 piupiu, ao comparar com 2 piupiu, diz que é diferente e aumenta no jaco while(fgets(som, sizeof som, stdin)) { if(som[0] == '0') break; total++; if(som[0] == '4') continue; jaco1++; if( (strcmp(som, "2 piupiu")!=0) && (strcmp(som, "2 cocorocoo")!=0) && (strcmp(som, "2 cacaraca")!=0) && (strcmp(som, "2 quaqua")!=0) ) jaco++; } EDIT: Conssegui fazer as comparações direitas, mas agora não posso submeter uma vez que já foi aceite xD : #include <stdio.h> #include <string.h> int main() { char som[100] = {0}; int total, jaco, jaco1; total = jaco = jaco1 = 0; //input while(fgets(som, sizeof som, stdin)) { if(som[0] == '0') break; total++; if(som[0] == '4') continue; jaco1++; if( (strcmp(som, "2 piupiu\n")!=0) && (strcmp(som, "2 cocorocoo\n")!=0) && (strcmp(som, "2 cacaraca\n")!=0) && (strcmp(som, "2 quaqua\n")!=0) ) jaco++; memset(som, 0, sizeof som); } printf("%d %d %d\n", total, jaco, jaco1); return 0; } Agora este também daria correcto certo? Sons repetidos são considerados como emitidos pelo papagaio.. Edited July 23, 2012 at 07:41 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
pmg Posted July 23, 2012 at 07:45 PM Report Share #469811 Posted July 23, 2012 at 07:45 PM EDIT: Conssegui fazer as comparações direitas... Conceito a reter desta experiencia: o scanf nao presta para input! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
polska Posted July 23, 2012 at 07:47 PM Author Report Share #469812 Posted July 23, 2012 at 07:47 PM Conceito a reter desta experiencia: o scanf nao presta para input! CERTO 😄 Obrigado pela ajuda Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 23, 2012 at 07:48 PM Report Share #469813 Posted July 23, 2012 at 07:48 PM Edit2: deve ser o jacare -- LOL gambozino ? 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now