Jump to content

Leaderboard

  1. CrominhO

    CrominhO

    Member


    • Points

      7

    • Content Count

      1,350


  2. joaosraposo

    joaosraposo

    New Member


    • Points

      4

    • Content Count

      5


  3. Nuno Silva

    Nuno Silva

    New Member


    • Points

      2

    • Content Count

      15


  4. Sergio.

    Sergio.

    Member


    • Points

      2

    • Content Count

      100



Popular Content

Showing content with the highest reputation since 07/21/2019 in all areas

  1. 4 points
    Boa tarde a todos, Do nosso lado estamos a utilizar o soap client em PHP e a solução que encontrámos passou pela combinação dos seguintes três certificados: .pem do cliente (599999999.pem) DGITA_Issuing_CA2.pem portaldasfinancasgovpt.pem Combinámos os três certificados realizando o copy/past dos certificados DGITA_Issuing_CA2.pem e portaldasfinancasgovpt.pem para dentro do ficheiro .pem do cliente (599999999.pem). Utilizando o ficheiro 599999999.pem, com os três certificados combinados passámos a comunicar com sucesso. Obrigado à todos ( @ei99045 , @Nuno Silva , @Sergio. , @João Januário, @jorang e outros) com as vossas várias contribuições que nos ajudaram a encontrar a solução. Nota: No seguinte link podem aceder aos dois ficheiros pem que refiro acima (https://drive.google.com/drive/folders/1maTSqtDWcoAYjHcFBUGJYRpiJbrmpTcg?usp=sharing)
  2. 2 points
    Era bom que para a próxima, pelo menos uma vez, o pessoal se juntasse e enviasse Email à AT, em vez de andar de andar a queimar neurónios e a inventar 😕
  3. 2 points
    O que estão a sugerir é alterar o certificado que a ASI enviou quando efectuamos o pedido. Mas segundo o email deles esse certificado não sofre alteração. E porque é que, segundo eles, a alteração do certificado deles foi concluída na 5ºf e os problemas só começaram na 6ºf? Eu ainda acho que o problema está do lado deles e como é fim de semana não têm ninguém de plantão para resolver o problema. Mas claro, 2ºf vai ser bonito. Os clientes todos a ligarem porque a comunicação não está a funcionar e a culpa é sempre do nosso software.
  4. 1 point
    Não é possível descarregar o ficheiro SAF-T do eFatura. O que poderá ser feito é scrapping ou, com jeitinho, usar a API do eFatura (que não está documentada). Mas aqui não se obtém o detalhe da faturação (que produtos e serviços foram faturados) o que limita as opções de contabilização. O mais fácil mesmo será pedir o SAF-T ao cliente 😀
  5. 1 point
    No artigo 3.º do Decreto-Lei 198/2012 refere que Não descrimina se são os recibos do regime de caixa ou do geral, logo, deverão ser todos os que são emitidos.
  6. 1 point
    a variável v contem um ponteiro para uma região de memória da qual não podes alterar (a string "PaP Programar") quando vais tentar atribuir o caracter ch à posição v[i ], tens o problema que referes.
  7. 1 point
    Por acaso não és Jesus Molina? Não ficam a vazio, têm de ser "anulados" com por exemplo "X" por forma a não ser preenchido manualmente. por exemplo, NIF XXXXXXXXX, e no caso do NIF não podes imprimir o 999999990, mete por exemplo Consumidor Final ou algo do género. Sim, a) Não, a FS como ja tinha dito em cima, não contempla impressão dos dados do Cliente para além do NIF, b) aqui é igual, a única diferença é que metes o NIF no SAFT 😕
  8. 1 point
    Eu pergunto-me se a intenção não passa por exportar uma factura para .xls, ou se na realidade o que é pretendido é exportares uma listagem de detalhes do documento, que é o mesmo que criar um ficheiro com as linhas da factura. Normalmente são pequenas estratégias para poupar trabalho administrativo, em que o objectivo passa por agarrar no ficheiro e importar directamente para um ERP, sem necessidade de lançar os movimentos manualmente, mas no entanto, recomendava que esclarecesses esse ponto com o cliente. Na generalidade dos programas consegues exportar a factura em muitos formatos, o formato .xls é um dos formatos possíveis e não existe problema nenhum, porque essa importação só ocorrerá depois de gravares a factura na base de dados, levando no próprio acto da criação, uma assinatura que certifica o documento como válido a nível fiscal. isto para além de outras validações que são geradas, mas de forma simples e rápida, é assim que as coisas funcionam. Se depois o teu cliente fizer coisas macabras com o excel, isso é um problema dele, porque para todos os efeitos, tu estás a cumprir o procedimento correcto e depois disso ainda és obrigado a enviar o ficheiro SAFT na plataforma da e-factura, comunicando todos os dados à Autoridade Tributária.
  9. 1 point
    Ola boa tarde, No PHC podes exportar para o que quiseres excel, word.....
  10. 1 point
  11. 1 point
    Viva, do nosso lado temos novamente os serviços a funcionar. Contudo chamo a atenção se não terá sido de forma provisória que a AT colocou os serviços como estavam de forma a dar tempo para atualizar os software/certificados. O que fizemos (além das experiencias) foi: ficheiro PublicChainCA2.p7b converter para .pem openssl pkcs7 -print_certs -in PublicChainCA2.p7b -out PublicChainCA.pem Adicionar ao já existente (necessario criar pfx) pfx os certificados que existem no novo pem criado para o efeito usei um software keystore explorer Adicionar root certificate adicionar o outro certificado Gravar novo pfx
  12. 1 point
    Sérgio quando comecei com os softwares de Facturação e Gestão Comercial, não havia mais de 50 em Portugal, hoje quantos estão registados na AT? 2 mil? 3 mil? Podemos ficar à espera que a ASSOFT resolva, tal como resolveu no passado, ou podemos partir a cabeça a criar engenhocas para meter as coisas a funcionar, ou podemos mandar um Email, a quem de direito (AT) para ver que alterações foram feitas e porque os sistemas deixaram de funcionar. Já disse, recebi mais de 400 mensagens do P@P, imagino que cada pessoa aqui tenha pelo menos 1 número de Certificação, e aposto que nem 10 Emails chegaram À AT. E já não é a primeira vez, o pessoal que não fique "unido" e não use a sua "força" e os meios adequados, e depois queixem-se.
  13. 1 point
    Não adianta @Cu5co, Tenho a funcionar normalmente !!!! Na Sexta-feira à noite já tinha toneladas de Posts do P@P no email, revi parte do código e desde então fiz 3 Posts. 1º onde questionava um comando, 2º nem me lembro 3º a Reforçar que o @marcolopes tinha razão, e para o pessoal enviar Email ou abrir questão no E-Balcão em vez de andar a fazer Copy e Paste de chaves 😐 300 Mensagens do P@P no email depois, continuam a "bater no Ceguinho" que têm razão, e ainda se queixam que tiveram o fim de semana a trabalhar 😐 ... Desculpem mas a isto chama-se MASOQUISMO. Se toda a gente tivesse enviado Email ou reportado no E-balcão, antes de estarem a fazer isto tudo, provavelmente até os tipos que estão de Prevenção tinham lá ido ver o que se passava na AT... Assim não, e agora queixam-se 😐 Surreal
  14. 1 point
    Bom liguei agora para a AT e o servidor dos ws de testes quer das faturas quer dos documentos de transporte, quer da parte agricola está desligado. Daí não se conseguir comunicar. A senhora com quem falei não me soube foi dizer quando estará operacional o servidor. EDIT: @Cu5co olha o que escrevi em cima.
  15. 1 point
    Nim, depende do tipo de Vale. A legislação foi alterada pelo OE2019: http://info.portaldasfinancas.gov.pt/pt/informacao_fiscal/legislacao/instrucoes_administrativas/Documents/Oficio_Circulado_30208_2019.pdf Basicamente, existem Vales de Finalidade Única e Vales de Finalidade Múltipla, com momentos diferentes de exigibilidade do IVA.
  16. 1 point
    Correto, mas se a chain estiver lá não faz mal... e o PFX de teste sempre incluiu, estou a considerar na próxima renovação incluir também - mal não fará...
  17. 1 point
    Olá a todos. Hoje de manhã os meus sócios comunicaram-me que os clientes se estavam a queixar que não conseguiam comunicar documentos/guias desde sexta feira passada ao fim do dia. A minha resposta foi de imediato dizer que não iria implementar nada até que a AT dissesse o que foi alterado para além do certificado de acesso deles ao portal deles e que os clientes iriam ter que esperar que a AT resolvesse o problema. Sim, claro que fui pressionado pelos clientes e pelos meus sócios porque fui eu que implementei a comunicação aos WebServices da AT e portanto, sou eu que tenho que resolver os problemas relacionados com este assunto quando estes surgem. E não é que devo ser bruxo. Tinha 99% de certeza que o problema deveria ser da AT. Caramba, era mesmo. Não sei a forma de comunicarmos está correta ou não, mas o que é certo é que sempre funcionou e se alguma coisa eles pretendam alterar, terão que avisar antecipadamente e documentar muito bem. Deixo um conselho a todos e que não terão que seguir, caso o não pretendam, como é lógico: da próxima vez queixem-se à AT, mas em massa, como eu fiz, para eles resolverem o problema ou que digam o que é necessário alterar da parte dos produtores de software. Bom trabalho.
  18. 1 point
    A minha aplicação é em Java Adicionar o DGITA ao roots do sistema operativo nao funciona, mas adicionar ao cacerts tambem não É mesmo necessário acrescentar o DGITA CA 2 ao pfx. Um obrigado ao Nuno Silva que referiu esta questao Efetivamente o TesteWebservices.pfx INCLUI este certificado. O comando para quem precisar: openssl pkcs12 -export -in XXX.cer -inkey XXX.key -certfile DGITA_Issuing_CA2.cer -out XXXX.pfx em que XXXX sao os ficheiros recebidos apos o pedido de certificado
  19. 1 point
    Pois claro, ele poderia comunicar as guias pelo telefone. Acho que nem em tribunal a tiram.
  20. 1 point
    Tens toda a razão. Por mim, já enviei um email à ASI e deixei uma mensagem no e-balcao a questionar o porquê de andarem a dizer que a culpa era dos produtores de softaware. Agora só tenho de ligar aos clientes que fizeram questão de nos ligar a dizer que o nosso programa é que tinha a culpa, para lhes dizer que, como lhes tínhamos dito antes, afinal não tínhamos culpa nenhuma. Depois de todo o stress, até que vai ser uma tarde bem passada. Afinal não temos mais nada para fazer.
  21. 1 point
    Isso não quer dizer que estava tudo bem, pelo contrario a comunicação sempre esteve mal. desde o inicio que isto deveria ser obrigatório para garantir a autenticação fidedigna. portanto acho que se deveriam se preparar e tentar entender como se faz, para poderem contornar este tipo de situações facilmente. O que eu acho é que foi uma tentativa de alterar um erro que desde o inicio esteve presente, sem que lhes sejam atribuídas culpas no cartório.
  22. 1 point
    Bem já não via o forum desde sexta e quando vi hoje ........ O problema é que não tinha nenhuma reclamação de clientes!! E a comunicação no meu software está a funcionar, não fiz nada!
  23. 1 point
    Estou sem palavras, Perdemos um sábado a trabalhar e ainda sou acusado pelo Sr. albertosilva de ser mal intencionado. Portugal no seu melhor Acho que já era altura de exigir à AT melhor suporte e informação.....mas deve ser uma ideia parva pensar nisso. Bom Verão
  24. 1 point
    O que ia expirar era este: Alias name: portaldasfinancas_at Creation date: Aug 9, 2018 Entry type: trustedCertEntry Owner: CN=*.portaldasfinancas.gov.pt, OU=Enterprise SSL Pro Wildcard, OU=Autoridade Tributária e Aduaneira, O=Centro de Gestão da Rede Informática do Governo - CEGER, STREET=Rua Almeida Brandão n7, L=Lisboa, ST=Lisboa, OID.2.5.4.17=1200-602, C=PT Issuer: CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB Serial number: ca93feede24a70e7469b2e7bfc49e726 Valid from: Thu Jul 19 01:00:00 WEST 2018 until: Sat Jul 20 00:59:59 WEST 2019 Certificate fingerprints: MD5: F4:73:43:E9:51:C6:A8:A6:D9:1D:DA:C7:BB:50:D8:3C SHA1: 62:E4:0B:28:06:6E:05:A7:FF:59:F7:3A:FC:1C:F8:0D:92:38:85:52 SHA256: 47:42:5D:57:23:3A:47:B9:84:93:85:90:7C:5F:45:56:FF:BC:33:8D:EA:BE:22:A3:95:A8:57:89:73:50:C8:C2 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Apenas era necessario alterar este pelo novo que foi disponiblizado pela AT. Agora ficou o fim de semana todo parado e eu achava que o problema era nosso, mas derrepente passou tudo a funcionar e nao fiz rigorosamente nada. Apenas deixar a nota que nao mudei mais nada nao adicionei qualquer certificado da DGITA
  25. 1 point
    Não quero estar a sugerir que eu sou responsável por isto tudo ter começado a funcionar normalmente, mas a verdade é que hoje que me chamou a atenção que havia problemas e meia hora depois estava tudo a funcionar. 🙄 Posso ceder o meu IBAN por PM para quem quiser mostrar o seu reconhecimento...
  26. 1 point
    Obrigado @Sergio.. Resolveu. Deixem-me deixar aqui alguma ajuda e corrijam-me se estou errado. Aquando da renovação do nosso certificado enquanto produtores de software é enviado no .ZIP o PublicChainCA2.p7b (no interior DGITA_Issuing_CA2.pem) que até agora não era utilizado e funcionava. A partir de sexta-feira parece que fizeram com que este novo certificado fosse necessário. O certificado pode ser obtido a partir do Link acima do @Sergio. Quanto aos certificados que foram enviados na sexta-feira (portaldasfinancasgovpt) são apenas a quem faz ligação via SSL. Eu cá faço por TLS e não preciso desse certificado. Um abraço a todos e parabéns a este Fórum.
  27. 1 point
    Olha para o que recebeste quando pediste o certificado de autenticação, não tens lá um .p7b? Basicamente agora temos de fazer as coisas como deveriam ser feitas desde início, ter o caminho de certificação completo no pfx.
  28. 1 point
    Se está a se referir a chave pública (chavepublicaat.cer), meti no mesmo link. https://www.evernote.com/l/APA7nr2u729EWJmsnGqvQAjZtbq-6zlbBks/ George
  29. 1 point
    Boas! Todos com o mesmo problema de comunicação ainda. Saque o ficheiro compactado contendo os certificados pelo link a seguir: https://www.evernote.com/l/APA7nr2u729EWJmsnGqvQAjZtbq-6zlbBks/ Eu irei deixar este link até amanhã dia 23-07-2019. George
  30. 1 point
    @Nuno Silva (@si27645) em primeiro lugar não é amanhã, é hoje, porque alguns de nós têm clientes que trabalham ao Fim de semana, em 2º lugar, eu sei que o @marcolopes é rígido, mas ele tem razão. Podes dar as voltas que quiseres, ele tem razão. Andamos TODOS a fazer Corte e Costura, quando é a AT que está mal. Mais, com este corte e costura, grande parte de nós tem o sistema a funcionar e não fez o mais importante, reclamar junto da AT que a cadeia não está a funcionar, então como irão eles arranjar ??? A menos que aches normal andar a fazer Copy Paste de chaves e certificados que nem sequer aparece no manual técnico???
  31. 1 point
    o meu "workaround" será aplicar uma TRUST STORE com o CERTIFICADO enviado pela AT (portaldasfinancasgovpt.crt) Funciona em testes! Mas com uma permissive TRUST STORE também funciona (portanto, não quer dizer grande coisa!) // indica um conjunto de certificados confiaveis para estabelecer a ligacao SSL TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(tsCertificate.getKeyStore()); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); agora, embrulhar no certificado do PRODUTOR de SW, o certificado enviado (portaldasfinancasgovpt.crt) juntamente com outro que nem sequer sei onde o foram desenterrar, neste momento, não...
  32. 1 point
    Querem saber a melhor? nos emails enviados pela AT, é digo o seguinte: 3 inconsistências!!! 1) Se a plataforma de testes foi actualizada, e o método usado até agora funciona (pela minha parte funciona com um PERMISSIVE TRUST STORE), presumo que a plataforma de PRODUÇÃO tenha de reagir da mesma forma! (o que não está a contecer segundo diversos relatos aqui no tópico) 2) O Código Fonte da aplicação em Java Applet mais recente (FACTEMIPFCLI-1.7.5-0037) NEM SEQUER inicializa uma TRUST STORE!!! Nem "permissive" nem nada que se pareça!!! (código para Facturas e Transportes) KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, "TESTEwebservice".toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); // adicionar um Trust Store que aceita ligacao SSl sem validar o certificado // sslContext.init(kmf.getKeyManagers(), new TrustManager[] {new PermissiveTrustStore()}, null); sslContext.init(kmf.getKeyManagers(), null, null); 3) USANDO o código da AT, o sistema nem sequer comunica! E agora? Em que ficamos? Que salgalhada de todo o tamanho!!!!
  33. 1 point
    Pessoal do PHP, já tenho a funcionar tanto em SOAP como cURL, seguindo as sugestões aqui da malta. A versão em SOAP é positiva para quem estiver com problemas no cURL com o erro PR_END_OF_FILE_ERROR. Tenho neste momento um servidor a funcionar com cURL e outro com SOAP. Para versão do cURL aceder aqui: https://www.portugal-a-programar.pt/forums/topic/57734-utilizar-webservices-da-at/?do=findComment&comment=615478 Versão SOAP: ini_set('soap.wsdl_cache_enabled', '0'); ini_set('soap.wsdl_cache_ttl', '0'); ini_set('default_socket_timeout', 5); /* * Para fazerem download do ficheiro 'documentosTransporte.wsdl': * * 1) Aceder https://faturas.portaldasfinancas.gov.pt/ * 2) Entrar na área "Produtores de Software" * 3) Entrar na área "Testar Webservice" * 4) Clicar em "Obter WSDL" na linha "Documentos de Transporte" */ $wsdl = 'documentosTransporte.wsdl'; $action = 'https://servicos.portaldasfinancas.gov.pt:401/sgdtws/documentosTransporte'; /* * Juntar o conteúdo de 3 ficheiros .PEM no mesmo ficheiro, seguindo esta ordem: * * EmpresaAutora.pem * DGITA_Issuing_CA2.pem * portaldasfinancasgovpt.pem */ $pem = 'EmpresaAutoraCombined.pem'; $xml = '<?xml version="1.0" encoding="utf-8" standalone="no"?> ...'; $client = new SoapClient($wsdl, array ( 'local_cert' => $pem, 'trace' => TRUE, 'encoding' => 'utf-8', 'soap_version' => SOAP_1_2, 'stream_context' => stream_context_create(['ssl' => ['verify_peer' => false, 'verify_peer_name' => false]]) )); $result = $client->__doRequest($xml, $action, 'documentoTransporte', 2, 0);
  34. 1 point
    João A tua explicação ajudou-me a perceber o que me faltava para ter o meu curl a funcionar. Obrigado.
  35. 1 point
    Boas. Acabei de conseguir comunicar 2 documentos em produção com o .pfx alterado (adicionei a cadeia de certificação como sugeriste com o KeyStore Explorer). Vamos ver se na segunda isto ainda funciona ... Senão vai sei o caos ... Obrigado pela ajuda e como de costume este fórum continua a ser das melhores coisas que temos para sobreviver à nossa querida AT 🙂
  36. 1 point
    Ontem (hoje de madrugada) quando comecei a mexer nisto, perguntei se podiam confirmar os Certificados, que o ultimo tinha metade do tamanho do anterior. Agora já li que pessoal fez debug no openssl e que o certificado não estava correcto 😕 ... E se amanhã (segunda feira) a AT, por acaso, assim como quem não quer a coisa, disser que de facto o Certificado não estava correcto? voltamos a alterar tudo ? 😕
  37. 1 point
    Bem, é estupido, mas aqui vai. Solução para java, extrair em dois PEM os certificados CA enviados já por alguém aqui no forum DGITA_Issuing_CA2.pem e inserir estes certificados no pfx do cliente que é usado para se autenticar no serviço. Usar o truststore com os novos certificados e ficou a funcionar. Override da validação só dá erro 😕 tenho de ver isto melhor, mas está a funcionar. Boa sorte com isso.
  38. 1 point
    Boa Tarde, Finalmente resolvi o assunto. Só lamento a falta de suporte/informação por parte da AT A verdade seja dita que o ficheiro PublicChainCA2.p7b já era enviado juntamente com o pedido de novo certificado, mas também é verdade que nunca o usei até hoje. Eu trabalho em ambiente Linux e tive que converter para formato PEM (DGITA_Issuing_CA2.pem), Aqui estão as 2 versões No Curl simplesmente adicionei : --cacert DGITA_Issuing_CA2.pem Passou a funcionar.
  39. 1 point
    @Earendil010102, Vamos por partes: Não percebo qual o motivo para os parâmetros argc e argv estarem relacionados com a execução «em modo debug». Se o teu código não depende dos argumentos passados na linha de comandos, não são necessárias essas variáveis. Outro pormenor: em C, dizer main() é diferente de main(void); o primeiro indica que main aceita um número indefinido de argumentos, o segundo indica que main não aceita argumentos (em C++ não é assim). Relativamente ao fflush(stdin), não só não é a melhor maneira de limpar o buffer, é precisamente um dos erros mais conhecidos e documentados pela comunidade que programa em C. O comportamento de fflush(stdin) é indefinido segundo o próprio standard, o que significa que cada compilador é livre de fazer o que quiser com isso. Por exemplo no meu sistema, essa linha não funciona porque o GCC assim o escolheu. A forma correcta de limpar o buffer é ler o seu conteúdo através de chamadas a getchar() até que seja devolvido um '\n' ou até que o input seja esgotado (EOF). Aqui fica uma função que faz precisamente isso (poderia ser abreviada, mas assim percebe-se melhor a sua intenção): void clear_stdin(void) { int c; do { c = getchar(); } while (c != '\n' && c != EOF); } Apenas a título de curiosidade, fiz dois exemplos no Ideone.com onde podemos ver o comportamento de um determinado programa que aceita um número e uma letra e os devolve ao utilizador; esta versão utiliza fflush(stdin) para limpar o buffer, e esta versão utiliza a função clear_stdin() acima. Como podes ver, a versão que utiliza fflush(stdin) não limpa o buffer correctamente, e como resultado a «letra» lida é a tecla RETURN, que se reflecte no output (uma mudança de linha entre as aspas). Em relação aos restantes pontos, acho que seria interessante (e benéfico para ti) revisitar o código após entregar o trabalho. Desta forma poderás decidir que aspectos deverias melhorar, nomeadamente a tal separação do código em funções diferentes. A longo prazo, esta será uma das capacidades mais importantes a desenvolver, uma vez que a complexidade do código aumenta muito rapidamente com o seu tamanho; é fulcral desenvolver código correcto, compacto e legível que interaja de uma forma simples e explícita com o restante projecto.
  40. 1 point
    Portugal ganha esta sexta-feira um reforço de peso na capacidade de computação, com o arranque oficial das operações de um novo supercomputador português, o BOB, e das atividades do Minho Advanced Computing Centre. [Continua...] In Tek, 2019-08-04
  41. 1 point
    Viva Francisco, boa noite, Antes de mais, bem vindo à Comunidade Portugal a Programar! Para mim, o operator is é mais fácil de explicar, pelo que vamos começar por aí: A sintaxe básica é: expr is type O operator is retorna true quando uma expressão (expr) é do tipo indicado (type). Para isso construí o seguinte exemplo: https://dotnetfiddle.net/0Q2Gq5 O exemplo contém: class Animal, abstrata; class Dog que herda de Animal; class Cat que herda de Animal; class Elephant que herda de Animal; class Tree que não herda de nenhuma class; Contém também três animais (objetos / instâncias de classes): Cão pluto; Gato garfield; Elefante Dumbo Ao executares o exemplo, irás ver que: os três animais são do tipo object (porque uma class herda implicitamente de object); os três animais são do tipo Animal (porque as classes Dog, Cat e Elephant herdam de Animal); O pluto é do tipo Dog mas não é nem Cat nem Elephant, o que faz sentido; O garfield é do tipo Cat mas não é nem Dog nem Elephant, o que também faz sentido; O dumbo é do tipo Elephant mas não é nem Dog nem Cat, o que também faz sentido; Nenhum dos três animais é do tipo Tree - são animais e não são árvores e como Tree não herda de nenhum animal (Cat, Dog, etc.) nem da class Animal, não é possível dizer que pluto, garfield ou dumbo sejam do tipo Tree, porque não são Espero ter esclarecido o operator is. Quanto ao operator as: A sintaxe básica é: expr as type O operator as tenta converter a expressão (expr) no tipo indicado (type). Se a conversão for válida, então é retornada uma instância do tipo indicado, senão, é retornado null. Para demonstrar melhor construí outro exemplo: https://dotnetfiddle.net/1uJPtf O exemplo contém: class Animal, abstrata com uma propriedade também abstrata (int) que indica o número de patas; class Dog que herda de Animal, com 4 patas; class Cat que herda de Animal, com 4 patas; class Spider que herda de Animal, com 8 patas; class Bee que herda de Animal, com 6 patas e com 2 asas (nova propriedade, NumberOfWings) Contém também quatro animais (objetos / instâncias de classes): Cão pluto; Gato garfield; Aranha aragog; Abelha maya; Ao executares o exemplo, irás ver que: consegues converter todos os animais para o tipo Animal e obter o seu número de patas; consegues converter todos os animais para o seu próprio tipo (pluto para Dog, etc) e obter o seu número de patas - repara que o método ShowAsOperatorResults recebe a instância do animal como object; No caso da maya, além de conseguires obter o número de patas, irás conseguir obter também o número de asas, isto porque maya é do tipo Bee Nos casos em que não aparecem o número de patas ou de asas, tal acontece porque não é possível converter a expressão para o tipo indicado, exemplo, não é possível converter o pluto num gato ou numa aranha Com isto, espero ter esclarecido o operator as. Qualquer dúvida, diz. Espero ter ajudado,
  42. 1 point
    Boa noite, @nuno35. Numa list comprehension em Haskell, a condição booleana não é feita dessa forma, não havendo sequer o uso de let. A sintaxe geral é a seguinte (feita de cabeça, poderá conter incorrecções e não contemplar todos os casos possíveis): [funcao(elemento) | elemento <- lista, ..., condição1, ...] Portanto, no teu caso deverás usar algo como isto: [(x, y) | x <- [1..numero], y <- [numero, numero-1 .. 0], x + y == numero] Cumprimentos.
  43. 1 point
    Dica: usa a função zip. Prelude> zip [6,7,8] [1,2,3] [(6,1),(7,2),(8,3)] Depois tens várias formas de concluir, entre elas um map ou uma comprehension list. Cumprimentos.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.