Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Ansi C

    Ajuda com código - C

    Então @mi2011, Não minha linha de pensamento: NULO/ NULL pode ser tanto 0 quando -1. Fica a critério do programador ou da implementação da linguagem, você na qualidade de programador pode definir esta e ou outra condição. Por exemplo em C: Um ponteiro de valor 0 é um ponteiro nulo; Um literal de caractere '\0' é nulo, pois é 0 na tabela ASCII; O Macro EOF (End of File) que representa do fim de um stream é -1. Uma Situação: 1> Se escrevermos uma função que solicita através de parâmetro uma idade, podemos implementar essa função de maneira a retorna -1 caso o valor passado pelo parâmetro seja um valor negativo, alertando que não existe idade negativa. Assim entendesse que uma idade negativa é uma valor nulo. 2> Temos uma função que exige por parâmetro números diferentes de 0, então se passamos o valor 0 ele não afetará a operação desta função pois é nulo. Supomos que a função do caso 2 seja: pegar esse valor e multiplicar por 1000, Você concorda que 1000 + 0 é 1000 (NULO)? Você concorda que 1000 * 1 é 1000(NULO)? Resolução: O problema faz menção a valor/ número; Para seu problema Zero é NULO já que zero não tem valor, aproposito zero é isso mesmo kkk. EXEMPLO: /** Converte Numerador e Denominador de uma fração em valor* decimal do tipo Float */float To_Float(int as_numerado, int as_denominador);int main(){ float f_tmp; setlocale(LC_ALL, ""); f_tmp = To_Float(1,3); printf("Show variable: %f float.\n\n", f_tmp); return 0;}float To_Float(int as_numerador, int as_denominador){//CONDIÇÃO PARA EXECUÇÃO DA FUNÇÃO: //DENOMINADOR MAIOR E DIFERENTE DE 0, E NUMERADOR MAIOR QUE 0. if(as_denominador <= 0 || as_numerador < 0) return 0; return ((float)as_numerador / as_denominador);} Não sei se fui claro, qualquer coisa estamos aqui. </byR3X>
  2. Bom Dia @leonardosb, Tudo bem? Abaixo temos o fragmento que contém o novo bug... for (i = 0; i <= numero; i++) { printf ("Digite o nome do personagem %d: ", i); //cadastrando o nome dos personagens gets (personagens[i]); }//for O Loop FOR tem sua condição lógica estendida até que i seja: Menor ou Igual à numero: for (i = 0; i <= numero; i++) Então assim digamos que numero := 3, o loop vai até que i = 3! Simulação: i =< 0, Loop; i =< 1, Loop; i =< 2, Loop; i =< 3, Loop, && finaliza o bloco FOR. Resolução Basta tirar o sinal de igualdade da condição, ficando desta forma: for (i = 0; i < numero; i++) { ...} e resolve o problema de linha extra. Será que expliquei bem!? </dyR3X>
  3. Ansi C

    Ajuda com código - C

    NULO !!? Nulo é muito subjetivo, primeiro temos que saber qual é a variável e dependendo disso se é nulo ou não vai depender exclusivamente da implementação. Por exemplo se considerarmos um string em C como segue abaixo é nulo: #include <stdio.h>int main (void) {//>AS DUAS VARIAVEIS ABAIXO SÃO MATRIZES COM VALOR NULO (ZERO): char meu_string[30] = { 0 }; //>É NULO, POIS TEM APENAS ZEROS, unsigned char character= -1; //>TAMBÉM E NULO. //>NESTE EXEMPLO AMBAS VARIÁVEIS SÃO NULAS, PARA MINHA IMPLEMENTAÇÃO //QUE 0 E -1 SÃO NULOS. return 0; } considerar -1 como sendo valor nulo, POIS não existe caractere com valor negativo, ou maior que 254.
  4. Oi @marcelo felipe_770680, O que está acontecendo é que a cada vez que você chama a função main() uma nova instancia do programa e criada na memoria. Por fim, o relatório que é visualizado na imagem acima não correspondo ao primeiro programa no qual você inseriu os dados, e sim a uma nova instancia do programa main () na memória. Você entendeu o caso, pergunte se restar dúvidas, outra coisa, Qual é a sua intenção ao chamar main() dentro de si tantas vezes? Vou tentar adivinhar! Segue abaixo uma versão com poucas alterações de seu código. #include <stdio.h>#include <stdlib.h>#include <string.h>#include <locale.h> //>Add local ou lingual do program#define TAM 1int Catch_Opcao(void);int main(void){ setlocale(LC_ALL, "Portuguese"); //>Para saída de caracteres acentuados na tela int i = 0; int a[TAM] = { 0 }; char funcionario[TAM][30] = { {0}, }; for (; { //>Loop infinito, finaliza com comando 3 do menu. system("cls"); switch(Catch_Opcao()) { case 1: for(i=0; i<TAM; i++) { printf("\n\t\t\tPesquisa de Satisfacao\n\n\n"); printf("Nome do Funcionario: "); gets(funcionario[i]); printf("De uma nota de 0 a 10: "); scanf("%d", &a[i]); while(getchar() != '\n'); printf("\n"); system("cls"); } break; case 2: printf("\n\n\n\t\t\tFuncionarios Votados na Pesquisa\n\n"); for(i=0; i<TAM; i++) { printf("Funcionario: %s\n", funcionario[i]); printf("Nota : %i\n", a[i]); printf("\n"); } printf("Pressione para continuar...:"); getchar(); //>Pause!!! break; case 3: printf ("Sair...\n"); system("PAUSE"); //>No windows DOS. return 0; default: printf("\n\n\n\n\n\t\t\t\tOpção Invalida\n"); printf("Pressione para continuar...:"); getchar(); system("cls"); } }return 0;}int Catch_Opcao(void){ int opcao = 0; printf("\n\t\t\tPesquisa de Satisfacao\n\n\n"); printf(" \t\t1 - Para votar\n"); printf(" \t\t2 - Para Relatorio\n"); printf(" \t\t3 - Para sair\n"); printf("\t\tDigite: "); scanf("%d",&opcao); while(getchar() != '\n'); return opcao;} Fique a vontade para fazer questionamento. Até! </dyR3X>
  5. Olá @marcelo felipe_770680 Aqui: scanf("%s",&funcionario[i]); //>Desta maneira; A função não sabe a largura do strings e vai capturar até que encontre um caractere BRANCO (ESPAÇO, TAB, ou NOVA LINHA), ou seja, um palavra. Para: scanf("%29[^\n]", &funcionario[i]); //>A função scanf vai capturar strings até que pressione [/ENTER] ou o limite de 29 caracteres capturados. Qualquer dúvida, questione. Espero ter ajudado.
  6. Boa Dia, @Pedro Henrique_758189 Eu recomendo visitar o seguinte link Strings e Caracteres em C O material é esclarecedor, aposto que depois de ler você terá as soluções! Caso reste dúvidas, nos questione okey? Bons Códigos. </dyR3X>
  7. Boa Dia @Trying, Esse problema é causado pelo o caractere nova linha que resta no buffer de entrada apos digitar o número e teclar ENTER; Com isso é capturado pelo função scanf. Eu já abordei uma solução no seguinte poste: Meu vetor esta pulando a primera Posisão 0 para 1 Ficou com dúvida, questione?
  8. Boa Noite @mi2011, --Também estou inciando e nos meus estudos autônomos, e a resposta para sua pergunta é: Sim claro que pode. No exemplo, void é o tipo de retorno (que não retorna nada), porém poderia ser float que retornaria um número decimal. Em seguida fiz um exemplo para ilustrar melhor: #include <stdio.h>int main (void) { float decimal_number = 0; decimal_number = To_Decimal(1,3); printf("DECIMAL: %f\n\n", decimal_number); return 0; }/** \brief Converte dos valores inteiros em um valor decimal.* \return float- numerador e denominador, ambos para ponto flutuante.*/float To_Decimal(int num, int den) { float ret = 0; ret = num; ret = ret / den; return (ret); } okey?
  9. Boa Noite @leonardosb Está acontecendo 'bug da nova linha'. Quando o usuário entra com número, ele faz o seguinte 'input' (entrada) 3 [/ENTER] Na função scanf: O valor inteiro 3 é passado para variável, seguindo de acordo; Contudo, um caractere é ignorado e fica na memória (stream de entrada) esse caractere é o \n (caractere de Nova Linha) criado ao pressionar a tecla [/ENTER]. Chegamos função que captura por sua vez esse caractere restante, passando para valor do ponteiro e finaliza. Para evitar problema, existe várias soluções dentre elas uma estrutura de repetição que limpará este e outros caracteres restantes no input. Dou a seguinte solução de exemplo: #include <stdio.h>int main (void) { int idade = 0; char seuNome[31] = {0}; printf ("OLA! QUANTOS ANOS você TEM?\n"); scanf ("%d", &idade); while (getchar () != '\n'); //> Eliminando o [/ENTER] printf ("QUAL SEU NOME?\n"); scanf ("%30[^\n]", seuNome); while (getchar () != '\n'); //> Eliminando o [/ENTER] printf ("\n\nOow!!: %s\n", seuNome); if (60 > idade) printf ("você E JOVEM AINDA..."); if (60 < idade) printf ("você ESTA NA MELHOR IDADE, ..."); printf ("\n\n"); return 0; } Podemos discutir mais se você precisar, é só perguntar. Obrigado e bons códigos. </dyR3X>
  10. Ola! Para resolver a parte que captura as palavras bem como os espaços formando um nome ou frase com scanf, usamos o seguinte string de formatação: "%xx[^\n]" xx é: o comprimento da palavra/ frase no caso char name[30] fica: "%29[^\n]" No interior dos colchetes tem se ^\n isso que dizer que o scanf vai capturar caracteres até que(^) nova linha (\n) entre pelo teclado. Acho que isso resolve a parte de captura de frases ou nomes pessoais.
  11. Em C, partindo para campo de estruturas de dados, tipo struct tem a propriedades de criar Campos de bits de tamanhos diferentes; bits Fields. Este exemplo define uma matriz de estruturas bidimensional nomeada screen. struct{ unsigned short icon : 8; unsigned short color : 4; unsigned short underline : 1; unsigned short blink : 1;} screen[25][80]; Fonte: MSDN
  12. Ansi C

    Ajuda com Algoritmo

    Sim. Tentei escrever C, sou iniciante e acho que meio que por aí que resolve a questão.
  13. Ansi C

    Ajuda com Algoritmo

    int numbers (int nInicial, int nIntervalo, int nQuantidade) { int qPares = 0, //Quantidade de Pares qImpares = 0, //Quantidade de Ímpares qMultSeven = 0; //Quantidade de multiplos de 7 float average = 0; //Média... int count = 0; while (count < nQuantidade) { average = nInicial + average; if ((nInicial%2)) qImpares = 1 + qImpares; else qPares = 1 + qPares; if (nInicial % 7 == 0)qMultSeven = 1 + qMultSeven; count = 1 + count; nInicial = nIntervalo + nInicial; } average = average / nQuantidade; //Exibir com printf... return 0;// }
  14. São muitos "pontos" até resolver o poste. Por ora, a o código abaixo e com relação a questão Edit.: :: A-: e B-: /** @authr Mauro Britivaldo* :: Point em rectangle ::** Copyright 2015, License all free *///Declared structure- herestruct ponto { int x; int y; };struct rect { struct ponto pontoA; struct ponto pontoB; };//Prototype function- here/**< Calcular a área de de r? ...* \param struct rect r type.* \return int */int cal_area (struct rect r);/**< B- Calcular o centro de r, retornando um valor do tipo ponto? ...* \param struct rect r* \return struct ponto */struct ponto centro_of_rect (struct rect r);#include <stdio.h>#include <locale.h>int main (void) { setlocale (LC_CTYPE, "Portuguese"); int area; struct ponto half; //Centro de r struct rect r = { .pontoA = {1, 1}, .pontoB = {4, 5}}; //< Calcular area do retângulo area = cal_area (r); printf ("AREA DE A(%d, %d), B(%d, %d) é: = %d\n", r.pontoA.x, r.pontoA.y, r.pontoB.x, r.pontoB.y, area); //< Calcular ponto central half = centro_of_rect (r); printf ("COORDENADA CENTRAL: C(%d:%d)\n\n", half.y, half.x); return 0; }//< Calcular a área de de r? ...int cal_area (struct rect r) { int lX, lY; lX = r.pontoA.x - r.pontoB.x; lY = r.pontoA.y - r.pontoB.y; return (lX * lY); //E IGUAL AREA. }//< B- Calcular o centro de r, retornando um valor do tipo ponto? ..struct ponto centro_of_rect (struct rect r) { struct ponto pont; pont.x = r.pontoA.x + (r.pontoB.x / 2); //Cast para tipo int automático pont.y = r.pontoA.y + (r.pontoB.y / 2); // ... return pont; }
  15. A todos um Boa Dia! Fiz cópia de seu Código e aí percebesse poucos erros de semântica significado das coisas. e.i.: int n1[5], n2[5], n3[5], x, cont_p, cont_r, cont_np;char nome[30][5], resp[15][5];float m[5] Acima declarou v.A (variable Array) chamada nome[30][5]... O erro aqui é na ordem dos limites. Como está escrito, nome é: vetor com [30] linhas, [5] colunas, ou (se tratando de strings) [30] nomes de [5] letras. O esperado acho que é: vetor com [5] linhas, [30] colunas, ou (se tratando de strings) [5] nomes com [30] letras. Para tanto faça correção: nome[5][30]; Iluminado está questão, espero ter ajudado um pouco.
  16. Eu acho. Práticas (exercício, problemas) me ajudam a fixa o novo conhecimento, e assim a cada assunto novas práticas.
  17. Este livro tem práticas? Procure nomes que tenham boas práticas. C programming Modern Approach tem boas práticas.
  18. Com os atuais processadores acho perda de tempo, porém a discussão é válida. Enfim faço swap com operador soma e subtr.
  19. Só sei que é empolgante.
  20. Ansi C

    Onde aprender C

    De nada!
  21. Ansi C

    Onde aprender C

    Não estou certo disso, mas minha opinião é que não.Melhor consultar mais membros do fórum.[emoji6] Editado: C é da linhagem de linguagens antigas acho que a última reforma fio em 2009 quando se criou C11 junto ao C++. Este fato carece de estudo.
  22. Ansi C

    Onde aprender C

    Exclusivo de C. São 692 páginas só sobre C, Traduzido para Pt-br.
  23. Ansi C

    Porque C# nesse forum?

    pnet Acho um disparate ter C no mesmo fórum de C#. Bem como uma é a percussora da outra e é evidente para todos que embaixo de C sharp > vem Java e C++ e embaixo das duas ultimas mora o > C, o escalonamento da discussão é lógico e livre, pós tudo termina Assembly. No final são um monte de p*rras de 0s e 1s. O fato é que C merece um fórum sé Seu.
  24. Ansi C

    Onde aprender C

    "Como programar C - Deitel..." se o for: C How to Programa Sixth Edition ou qualquer outro, é ótimo é Didático e você encontra na internet de graça para donwload, o que não posso dizer de C Programming que é mais apresentação do que ensino e portanto pouco didático.
  25. Você entendeu? Renanzinthhh para melhor ilustrar use o operado sizeof no vetor. Assim: #include <stdio.h>int main (void) { int x = 0; /**< Zero é nulo. */ float vt[x]; /**< Vetor de tamanho Zero também é nulo. */ printf ("SizeOf is: %u\n", sizeof vt); /**< Resultado 0 */ return 0; } Agora observe sobre a perspectiva do VLA - Variable Length Array: /** @authr Mauro Britivaldo* License all free on edition and published */#include <stdio.h>int main (void) { int x = 0; /**< Zero é nulo. */ printf ("OI: Entre com numero inteiro: "); while ( !scanf (" %d", &x) ) /**< Força o input de um INT */ (void)getchar (); float vt[x]; /**< VLA: quantidade é x-variável */ printf ("SizeOf is: %u bytes\n", sizeof vt); /**< Resultado x mult float */ return 0; } Edit: Se tem haver com seu problema? 70% que sim!

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!