Jump to content
  1. Re: comparar input com array de strings

    BrunoMac
    By BrunoMac,
    7 horas atrás, AshKetshup disse:

    Boas, @BrunoMac.
    Eis a minha solução com alguns apontamentos.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int n = 5, i, j, l, num, result;
    char cores[4][7], input[5], *copy;
    char *colors[] = {
        "green",
        "red",
        "blue",
        "yellow",
        "brown",
        "white",
        "black"
    };
    
    // Esta função atualmente é desnecessaria.
    void copiar(){
        strcpy(copy, input);
    }
    
    int main(){
        printf("Add colors\n");
    
        for (int i = 0; i < n; i++) {
            scanf("%s", input);
            
          	// Debug print
            printf("Input: %s\n", input);
            
            /*
            (1)
            De momento n = 5 e o array que tens tem 7 elementos. 
            Portanto destes 7 elementos ele só vai passar pelos 5 primeiros para verificar a comparação.
            
            antes tinhas:
            n = 5;          (lá em cima nas variaveis)
            
            deverias de ter:
            n = 7;          (porque são 7 elementos)
            
            ou então antes de um loop calculas o tamanho do array com isto:
            int colorsCount = sizeof(colors)/sizeof(colors[0]);
            */
            
            strcpy(cores[i], input);
            
          	// (1)
            int colorsCount = sizeof(colors)/sizeof(colors[0]);
          	
          	// O loop while() que aqui tinhas é o equivalente a este ciclo 'for'.
            for (int j = 0; j < colorsCount; j++) {
                if (strcmp(input, colors[j]) == 0) {
                    printf("Gotcha!\n");
                    
                  	// Parar de verificar se encontrar um match
                    break;
                }
                
                // comparing strings str1 and str2
                // result = strcmp(input, colors[j]);
                // printf("strcmp(str1, str2) = %d\n", result);
            }
            
            // Acho que só estás a fazer o primeiro caracter ficar o '/0'.
            // input[0]='\0';
        }
        
      	/*
        Aqui só te mostra 4 elementos porque é o que tens definido que o array cores contem.
        Se pretenderes que o array se adapte (array dinamico) terias de trabalhar com "mallocs"
        */
        // (1)
      	int coresCount = sizeof(cores)/sizeof(cores[0]);
        for(l = 0; l < coresCount; l++)
            printf("%s\n", cores[l]);
        
        return 0;
    }

    Espero conseguir ajudar.

    Boas AshKetshup,

    Obrigado pela ajuda.

    Já limpei o código agora tenho que avaliar para quando não existe cor igual no array.

    Um simples else não funciona porque if (!strcmp(input, palette[j])) retorna true if strcmp retorna 0 (que foi o que acabei por usar).

    E isso acontece para todas as outras cores no array, logo strcmp vai ternornar !=0 várias vezes.

    Tenho que arranjar maneira de criar uma condição em que se nunca houver TRUE ou seja se !strcmp nunca acontece, então printf("cor não existe").

     

     

     

    • 2 replies
  2. Re: Utilizar Webservices da AT

    Reboot
    By Reboot,

    a mim está a dat timeout do URL de testes

    • 10,010 replies
  3. Re: Utilizar Webservices da AT

    João Andrade
    By João Andrade,

    Boa tarde a todos !

    Alguém com problemas na comunicação à AT. Tenho um cliente que não consegue comunicar eDA por WebServices.

    É devolvido um erro : 

     

    <?xml version="1.0" encoding="UTF-8"?>

    -<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

    <env:Header/>


    -<env:Body>


    -<env:Fault xmlns:ns0="Server">

    <faultcode>ns0:SOAP-ENV</faultcode>

    <faultstring>O certificado do cliente não foi encontrado no pedido</faultstring>

    <faultactor>AT Webservices Portal Aduaneiro</faultactor>

    </env:Fault>

    </env:Body>

    </env:Envelope>

     

     

     

    • 10,010 replies
  4. Trabalho que não sei fazer e gostaria que se possível me ajudassem...

    Jaime
    By Jaime,

    Introdução

    Considere a necessidade de gestão de documentos no contexto de uma empresa de construção civil. A empresa realiza a submissão de documentos (Document) associados a um projeto (Project). No momento da submissão do documento, é necessário indicar: o nome, data de validade e o tipo do documento (Máquina, Trabalhador ou Infraestrutura).

    Enunciado

    Partindo do código disponibilizado* (ficheiros Document.java, DocumentType.java e Project.java), o qual não pode ser alterado, implemente o código necessário de modo que seja possível:

    ▪ Especificar de modo concreto o que é um documento.

    ▪ Manipular os documentos do projeto, considerando:

    ▪ O número de documentos do projeto é fixo e só pode ser definido uma única vez (representa o limite máximo de documentos para o projeto).

    ▪ As operações possíveis sobre os documentos do projeto definem um contrato e permitem:

    ▪ Adicionar um documento ao projeto. O documento apenas poderá ser inserido se não tiver um tamanho superior a 2 megabytes e se não estiver no formato pdf (extensão .pdf). No caso do documento já existir (identificado através do seu identificador único - id) só deverá permitir se a nova versão do documento for superior às existentes.

    • Remover todas as versões de um documento, exceto a versão mais recente.

    • Obter os documentos de um determinado tipo (Máquina, Trabalhador ou Infraestrutura).

    ▪ Imprimir a lista de documentos (apenas a versão mais recente) existentes no projeto.

    ▪ Testar todo o código implementado.

     

    *Código disponibilizado:

    package pt.ipp.estg.fpoo.ma01.projets;

    /**
     * <h2>
     * Escola Superior de Tecnologia e Gestão (ESTG)<br>
     * Politécnico do Porto (PP)<br>
     * Fundamentos de Programação Orientada a Objetos (FPOO)<br>
     * 2021 / 2022<br>
     * </h2>
     * <p>
     * Represents the available document types.
     * </p>
     * <p>
     * Author: ESTG-FPOO-2122
     * </p>
     */
    public enum DocumentType {

        /**
         * Machine document type
         */
        MACHINE,
        /**
         * Worker document type
         */
        WORKER,
        /**
         * Infrastructure document type
         */
        INFRASTRUCTURE;

        /**
         * The method returns a string representation of the document type
         *
         * @param documentType document type to be represented by a string.
         * @return a string representation of the document type.
         */
        public static String ingredientToString(DocumentType documentType) {
            switch (documentType) {
                case MACHINE:
                    return "The document type is Machine";
                case WORKER:
                    return "The document type is Worker";
                case INFRASTRUCTURE:
                    return "The document type is Infrastructure";
                default:
                    return "The document type is unknow";
            }
        }
    }
     

     

    • 0 replies
  5. Re: OvalShape1 deslocada quando faço Start ao Form e o mesmo aumentado

    programadorvb6
    By programadorvb6,

    Olá não compreendi muito bem o que queres vê este tutorial Tutorial

    • 1 reply
  6. Re: Quiz em Visual Basic

    programadorvb6
    By programadorvb6,

    Olá Daniela conseguiste ??

    • 13 replies
  7. Re: Software para reset Cartões MMC da Siemens

    ruiacsilva
    By ruiacsilva,
    Em 11/01/2010 às 09:07, nokPT disse:

    Eu não conheço e a ideia que tenho é que nos S7-300/400 o formato da MMC é Siemens e Fechado e se meteres num leitor normal de MMC estás sujeito a "desformatar" e teres que enviar para Siemens Alemanha (não fazem em Portugal) para corrigir.

    Seria efectivamente interessante poder usar uma MMC normal (nos novos S7-1200, já vai ser possível (mais ou menos))

    Gostava de saber como isso é possivel. É que tenho um s7-1214c dc/dc/dc sem cartão e gostava de fazer alguns testes com o cartão nele.

    • 6 replies
  8. Re: Utilizar Webservices da AT

    Reboot
    By Reboot,
    2 minutos atrás, samuquinha disse:

            private static string[] encriptation(string PassFinancas, string Empresa)
            {
                string[] encript=new string[3];
                byte[] bytesChavePublica = null;

                using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ComunicaAT.Resources.ChaveCifraPublicaAT2023.cer"))
                {
                        if (stream != null)
                        {
                            bytesChavePublica = ReadFully(stream);
                        }
                        else
                        {
                            Utils.WriteLog(Empresa + "-Erro leitura Chave publica", ConfigurationManager.AppSettings["LOGFileName"]);
                            return new string[3];
                        }
                }

                string DataCriacao = System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.ff") + "Z";

                // Carregar chave pública
                X509Certificate2 certCP = new X509Certificate2();
                //certCP.Import(CaminhoChavePublica);
                certCP.Import(bytesChavePublica);
                string ChavePublica = certCP.PublicKey.Key.ToXmlString(false);

                RijndaelManaged rijndaelCipher = new RijndaelManaged();
                rijndaelCipher.GenerateKey();
                rijndaelCipher.Mode = CipherMode.ECB;
                rijndaelCipher.Padding = PaddingMode.PKCS7;
                string simetrickey = rijndaelCipher.Key.ToString();
                Byte[] ChaveSimetrica = rijndaelCipher.Key;

                // Inserir Chave Simetrica nos parametros de encriptação
                SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
                rijn.Key = rijndaelCipher.IV;
                rijn.IV = rijndaelCipher.IV;
                rijn.Mode = CipherMode.ECB;
                rijn.Padding = PaddingMode.PKCS7;

                // Encriptar password das financas
                MemoryStream msPassFinancas = new MemoryStream();
                CryptoStream csPassFinancas = new CryptoStream(msPassFinancas, rijn.CreateEncryptor(rijn.Key, rijn.IV), CryptoStreamMode.Write);
                using (StreamWriter swPassFinancas = new StreamWriter(csPassFinancas))
                {
                    swPassFinancas.Write(PassFinancas);
                }
                string PassFinancasEncriptada = Convert.ToBase64String(msPassFinancas.ToArray());

                // Encriptar data de criação
                MemoryStream msDataCriacao = new MemoryStream();
                CryptoStream csDataCriacao = new CryptoStream(msDataCriacao, rijn.CreateEncryptor(rijn.Key, rijn.IV), CryptoStreamMode.Write);
                using (StreamWriter swDataCriacao = new StreamWriter(csDataCriacao))
                {
                    swDataCriacao.Write(DataCriacao);
                }
                string DataCriacaoEncriptada = Convert.ToBase64String(msDataCriacao.ToArray());

                // Encriptar a chave simetrica com o algoritmo RSA e com a chave pública
                RSACryptoServiceProvider AlgRSA = new RSACryptoServiceProvider();
                AlgRSA.FromXmlString(ChavePublica);
                byte[] Chave = AlgRSA.Encrypt(rijn.Key, false);
                string ChaveSimetricaEncriptada = Convert.ToBase64String(Chave);

                encript[0] = PassFinancasEncriptada;
                encript[1] = ChaveSimetricaEncriptada;
                encript[2] = DataCriacaoEncriptada;

                return encript;
    }

    obg

    • 10,010 replies
  1. Load more activity
×
×
  • 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.