Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.303
  • Cadastrado em

  • Última visita

posts postados por Ansi C

  1. Ok!
    Você tem em mente que o vetor de inteiro com 4 inteiros, sedo que cada espaço desse vetor armazena um digito (decimal)
    da parcela de 4 dígitos, limite máximo de casa casa é 0 ou 9.

    Visualizou assim;

    intenda abaixo Casa como sendo, dígito:

     

    Casas das Milhares   |Casa das Centenas   |Casa das Dezenas   |Casa das unidades
    parcela[3]                    parcela[2]                    parcela[1]                  parcela[0]

     

    Assim sendo se eu preencher:

    1. parcela[0] = 1;
    2. parcela[1] = 2;
    3. parcela[2] = 3;
    4. parcela[3] = 4;

    tenho na verdade: 4321 (4 mil trezentos e vinte um);

    Exemplo:

     

    parcela[0] = 9;
    parcela_2[0] = 1;

    soma?

     

    temp = parcela[0] + parcela_2[0]

    temp = 10;

     

    soma[0] = 0; //Unidade

    soma[1] = 1; // Dezenas

     

    Qual a sua dúvida exatamente?

  2. Ok!

    Suponho que você declare seu dados assim:

    typedef struct dadosPessoais         {        char nome[15]; //Nome no máximo 14 letras         int telefone; // Numero telefone extenso sem formatação Ex: 9999999999    }DadosPessoais;

    Em uma lugar qualquer e declaro meu vetor pessoas assim:

    struct dadosPessoais Agenda[10] = {0} //O copilador vai iniciar tudo com valor zero;

    Basta agora eu fazer assim para verificar se há índice vagos no vetor Agenda:

    /* Verifica se no vetor o indice é válido, e se não há dados** @parâmetros** @retorno Não havendo dados retorna: 1 ; Havendo dados: 0; Erro no indice: -1** @Autor: Britivaldo, Mauro.*/ int estaVago(struct dadosPessoais Agenda[10], int indice){   if( indece > 9 || 0 > indice) return -1;   return ( Agenda[indice].nome[0] == '\0' )}

    :)

  3. Ok,

    Observe

    typedef struct dadosPessoais         {        char nome = ' ';        int telefone = -1;    }DadosPessoais; 
    printf("Digite nome: \n");    scanf(" %s", &vetor->nome);

    Estranho isso ter copilado, observe se não de copilação;

    Outrora se ainda assim rodou
    Na declaração scanf(" %s", &vetor->nome); o sistema vai gravar muito bytes em um local reservado com 1 byte

    isso não funciona e C; em C++ acredito que também não;

    Mesmo que funcione você esta invadindo a memoria overflow ;na maioria dos casos resulta em erro fatal;

     

    declare assim:

    char nome[15]; // No máximo 14 letras;
  4. Observe que:

    pot=a*a; // neste ponto acontece o erro

    quando a variável pot tem seu valor modificado a cada loop;

    como contorna isso?

    use um outro operado de  segmentação ou modifique a declaração

     

    Tome cuidado também com nomes de variáveis e funções 

    Ex.:

    pot += a*a; // e o mesmo que pot = a*a +pot; 

    int pot; e pot() causa erros graves e entre outras coisa;

    Melhor seria assim:

    int fn_pot(int a, int {      int pot = 0;     int i = 0;...return (pot);}
  5. OK, também estou aprendendo...
    E Programação C'99, que é a versão bem mais velha que atual C++ (cujo somente ouço falar aqui no fórum coisa boas),

    Em um cursinho aqui perto de onde moro

    tive um exercício parecido com seu, quase no final do curso que, fiz assim!

     

    Em etapas:

    Como se segue;

    1. Vou criar uma função (func1) que organize minha tabela (v) em ordem do menor valor para o maior;
    2. Depois vou criar uma função (func2) que recebe por parâmetros 3 argumentos (o meu vetor, o tamanho do meu vetor, e o valor que busco no meu vetor, e retorne a função para mim 1 ou 0 (sim ou não));
    3. Por ultimo vou criar um função (func3) que una as duas anteriores, e mais;
    • fun1(v1, tamanho_v1) para organizar o meu v1 em ordem crescente;
    • fun1(v2, tamanho_v2) para organizar o meu v2 em ordem crescente;
    • for(i = 0; i < tamanho_v1; i++)

    int achou = 0;

    if( func2( v2, tamanho_v2, v1[ i ] ) )

    {

    achou++;

    }

    else

    {

    printf("Esse valor não foi localizado na tabela v2: %d", v1[ i ]);

    }

     

    func1 (deve ser capas de trocar o valor de uma elemento pelo valor do outro no vetor

    isso é muito útil, sempre que envolve pesquisas, organizar antes de buscar qualquer dado ).

    Exemplo: 

    /* troca os valores das variáveis** Organiza vetor em sistema crescente de números decimais** @parâmetros int[], size_t (um inteiro qualquer positivo diferente de 0)** @retorna nada */void Crescente(int setVetor[], size_t setVetTam){    int j, i, tempj = 0;    const char prox = 1;        setVetTam -= 1;        for(i = 0; i < setVetTam; i++)        {   for(j = 0; j < setVetTam -i; j++)            {   if( setVetor[j] > setVetor[j +prox])                {                    tempj = setVetor[j];                    setVetor[j] = setVetor[j +prox];                    setVetor[j +prox] = tempj;                }            }        }}

    func2(compara um valor X, com todos os valores do vetor[20] ou mais)

    Exemplo:

    /* Busca Linear (independente da organização dos dados);** Busca por valor em uma tabela de valores.** @parâmetros int[], size_t (um inteiro qualquer positivo diferente de 0), ** int;** @retorna sim(1) ou não(0)   */int buscar(int v[], size_t vTam, int valor){    int i;        for(i = 0; i < vTam; i++)        {   if(v[i] == valor)                return 1;        }return 0;}

    Ok :)

  6. Ok!

    Eu faria assim:

     

    uma  função que organizar em ordem Crescente (tabela[], tamanho da tabela) {

    ... depois que organizar em ordem crescente a tabela (as duas);

    }

     

    Vamos comparar um por um dos valores;

    para isso use uma função que busca um valor dentro de um vetor qualquer;

     

    for i = 0 i < tamanho1; i++

     if busca(tabela1[ i ], tabela2, tamanho2 )

    achou++

     

    a função busca retorna (1-sim/0-não) buscar(valor, tabela[], tamanho da tabela) {

    /* função pode ser otimizada com pesquisa binaria */

     

    função buscará um valor na tabela, use a declaração de repetição (for/ while/ goto)

    que mais lhe agradar para isso, ou chamada recursiva (não recomento a ultima não); 

    }

    Observe que toda vez que retorna sim, uma variável deve ser incrementada, achou++

    assim então toda vez que retorna zero(0 - não) eu imprimo esse valor;

  7. OK!
    Interessante! Estou na metade do curso de C'99 não tinha pensado nesta possibilidade:

    pesquise por #include <pthread.h> 

    a biblioteca padrão pthread.

    Tem tanto material sobre que não consegui escolher somente um.

  8. Ok!

    (Raciocine comigo conforme o pseudocódigo);

    /* Vamos representar as raças por código de raças */unsigned char tabela_raca[3][16] = {"Maltes", "Inglês", "Pastor Alamao"}; //Códigos; 0- Maltes ... os ofsetes do vetor;

    E agora?

    Simples busca por código de raça por argumento de função, observe o pseudocódigo:

     

    função retorna int racaBusquei(cod, viveiro[], total Animais)

    declaro um inteiro contador

    com nome ACHOU;

     

    for(total_Animais ate 0)

    se encontrar (viveiro[total Animais].raça == cod)

    ACHOU++;  //soma +1 ao contador ACHOU

     

    no final do loop quando não resta mais animais no vetor viveiro

    retorna o valor (ACHOU);

     

     

     

     

    As pessoas entendem isso! :)

  9. " 3. O programa deve informar se um palpite já foi feito pelo jogador " 

    Ok!

    Você poderia por exemplo declarar uma vetor de palpites errados (como se segue neste 'pseudocódigo');
     

    inpalpite_buff[ chances] = {0}  

    // O vetor se limita a quantidade de chances já que a quantidade de chances determine o fim dos palpites.

    int jogadas = 0;

    // Registra a quantidade de erros cometidos;

     

    ....

    Supomos uma jogada: palpite = '10
    if (n_sorteado == palpite)

     

    imprimir (parabéns você acertou!);

    imprimir(voce fez (jogada + 1) vezes);

    imprimir(Sao as seguintes jogadas);

    for(jogada--; jogada <= 0; jogada--)

    imprimir ( palpite_buff[ jogada ] "\n" );
     

    else

    palpite_buff[++jogada -1 ] = palpite;

     

    Continua... até o Game Over ou acerta

    (fim das chances/acerto reinicia tudo);

  10. De cara percebi muito erro nesta função:

    void novonodo(pessoa *el,int c){    el=(pessoa *)malloc(sizeof(malloc));    el->b=c;        }

    Observe que como argumento de malloc tem sizeof(malloc);

    isso resulta em um reserva de memoria de 1 byte.
    Que nada tem a ver com a estrutura de dados de pessoa  pessoa.

     

    fui até ai.

  11. allman indentation style, é o que eu indico para fazer uma boa indentação.
     

     

    case 'v':erde++;break;case 'V':erde++;break;case 'a':zul++;break;case'A':zul++;break;case'c':tanho++;break;case'C':tanho++;break;/* Nesta blocos de código a performance pode ser melhorada. */case 'v':case 'V':Verde++;break;case 'a':case 'A':Azul++;break;case 'c':case 'C':tanho++;break;/* aplique o mesmo conceito nos demais */
  12. OK!

    Eu executei seu software e notei que a condição sentinela do loop while não estava fazendo o break,

    então troquei o algoritmo por este:

    <-  ....

    while(1)    {        scanf("%d %d %d", &DataEnt.dia, &DataEnt.mes, &DataEnt.ano);        if(!DataEnt.dia) break; /** <havia antes >:                                   * if(DataEnt.dia == 0 && mes == 0 && DataEnt.ano == 0)                                  *    break;                                  */        else        {
    ... ->
    Se erra isso, tai um das possíveis solução.
  13. Que coincidência ter feito algo parecido no cursinho;

    Tanta reutilizar o meu algoritmo a sua necessidade;

    /*------------ '!'--------------* | Aluno: Mauro                 | | e-Mail: [email protected] | | Linguagem:  C                | | Plataforma: Windows x86      | | Editor: Code::Blocks v13.12  | |                              | | "A sempre um lugar no topo"  | *------------------------------*//* Função principal @[member=Return] int (0) quando finalizado */int main (void){    int sorteio = 0,        acertou = 1,        tentativas = 0;            srand(time(NULL));            sorteio = 1 + rand()%1000;            while (acertou) {                    if(acertou == 1)                        printf("Eu tenho um numero entre 1 - 1000. \n"),                        printf("Tente adivinhar o numero. \n"),                        printf("Por favor digite seu primeiro palpite: ");                            scanf("%d", &acertou);                            ++tentativas;                            if(sorteio == acertou) {                                tentativas < 10?                                    printf("\n\nOu voce sabe o Segredo, ou tem muita Sorte. \n"):                                    printf("\n\nAhah! Voce sabe o segredo!\n");                                tentativas = 0;                                printf("Excelente! Adivinhou o numero! \nDeseja Continuar? ");                                (acertou = (scanf("%d", &acertou) && acertou))?                                                    (sorteio = 1 + rand()%1000):                                                     printf("OK!");                            }else if(acertou < sorteio) {                                printf("Muito Baixo tente Novamente: ");                                acertou = 2;                            }else if(acertou > sorteio) {                                printf("Muito Alto tente Novamente: ");                                acertou = 2;                            }            }    return (0);} 
  14.  
    Podemos contorna com essa solução, se preferir!
    int main(int argc, char *argv[]){   int i, j=0, k, flag = 0;   char frase[20], letra[20];   printf("Digite a primeira frase:\n");   gets(frase);   int size = strlen(frase);   for(i=0 ; i<size; i++) {      if(i == 0) {         letra[j] = frase[i];         j++;      }      letra[j+1] = '\0';/**<- Aqui está sua nova declaração curinga!                          * Haja vista que, for(i=0 ; i<size; i++)                         * ignora o caractere nulo '\0' na contagem de char's no final!                         *                            */

    poderia ainda também modificar a condição de existência do loop para incluir tudo.

  15.  

     

    float x;

    x = 1/2;

    cout << x;

    Kleber Lauton

     

    Oi!

    Observe que 1/2 é 1 inteiro dividido por 2 inteiro, sempre terá outro inteiro como resultado é 0;

    Ok, então como contorno isso? Use um operado unário chamado Casting (c_type).

    Ex.: 

    float x;x = ( float )1/2; /** Antes da divisão o inteiro 1 e promovido (Upcasting) para 1.0 float;  *  Agora acontece como esperado: 1.0/2 = 0.50000000 */ cout << x;
  16. *O primeiro aluno é: itbNotas[ 0 ];

    ***A primeira nota do primeiro aluno é: itbNotas[ 0 ][ 0 ];

    ****A ultima nota do primeiro aluno e: itbNotas[ 0 ][ 4 ];

     

    Conclui que:

     

    int lAlunos = 0;

    int cNota = 4;

     

    for( iAlunos = 0; iAlunos < 6; iAlunos++ ) {

                           

                             itbNotas[ iAlunos ][ cNota ]  = itbNotas[ iAlunos ][ cNota ] + 1.5;

    //     ou              itbNotas[ iAlunos ][ cNota ] += 1.5;
     

    }

  17. Boa Sorte em sua jornada!

     

    /* Organiza em ordem crescente a sequencia de três variáveis inteiras;*/int main (void){    int a = 0, b = 0, c = 0, entre = 0;        puts("Entre com 3 valores inteiros: (0 para sair)");        scanf("%d%d%d", &a, &b, &c);        while( (a &&  && c) {              //Algoritmo que organizará as variáveis (>) crescente, (<) decrescente;              if(a > c)              {                 entre = a;                 a = c;                 c = entre;              }              if(a >               {                 entre = b;                 b = a;                 a = entre;              }              if(b > c)              {                 entre = b;                 b = c;                 c = entre;              }              //Ainda tem muito a melhorar.              printf("A: %d,\nB: %d,\nC: %d.\n\n", a, b, c);              puts("Tente novamente? (0 para sair)");              scanf("%d%d%d", &a, &b, &c);   }    puts("\n\nPronto.\n");    return 0;}
  18. kkk Vou falar para você o que meu Boss diz a mim:
     
    Sempre, sempre; sempre sempre, sempre sempre; sempre; incie as variáveis na declaração
     
        int x=1;    int i=0, posicao_livre = 0;        while(lista[i].dada != -1){                i++;            posicao_livre = i;        }    

    posicao_livre = 0;

    }
     
  19. Ok!

    Dentre as soluções as mais seguras são aquelas que reutilizamos código, códigos já otimizados.

     

    Porém por exemplo por questões didáticas, ou diversão é sempre bom 'reinventar a roda'

     
    void strDelete(int iSubscritor, char strTabela[][8]){    int i, j;    for(i = iSubscritor; i < MAXLINHA; i++) {// Troque a valor da variável i(subscritor) pelo o string a ser omitido.        for(j = 0; strTabela[ i+1 ][ j ]; j++ ) {            strTabela[ i ][ j ] = strTabela[ i+1 ][ j ];        }    }    strTabela[ i-1 ][ 0 ] = '\0';}
  20. Ok!
    Apenas um detalhe a observar aqui é que:   m[j] = rand() % 50; //variável de  0 - 49;

                                                                           m[j] = rand() % 51 //Variável de 0 - 50;

    Isso te ajudará a evitar futuros bugs!

  21. Sera que meu código chegou perto do que esta pedindo, por que não entendi exatamente qual e a pergunda! Mais de Qualquer forma esta ai. valeu pelo exercício :)




    int main ()
    {
    /* o usuario escolha uma linha ou coluna e classificar em ordem crescente
    linha-esquerda p/direita
    coluna - cima para baixo*/
        int exemplo[4][4] = {1,36,59,25,98,14,36,78,78,32,14,-1,99,69,55,-6}, D, itemp, con1,con2;
        char chOp = 0;
        puts("Entre com Lx linhas ou Cx Coluna:\nExp.: l1 (para primeiro linha)\n?");
        scanf("%c %d", &chOp, &D);
        switch(chOp)
        {
        case 'L'://Linhas ***
        case 'l':
            D-=1;
            for(con1 = 0; con1 < 3; con1++){
                for(con2 = 0; con2 < 3;con2++){
                    itemp = exemplo[D][con2];
                    if(itemp > exemplo[D][con2+1]){
                        exemplo[D][con2] = exemplo[D][con2+1];
                        exemplo[D][con2+1] = itemp;
                    }
                }
            }
            printf("%d Linha: ", D+1);
            for(con1 = 0; con1 < 4; con1++)
                printf("%d ", exemplo[D][con1]);
        break;
        
        case 'C':
        case 'c':
            D-=1;
            for(con1 = 0; con1 < 3; con1++){
                for(con2 = 0; con2 < 3;con2++){
                    itemp = exemplo[con2][D];
                    if(itemp > exemplo[con2+1][D]){
                        exemplo[con2][D] = exemplo[con2+1][D];
                        exemplo[con2+1][D] = itemp;
                    }
                }
            }
            printf("%d Coluna:\n", D+1);
            for(con1 = 0; con1 < 4; con1++)
                printf("     %d\n", exemplo[con1][D]);
        break;
        default:
            puts("Ouve um erro Inesperado!");
        }




    return 0;
    }

  22.  

    NUNCA, MAS NUNCA, FAÇA ISSO.

     

    JAMAIS!

     

    PÉSSIMO,

     

    HORROR, AAAAAARGH. MORRI.

    Edmorte
     

     

     

    Não entendo, mesmo o que aconteceu com você, deixe mais detalhes aqui para que poça compreender, não deu em nada, apenas o time de 2s. 

  23. O que ocorre e que o resto da primeira divisão MOD for != 0. 
    por tanto isso vai acontecer sempre!

    Caixa Exemplo 1:
    Op.: 2 e 5'
    Saque para mim: 17,00

    Calculando Aguarde...
    17/5 = 3 MOD 2 -> / (é < 5) ->
    2/2 = 1 MOD 0 -> MOD 0 Ótimo!

     

    Pronto: 5 x3' 2 x1 e igual a Saque? SIM
    Retira bem sucedida.

     

    Caixa Exemplo 2:
    Op.: 2 e 5'
    Saque para mim: 16,00

    Calculando Aguarde...
    16/5 = 3 MOD 1 -> / (é < 5) ->
    1/2 = 0,5 MOD 0 -> Opa nao tenho 0,50c mais vamos lá...

     

    Pronto: 5 x3' 2 x1 e igual a Saque? NAO pois Saque = 16,00 e nem fund**do vou te dar 17,00
    Retira FAIL CRASH Policia pega esse HACK bugador ...

     

    Caixa Exemplo 3:
    Op.: 2 e 5'
    Saque para mim: 8,00

    Calculando Aguarde...
    8/5 = 1 MOD 3 -> / (é < 5) ->
    3/2 = 1 MOD 1 -> Opa não tenho moeda mais vamos lá...

     

    Pronto: 5 x1' 2 x1 e igual a Saque? NAO pois Saque = 8,00 e o que calculei é 7,00
    Retira Fail não sei contar, meu irmão mais novo e mais esperto (todo caçula e mais inteligente) tenta nele ...

     

    Caixa Exemplo Caçula (mais novo):
    Op.: 2 e 5'
    Saque para mim: 8,00

    Calculando Aguarde...
    8/5 = 1 MOD 3 -> / (é < 5) ->
    3/2 = 1 MOD 1 -> Opa não tenho 1,00. Vamos recalcular e sozinho e desta vez sem /5.
    Calculando Aguarde...

    8/2 = 4 MOD 0 -> Aeee MOD 0' yah...

    Pronto: 4 x2' é igual a Saque? SIM
    Retira bem sucedida. Tenha um Bom Dia!

    É bem assim que vi seu código, se vai te ajudar na implementação mais sólida? A isso não sei, porém espero que sim, Boa Sorte.

  24. Eu conheço essa maneira bem prática;

     

    /* Meu Sleep Poxfit--;*/

     

    int i = 999999999;; //Valor maximo de um int (4 Bytes); 

    while(i--);

     

    2s mais ou menos depende muito do hardware do PC.

  25. puts()!, como ele gosta do gets()!
    kkkk :)

    Todo o problema reside nas instancias das suas variáveis!

     

    Eu por exemplo faria assim para reesolver....


    /* Minhas Variaveis tem... */
    char chNome[16] = 0;        //Meu Nome no máximo tem que ter 15 letras ou menos contando os espaços também;

    char chIdade[3] = 0;          //Minha idade tem que ter no máximo 2 dígitos;

    char chEnd[20] = 0;          //Meu Endereço tem que ter no máximo 19 letras ou menos, contando os espaços tambem;

    char chECivil[9] = 0;         //Meu Estado civil tem que ter no máximo (solteiro / casado) 8 letras sem espaço.

    char chNasci[20] = 0;       //Minha Nacionalidade tem que ter no máximo 19 letras ou menos, contando com espaços também.
    /** Parti para o código agora.... */

    • Curtir 1

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!