Ir ao conteúdo
  • Cadastre-se

daniel.oliveira

Membro Pleno
  • Posts

    26
  • Cadastrado em

  • Última visita

posts postados por daniel.oliveira

  1. main(){
    	
    	struct FastCar *fastCar; //inicia fastCar que aponta aleatoriamente
      
    	...
    	
    	if(x == 1){
    		Cadastro(&fastCar); //chama função Cadastro
          
         ...
    
    void Cadastro(struct FastCar **fastCar){ // ponteiro pra ponteiro?
    	struct FastCar *c; //inicia c que aponta aleatoriamente
    	c = (struct FastCar*)malloc(sizeof(struct FastCar)); //c aponta para memória inicializada
    	c = &fastCar[0]; // c aponta para o que fastCar está apontando - aleatoriamente por que você declarou em main

     

     

     

  2. Eu dei uma breve olhada no seu código e vi que tem erros básico de operação com ponteiros e alocação de memória. Na função de cadastrar você aloca uma memória e endereça para o ponteiro c e na próxima linha você endereça a struct parametro para c (ou seja você perde a alocação que você fez), além de endereçar uma varável que nem foi iniciada em main. Eu sugiro estudar novamente sobre operações de ponteiros e struct. 

    • Curtir 1
  3. 7 minutos atrás, AnsiC disse:

    Tem um elemento em particular que passou e não foi visto: A virgula!!!!

     

    Fraçoes são representadas com ponto.

    Exo.: 12,5 em C se escreve 12.5

     

     

    Isso mesmo, depois de programar vários programas você pega o jeito de como digitar literalmente os tipos de dados em C.

    • Curtir 1
  4. Vamos a lógica

     

    Se a>b , então: a-b

    Se a<b, então: a+b

    Senão (se não maior, nem menor é igual), então a*a, ou a*b, tanto faz.

     

    você pode testar em C

     

    if (a>b){
        //printa a-b
    }
    else if (a<b){
        //printa a+b
    }
    else {
        //printa a*b
    }
                   
                 
                   

    Para mostrar você não precisa gravar numa variavel só se você for utilizar depois

     

    printf("A diferença entre a e b, %d - %d = %d", a, b, a-b);

     

  5. A biblioteca padrão de entrada e saída de arquivo permite que você leia e escreva arquivos e, porém você tem que ter um pouco de conhecimento sobre ponteiros, e as funções de leitura e escrita, tais como FILE *arquivo, fopen(), fscanf(), fprintf()., etc...

    Bom você pode pesquisar leitura e e escrita de arquivos em C no Google, montar um código e se precisar de ajuda voltar a nos perguntar.

    • Curtir 1
  6. O último Else está codificado errado, você pode colocar um Else If com a condição maior que 25 como você fez tirando os dois pontos depois da comparação.

    Agora você pode também só colocar Else, já que o IMC não é menor que 18,0, e não é menor que 25,0 só pode ser maior do 25,0. Só colocar Else e o código a ser executado.

    • Curtir 2
  7. Eu não queria causar polêmica, mas programação é isso mesmo existe diversas formas de resolver um determinado problema, e todas alternativas estão certa. Mas sempre penso em reutilização de código e professores ensinam isso, por exemplo ao setar um valor como limite, você ao usar seu programa para números maiores terá que reescrever a linha de código para suportar tal limite, isso é simples em um programa de 100 linhas de código, agora imagine ter 50 mil linhas? Os criadores de C fizeram uma biblioteca padrão de limites até porque o limite de um int varia de computador para computador, de sistema para sistema. Então eu formulei minha resposta sendo que solucionando a questão assim eu não precisarei de mudar meu algoritmo futuramente, ele rodará até sei lá num computador pré histórico onde o valor máximo de um int seja maior que 99999.

    • Curtir 1
    • Obrigado 1
  8. É simples resolver esse questão, o primeiro número digitado é o menor número, faça antes do loop. Depois dentro do loop você terá duas situações ao ler um valor:

     

    O valor será igual a ao menor número, incremente contador++.

     

    Valor será menor ao menor número, ou seja temos um novo menor número, contador = 1.

     

    Implemente esse algoritmo e poste os resultados obtidos.

     

     

    • Curtir 2
  9. @isrnick Eu acho sua solução muito boa e limpa, é o que eu faria, mas para facilitar o alto consumo de memória a busca só precisaria guardar o nome é CPF em primeira vez e se o CPF for igual aí sim guardar os demais dados do cadastro isso economizaria mais memória, no caso que eu apresentei o programa não gravaria nada e quando achasse o CPF voltaria uma linha e aí ele faria o que bem entender já que estaria no começo do cadastro economizando mais memória. A questão de como formatar os dados é decisão do programador bem como escolher que tipo de dados usar. Para iniciantes eu aconselho trabalhar com arquivo binários, mas isso é outra história.

  10. Então geralmente quando você executa um programa para prompt de comando ele fechará antes mesmo de mostra os resultados finais, o certo é abrir o programa a partir do prompt do windows, ou terminal no linux e aí ele se comporta normalmente.

     

    um exemplo de como abrir no terminal do windows

     

     

    Screenshot from 2018-04-18 23-28-17.png

    • Curtir 1
  11. existe uma função chamada fgetpos e fsetpos ela te ajuda a ir a uma posição específica em uma arquivo, o correto é você setar uma posição antes de chamar fgets já que ele avança uma linha inteira por vez, depois é só usar fsetpos e você voltará na posição desejada no caso uma linha anterior a do cpf e colocar numa string tudo que vier após o ": " ou '#'.

     

    Meu diagrama de exemplo

    FILE *txtFile;
    fpos_t p; //posição para ser gravada
    
    //Funções para abertura de arquivos...
    
    fgetpos (txtFile, &position); //grava a posição da linha em negrito

     

    Nome: Marcos Belino
    CPF: 123.456.789-10
    Data de Nascimento: 123456
    Numero Do Cliente: #8

     

    sua_funcao_de_pesquisa() //retorna falso já que não há nenhum CPF

     

    fgets pula a linha então estará assim a seu arquivo:

     

    Nome: Marcos Belino
    CPF: 123.456.789-10
    Data de Nascimento: 123456
    Numero Do Cliente: #8

     

    sua_funcao_de_pesquisa() //retorna verdadeiro se o CPF estiver correto

     

    Então você volta para a linha anterior

     

    fsetpos (txtFile, &p); 

     

    E ficará ssim novamente e aí é só retirar toda a string após ": " ou '#'

     

    Nome: Marcos Belino
    CPF: 123.456.789-10
    Data de Nascimento: 123456
    Numero Do Cliente: #8

     

    claro que são só dicas, mas esclarece bastante coisa se estiver com dúvidas é só perguntar.

    • Obrigado 1
  12. Como sua professora pediu para ler um número negativo e você pode um usar um if para não ocorrer uma entrada de número negativo indevido

     

    if(n < 0)
    
    {
    
        printf("Entrada de número negativo indevido!\n");
    
        return;
    
        //Encerra programa
    
    }
    
    

     

     

  13. seu pseudocódigo é:

     

    se (numFaltas >= 0 E numFaltas <= 8)
    	aprovado
    senão se (numFaltas > 8 E numFaltas <=18 )
    	reprovado
    senão
    	mensagem de erro

     

    Agora é só transformar em C...

     

    usa-se if para testar uma condição

     

    if(condição)

     

    se você quiser testar duas condições e as duas tem que estarem corretas use &&

    if(idade < 18 && estaSemPai == true)
        printf("Não pode entrar!!!);

     

    pode usar também o else para o caso de a condição testada seja falsa

    if(idade < 18 && estaSemPai == true)
        printf("Não pode entrar!!!);
    else
        printf("Seja bem vindo!");

     

    você pode usar o else com if para testar uma nova condição caso a condição anterior seja falsa


     

    if(idade < 18 && estaSemPai == true)
        printf("Não pode entrar!!!);
    else if (eVIP == true)
        printf("Seja bem vindo sr. %s", nome);
    else
        printf("Seja bem vindo!");

     

  14. 2 horas atrás, Mayk.hsm disse:

    @daniel.oliveira

    Obrigado, tentei entender seu codigo por um bom tempo, mas não consegui compreender ainda. Vou estudar alguns conceitos que eu não sei, e tentar compreender durante a semana. Mas valeu pela colaboração.

     

    @Mauro Britivaldo

    Criei um if , acho que resolve o problema do plural, apesar de eu não saber se é o jeito mais efetivo. Revendo e aprendendo. valeu

    
    if(PALAVRA[j]==FRASE[aux_i])//faz contagem da sequencia, para fazer comparação com tamanho
    		{
    			x++;									
    		}
    			if((FRASE[T_PALAVRA+i]=='s')&&(PALAVRA[T_PALAVRA-1]!='s'))//esse ultimo if que trata dos plurais
    				x--;
    ...

     

    Eu só queria demonstrar que tais trechos de código você pode transformar em função para além de dividir a tarefa de contruir um programa lhe dará a vantagem de reutilizar o código uma vez criada a função você poderá modificá-la sem alterar o resto do programa.

  15. você pode criar uma função que compara dois array de caracter e retorne 0 se forem iguas(bem parecida com strcmp que compara strings), seria mais ou menos assim:

    #include <stdio.h>
    #include <string.h>
    
    int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[])
    {
        int tam = strlen(str);
      
        //compara caractere por caractere
        for(int i = 0; i < tam; i++)
        // se achar um caractere diferente retorna -1
        if(str[i] != arrayChar[i])
            return -1;
      
        // retorna 0 por serem iguais
        return 0;
    }

    Você então pode utilizar em um loop e sempre que você achar a primeira letra igual você chama a função

    exemplo:

    #include <stdio.h>
    #include <string.h>
    
    typedef char* string; // eu não lembrei qual blibbioteca linkar então definir aqui
    
    /**
      * Esta função compara uma string com um array de caracteres(char [])
      * retorna 0 se iguais ou -1 para diferentes
      */
    int compStrCChar(string str, char arrayChar[]);
    
    int main(void)
    {
        string palavra = "teste";
        string frase = "12teste12test12testeteste";
        int qtPalavras = 0;// quantidade de palavras
        int tam = strlen(frase);
        //int comp; // armazena comparação
        
        // busca a palavra dentro da frase e então acrescenta 1 a qtPalavra
        for(int i = 0; i < tam; i++)
        {
            if(palavra[0] == frase[i])
            {
                // se as palavras forem iguais ou seja igual compStrCChar a 0
                //comp = compStrCChar(palavra, &frase[i]);
                if(compStrCChar(palavra, &frase[i]) == 0) // lembrando a string definida pelo usuario primeiro
                    qtPalavras++;
            }
        }
        printf("%i\n", qtPalavras);
    }
    
    
    int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[])
    {
        int tam = strlen(str);
      
        //compara caractere por caractere
        for(int i = 0; i < tam; i++)
        // se achar um caractere diferente retorna -1
        if(str[i] != arrayChar[i])
            return -1;
      
        // retorna 0 por serem iguais
        return 0;
    }

     

    • Curtir 2
  16. Aqui está o pseudocódigo para o enunciado:

     

    1. Obter largura e comprimento do terreno

    2. Obter largura e comprimento dos andares

    3. Se largura e comprimento dos andares forem menor que o terreno repetir passo 2

    4. Obter quantidade de andares

    5. Calcular as dimensões e mostar resultado

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!