Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.311
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Boa dia! Observe a pergunta, depois, observa-se a resposta. Com essas coisas em mente, facilita-se a compreensão do como ir da pergunta à resposta. PERGUNTA. O que entra [argumentos] São composições com dois valores numéricos, digamos que teclados pelo usuário, sendo que, para expressar uma entrada intuitiva, escolho dois-a-dois numa linha. Atenção Assumo entradas ideais: não há nenhuma categoriade erros e falhas. Expresse-se a aocação de inteiro como dia= 0; a alocação de real como minima, maxima; a impressão: Quais foram as temperaturas do dia {dia}; a impressão: [A Minima Maxima escalares]? a extração: minima, maxima; a impressãio: minima, maxima; Fim da expressão. C'11 /* EXERCICIO ----------------------------------------------------------------------------- */#include <stdio.h> int main(void) { unsigned dia= 0; float minima , maxima; printf("%s%u%c","Quais foram as temperaturas do dia ",dia,'\n'); printf("%s","[A minima maxima escalares]? "); scanf("%f%f",&minima,&maxima); ///printf("%f%f",minima,maxima); } Veja https://en.cppreference.com/w/cpp/language/type float unsigned int https://en.cppreference.com/w/c/io/fprintf printf https://en.cppreference.com/w/c/io/fscanf scanf ...
  2. Filosofia é a maneira como alguém estuda e interpreta o objeto estudado. VOCÊ ENTENDEU AGORA? Desculpa-me pela confusão.
  3. Essa era minha filosofia, daí cresci e mudei. PONTEIRO São tipos com aritmética especifica. Ponteiro é um tipo como int, só que derivado de int, não somente de int, de todas as primitivas e dos tipos que o programador definir e construir a partir do que já existe. O valor de um ponteiro precisa ser sempre, sempre um endereço, porque desta maneira será avaliado, senão tem algo errado. [Filosofia] int *p, p é uma variável , sendo que 'p' pode aponta para outra , porque seu valor é também um endereço
  4. Não siga esta recomendação: Nem um e nem o outro: prefira sempre o seu, PORQUE ELE é SEU. Seja honesto consigo mesmo, corrija o que achar errado, somente isso. Para mim, isso foi o mais IMPORTANTE!
  5. Porque supostamente ele é a junção de dois outros: Leia um número inteiro positivo, depois mostre quantos dígitos tem o número; Leia um número inteiro positivo, depois mostre a potência da base 2 com esse número. Junta-se os dois no liquidificador e tem-se: Parece fácil? É SÓ NÃO PENSAR D+ Expressa-se ... a alocação dum inteiro; ... a extração de um inteiro; ... a alocação doutro inteiro como decimal; ... a alocação doutro inteiro como potência; ... uma repetição que, se o inteiro difere de zero, faça-se, ... o modulo daquele inteiro por 10 e se diferente de 0, então, ... adicione potência ao valor de decimal; ... eleve a potência; Fim da expressão. ler_um_numero_inteiro_por_binario_(1011)_e_converter_para_base_decimal.c /* ler um numero inteiro por binário (1011) e converter para base decimal */ /*=================================[ 0-0 ]==================================* EXERCICIO Leia um número inteiro que representa um número binário (formado de zeros e uns). Imprima esse número convertido para base decimal. 17:34 07/05/2024 *==========================================================================*/ #include <stdio.h> int main (void) { printf ("%s","Entre uma configuração[ max. 10 digitos ]?>"); int inteiro= 1111111111; scanf ("%10d",&inteiro); int decimal= 0; int potencia= 1; do { if (inteiro% 10) decimal+= potencia; potencia*= 2; } while (inteiro/= 10); printf ("%s%d","!>",decimal); putchar ('\n'); } /*===========================================================================*/ c'11 - gcc11.4 — Somente isso, inicialmente, fica o file.
  6. Boa dia! Pelo que me insinua, a pergunta do enunciado era desse jeitinho, por exemplo: 1101 ~~~^ Isto é o valor para um inteiro, ele é decimal e vale mil cento e um, será escaneado e salvo numa variável do seu tipo (int, long tanto faz) O EXERCICIO Convertam-se os dígitos no VALOR daquele inteiro para binário, depois... Mostre: 1 + 0 + 4 + 8 E como resposta: 13 Ou seja, mil cento e um (1101) configurava|configura 13. *** Às vezes o enunciado parece isso, às vezes não, então… Quando assim, consulta-se o professor, né?
  7. Boa dia. Esse programa compila e faz sua programação, porém, ele não pergunta e não responde conforme enunciado: Comando FOR iteração | repetição de comandos num bloco Como enunciado, quero escanear um número inteiro positivo N (...) Notei que sua programação quase não escaneia, e por cima disso, chama-a por 2x, ou seja, pelo certo serão 2 valores, quando o problema é de 1 valor: UM INTEIRO POSITIVO! Parece fácil? Veja! Expressa-se a alocação da variável N como inteiro; a extração de uma decimal; a alocação de um contador como número natural de valor inicialmente 0; a repetição que, para o contador menor que N, faça-se aumentá-lo, e escrever o contador; Fim da expressão. numero_inteiro_positivo_N_e_imprima_todos_os_numeros_naturais_de_0_ate_N.c /* Número inteiro positivo N e imprima todos os números naturais de 0 até N */ #include <stdio.h> #include <limits.h> int main (void) { int N= -1; printf("%s%u%s","Entre um número inteiro positivo [max. ",INT_MAX,"]: "); scanf("%d",&N); for (int n= 0 ; n<N ; n++) { printf("%d ",n); } putchar ('\n'); } c'11 - gcc'11.4 O pai fica satisfeito só confia!
  8. @arfneto Bom dia! Se tem uma resposta conforme o enunciado acertadamente, por favor, produza..., porém se puder. Só isso! São essas as minhas dúvidas: Uma fonte daquela afirmação; Um programa conforme o enunciado com mesma pergunta e resposta; E que compila. Se pode responder acertadamente com o texto do enunciado (abaixo), eu fico grato, senão pelo menos para de tentar me constranger — Foque o enunciado da pergunta, por favor. e obrigado.
  9. Boa noite! Refatorarei essa solução, é somente isso mesmo, embelezei o máximo que pude! Veja que lindinho: erro_em_exercicio_de_algoritmo_de_uma_entrevista.c /* erro em exercício de algoritmo de uma entrevista. */ #include <stdio.h> #include <limits.h> int main () { printf ("%s%d%s","Digite a quantidade de pessoas [max.",INT_MAX,"]: "); int n= -1; /* valor negativo sendo uma não quantidade */ scanf ("%d",&n); if (n<=0) return 1; int outros= 0; int femnao= 0 , mascnao= 0; int femsim= 0 , mascsim= 0; char sexo , resp; for (int i= 0 ; i<n ; i++) { int r= scanf (" %c %c",&sexo,&resp); if (r==EOF) break; if (sexo=='f') { if (resp=='1') femsim++; if (resp=='2') femnao++; } else if (sexo=='m') { if (resp=='1') mascsim++; if (resp=='2') mascnao++; } else outros++; } putchar ('\n'); int resps= mascsim+ femsim; int respn= mascnao+ femnao; int fem = femsim + femnao; int masc = mascsim+ mascnao; printf ("O número de pessoas que responderam sim e: %d.\n" "O número de pessoas que responderam não e: %d.\n" "A percentagem de pessoas do sexo feminino que responderam sim e: %f.\n" "A percentagem de pessoas do sexo masculino que responderam não e: %f.\n" , resps , respn , (femsim*100.0)/ (fem>0?fem:1) , (mascnao*100.0)/ (masc>0?masc:1)); putchar ('\n'); } c'11 - gcc'11.4 Uma belezinha assim, inicialmente, já me satisfaz!
  10. @arfneto Pedi, por favor, que cite a fonte de: Só isso: A Fonte? São essas as minhas dúvidas: Uma fonte daquela afirmação; Um programa conforme o enunciado com mesma pergunta e resposta; E que compila. Se puder responder acertadamente com o texto do enunciado, responda, senão tudo bem! *** Desde agora, obrigado Antecipadamente!
  11. @devair1010 Boa noite! Seu programa tem duas falhas: #1 ac:6:5: erro: variável não utilizada ‘x’ [-Werror=unused-variable] c'11 - gcc'11.4 #2 Pergunta, porém, não escreva a resposta! Acho que revisei essas duas falhas acima: #include <stdio.h> #include <string.h> int main () { int contador = 0; int i = 0; char frase[100] = {""}; puts("Digite uma frase :"); /// putzgrila fgets(frase , sizeof(frase) , stdin); frase[strlen(frase) - 1 ] = 0; while (frase[i] != 0 ) { contador++; i++; } printf ("%s%d%c","|---> ",contador,'\n'); putchar ('\n'); } Ainda há outra, ele responde (,) e (!) como letras.
  12. Quem disse que não é um inteiro? Cite a fonte, por favor! @arfneto Boa tarde! Não compilou, você falhou nos especificadores de formato ou argumento. c'11 - gcc11.4 a.c:31:28: erro: formato ‘%x’ espera argumento do tipo ‘unsigned int *’, mas argumento 3 tem tipo ‘int *’ [-Werror=format=] 31 | res = sscanf(valor, "%8x", (int*)&v_float); | ~~^ ~~~~~~~~~~~~~~ | | | | | int * | unsigned int * | %8x a.c:36:43: erro: formato ‘%x’ espera argumento do tipo ‘unsigned int *’, mas argumento 3 tem tipo ‘int *’ [-Werror=format=] 36 | res = sscanf(ansi, "%8x", (int*)str); | ~~^ ~~~~~~~~~ | | | | | int * | unsigned int * | %8x Seu programinha, supostamente, também não responde e não pergunta conforme o enunciado: além de não compilar. Estou insatisfeito
  13. ESCAPE Sabe, sim, é porque esse caractere está além de somente barra invertida, ele tem a função especial de anunciar a posição duma sequência 'escape'. Por exemplo, a nova linha (\n) é uma das que escapam. Aqui mais algumas: Experimente: Erro_ao_compilar_o_caractere_barra_invertida_no_printf.c /* Erro ao compilar o caractere \ no printf */ #include <stdio.h> int main () { printf ("Hello, World!\n"); /* ^s. escape para quebra de linha */ printf ("Hello, World!\ "); /* ^s. escape propositalmente errada */ } c'11 - gcc'11.4
  14. Bom dia! A Inversão Iteração sobre vetor Notei que, apesar de reconhecer que essas strings são terminadas com null ('\0') zero, usou múltiplas notações: de vetores, ponteiro para char e/ou arranjo, intercambialmente. Não sei se para exemplificar que é possível, ou se é pura confusão. Por último, fez pouco caso dos recursos utilizáveis na função do exercício (pressuponho) sua 'inversao'. Testei o programa dela, e editei sua expessão. Veja: Com- dar-printf- em-uma-frase.c /* Como dar "printf" em uma frase */ #include <stdio.h> #include <string.h> int inversao (char *s); int main (void) { char texto[100]; printf ("Escreva uma frase [max. 99 caracteres]: "); scanf(" %99[^\n]",texto); int len= inversao (texto); if (len) { printf ("%s%s%i%s",texto," => ",len," caractere"); if (len>1) putchar ('s'); } putchar ('\n'); } int inversao (char *s) { if (NULL==s) return 0; char *s0= s; while (*++s)/* nul block */; int len= s - s0; while (s0<s) { char c= *--s; *s= *s0; *s0= c; ++s0; } return len; } c'11 - gcc'11.4 c'17 - Pelles C'12.0 Algo assim, inicialmente, já me satisfaz. Se o momento é dos ponteiros, então NÃO PENSE D+, fique com os ponteiros.
  15. Boa noite! Acho que entendo você! TABUADA DA ADIÇÃO c será uma soma de todos os números naturais de a sobre b até 10 tal que a = 0 e b = 0. soma-de-dois-numeros-em-laco-for.c /* Soma de Dois Números em Laço For */ #include <stdio.h> int main () { /* A Tabuada da Adição */ for (int a= 0 ; a<10 ; ++a) { for (int b= 0 ; b<10 ; ++b) { int c= a + b; printf ("%i%s%i%s%i%c",a," + ",b," = ",c,'\n'); } putchar ('\n'); } putchar ('\n'); } c'11 - gcc'11.4
  16. Boa noite. Essa pergunta é/foi mais um exemplo, como muitos outros que li até agora, do porquê devo ativar todas as opções de alerta do compilador e aprender com isso. Veja (máximize a tela para visão completa) : Olha aí, ele diz o mesmo que os colaboradores do fórum: bom d+ Agora seu programinha compila. #include <stdio.h> #define ALUNO 2 struct identidade { char nome[32] , sobrenome[32]; }; struct aluno { float nota; struct identidade id; }; int main () { struct aluno classe[ALUNO]; for (int aluno= 0 ; aluno<ALUNO; ++aluno) { printf ("Digite o nome do Aluno\n"); scanf ("%s%s",classe[aluno].id.nome,classe[aluno].id.sobrenome); printf ("Digite a nota do Aluno\n"); scanf ("%f", &classe[aluno].nota); } for (int aluno= 0; aluno<ALUNO; ++aluno) { if (classe[aluno].nota >= 5.0f) printf ("O Aluno %s %s tem foi aprovado.",classe[aluno].id.nome, classe[aluno].id.sobrenome); } putchar ('\n'); }
  17. @Geraldo Cavalcante Boa Noite! Aquilo que descreveu como problema é a função scanf fazendo seu trabalho, espaços em branco também são caracteres, é necessário sinalizar para não quando não; faz assim, acrescenta um espaço no início da corda de formato. " %c" Seu programinha compilou, deste jeitinho aqui: #include <stdio.h> #define ALUNO 5 #define questão 10 int main () { char matrizNotas[ALUNO][questão], vetorGabarito[questão]; int resultado[ALUNO], i, j; for (i = 0; i < questão; i++) { printf("\n Informe a resposta correta da %dº questão: ",i); scanf(" %c", &vetorGabarito[i]); } for (i = 0; i < ALUNO; i++) for (j = 0; j < questão; j++) { printf(" Informe a resposta do %dº aluno para a questão %d: ",i,j); scanf(" %c", &matrizNotas[i][j]); } for (i = 0; i < ALUNO; i++) for (j = 0; j < questão; j++) { if (matrizNotas[i][j]==vetorGabarito[j]) resultado[i]++; } for (int aluno= 0 ; aluno<ALUNO ; ++aluno) printf ("%d ",resultado[aluno]); } ***
  18. Boa tarde. Concordaria com as duas interpretações, mas o termo retorna é normal em função. FUNÇÕES Com Matrizes e talvez alocação dinâmica Geralmente, lê-se escreva ou mostre até imprima e informe para saídas, porém aqui o enunciado usa retorne (retornar), mais o quê? A chamada da função. Deste jeitinho fofo aqui: Que lindo, não é? Maravilhoso! Fica fácil agora? O dado aluno é uma linha com duas notas, ou seja, duas notas é um aluno i de n alunos. Sim gafanhoto, médias parciais é uma dado composto, uma matriz de n médias calculadas no laço n. — Não é para você? Tudo bem, porque para mim é! Agora, expresse-se conforme o enunciado (a questão).
  19. Boa tarde Parece uma pergunta nível bebê; São primeiros passos, fica entre o básico dos operadores aritméticos, de comparação, lógicos e comandos IF-ELSE. Ou seja, DECISÕES Somente isso já ajudou. Agora, sabes a revisão para expressar uma tentativa honesta de solução, talvez resolução. A propósito, no seu primeiro programa de exercício assuma entradas ideias, ou seja, sem falhas. Não pense de mais, ponha de lado o tratamento de erros, mau uso, otimização, etc. Foco no enunciado do problema, fatio-o em 3 partes: entrada, processamento e saída; continue até não poder mais e daí... EXPRESSA-SE Por exemplo, isto abaixo é o enunciado indentado. Escreva um programa que, { Leia (duas notas obtidas por um aluno) Leia (o número de aulas ministradas) Leia (o número de aulas assistidas) Calcule (a média final deste aluno) Decida Se (ele foi aprovado ou reprovado) Considere que para um aluno ser aprovado ele deve obter média final igual ou maior a 6 e ter no mínimo 75% de frequência. Mostre () } Se alguém puder me ajudar, agradeço Muito comum nas linguagens, esse destaque produz um texto semelhante ao pseudocódigo quando aplicado nos enunciados e ajuda — um pouquinho — o entendimento. Sinceramente, não parece uma expressão para computador, um programa? Na C, associo LEIA e MOSTRE a respectivamente SCANF e PRINTF. Calcule e Decida Se são expressas como comandos no bloco da main, isso é uma exigência do nível do exercício, que ainda não expressa função, só usa as existentes no padrão (biblioteca padrão). Fim da revisão!
  20. Bom dia! MATRIZES O problema. Pede para comparar valores nas posições dos vetores (ou vetor); gabarito, a primeira linha, aluno, a segunda e as colunas como questionário. Os ponteiros do exercício como escalares/índice de colunas. Parece fácil? Tavez seja mesmo. Por exemplo, Expresse a leitura do valor como quantidade de quesitos no exame; ... a alocação de memória e atribua os ponteiros gabarito e aluno; ... a leitura com laço da linha para gabarito; ... laço da linha para aluno; ... a reposição dos ponteiros para os endereços iniciais; ... a alocação de acertos; ... o laço que compara os valores em gabariro e aluno, ... que teste os valores para iguais, se verdadeiro, adicione 1+ acerto; ... se acerto tem valor não nulo, ... e é maior que 1, escrava "acertos", ... senão escreva "acerto" Fim da expressão Pense deste modo: assuma que a linha (ou dado) é ideal, ou seja, não haverá linhas sem formato, por exemplo, não haverá letras em campo numérico, e não haverá erros de entrada, internos ou qualquer além do enunciado. NÃO PENSE D+ Em algumas perguntas do fórum, regularmente, sugere e/ou argumentam que 2 arrays em situações semelhantes são desnecessários, porque acessa um durante a extração do outro e assim economiza alguma coisa… BOBAGEM!!! O momento é delas! Por exemplo, com arranjos estáticos, c'11 - gcc'11.4 #include <stdio.h> typedef int questão; int main () { /* isto define a memória */ questão quesito[BUFSIZ]; /* isto solicita n */ size_t n= 0; scanf ("%zu",&n); /* isto define memória de ... */ questão *gabarito= quesito; questão *aluno= quesito + n; /* isto ler ... */ for (questão *ultima= gabarito + n ; gabarito<ultima ; ++gabarito) scanf (" %i",gabarito); for (questão *ultima= aluno + n ; aluno<ultima ; ++aluno) scanf (" %i",aluno); /* isto reposiciona agaba...e determina acerto's */ gabarito= quesito; aluno= quesito + n; questão acert= 0; for (questão *ultima= gabarito + n ; gabarito<ultima ; ++aluno , ++gabarito) if (*aluno==*gabarito) ++acert; /* isto exibe acerto's */ if (acert) { printf ("%d%s",acert," acerto"); if (acert>1) putchar ('s'); } putchar ('\n'); } — Uma expressão assim inicialmente já me satisfaz! A outros nem tanto, então, faça a sua você mesmo!
  21. Boa tarde! A calculadora com C. Falhou ao compilar com pelo menos dois alerta, sendo um crítico e outro relacionado. a.c: Na função ‘main’: a.c:13:9: aviso: formato ‘%i’ espera argumento do tipo ‘int *’, mas argumento 2 tem tipo ‘int’ [-Wformat=] 13 | scanf("%i",operação); | ~^ ~~~~~~~~ | | | | | int | int * a.c:13:1: aviso: ‘operacao’ é usado não inicializado [-Wuninitialized] 13 | scanf("%i",operação); | ^~~~~~~~~~~~~~~~~~~~ Linha 13 exige o endereço! No programa, não expressou um caso para operador inválido, sendo senso comum nesse exercício e outro que também não fez é o “Divisão por zero”, que acrescentei. Agora sua calculadora compila! c'11 - gcc11.4 #include <stdio.h> int main () { int operacao , n1 , n2 , resultado; printf ("Digite um numero: "); scanf ("%i",&n1); printf ("Digite outro numero: "); scanf ("%i",&n2); printf ("Digite [1] para somar\n"); printf ("Digite [2] para multiplicar\n"); printf ("Digite [3] para dividir\n"); printf ("Digite [4] para subtrair\n"); scanf ("%i",&operacao); switch (operacao) { case 1: resultado = n1 + n2; printf("%i",resultado); break; case 2: resultado = n1 * n2; printf ("%i",resultado); break; case 3: if (n2) { resultado = n1 / n2; printf ("%i",resultado); } else { printf ("%s%c","Divisão por zero!",'\n'); } break; case 4: resultado = n1 - n2; printf ("%i",resultado); break; default:/* * Operador Inválido */ printf ("%s%c","Operação inválida",'\n'); break; } }
  22. Boa tarde! A calculadora com C. No teste, noto um último 'probleminha', ela não consegue interagir de fato com o usuário, porque não instrui, não lista suas operações, e essa instrução é de bom senso nesta atividade. Custa um printf E não tem o "Divisão por zero!" e sua expressão lógica.
  23. Bom Dia! Apliquei as sugestões e/ou correções e acho que não esqueci nada. c'11 - gcc'11.4 #include <stdio.h> int main () { float term1= 0 , term2= 0; int r= 0; char operador= 0; do { /* isto solicita e escanea um 1x termo */ printf ("Digite um número: "); scanf ("%f",&term1); printf ("Digite outro número: "); scanf ("%f",&term2); /* ... um operador aritmético */ printf ("Qual operação você deseja fazer:\n[1]+\n[2]-\n[3]x\n[4]/\n?"); scanf (" %c",&operador); /* isto seleciona o 'circuito' dum dos cinco resultados */ switch ((int)operador) { case '1':/* soma */ term1+= term2; break; case '2':/* diferença */ term1-= term2; break; case '3':/* produto */ term1*= term2; break; case '4':/* quociente */ if (term2>0.0f) term1/= term2; else { printf ("%s%c","Divisão por zero.",'\n'); term1= 0; } break; default: /* não é uma operação */ printf ("%s","Operador inválido"); /* isto lava uma linha: um extração de texto */ while ((r= getchar ())!=EOF && r!='\n'); term1= 0; break; } /* escreve o resultado */ printf ("O resultado é %f",term1); printf ("%c%s",'\n',"Continuar [s para sim]? "); r= scanf (" %c",&operador); } while (EOF!=r && 's'==operador); putchar ('\n'); } obrigado!
  24. @Endmmans Boa Dia Testei seu programinha, ele tem uma falha comum nessa categoria de expressões, essa falha fica na escolha do operador antes de um escaneamento do segundo valor. A falha aqui consiste na extração dum caractere em branco por razão da combinação com o especificador 'c'. Esse caractere extraido é o quebra de linha (nova linha) e/ou entrar (enter). Observe o que ele fez: Qual o primeiro valor? 2022 Qual o segundo valor? 12 Qual a operação desejada? (+ para somar, - para subtrair)O resultado é 0.000000 Sabe-se que a função scanf absorve inicialmente os “em branco” quando há espaço na corda de formato (para mais detalhes, confirme/confira na documentação). Basta um espaço à frente do especificador, assim no início da formato " %c", que resolvemos esse problema, especificmente. c'11 - gcc'11.4 #include <stdio.h> int main () { float valor1 , valor2 , resultado; char sinal; printf ("Qual o primeiro valor? "); scanf ("%f", &valor1); printf ("Qual o segundo valor? "); scanf ("%f", &valor2); printf ("Qual a operação desejada? (+ para somar, - para subtrair)"); scanf (" %c", &sinal); if (sinal == '+') resultado = valor1 + valor2; else if (sinal == '-') resultado = valor1 - valor2; printf ("O resultado é %f", 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!