Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.259
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Eu sei, às vezes chama os ponteiros de referência e os endereços (valores neles) de passagem. A propósito, isso não é novidade, é a primeira vez que tenho que explicar. Até os iniciantes conhecem esses termos. Claro que é. Funções, ponteiros, gerador de números pseudoaleatórios, tudo de uma vez para uma discussão de iniciantes das matrizes; Ajuda pouco ou quase nada no cerne da questão, e repito são as matrizes e não funções, ponteiros etc, Mas essa é somente a minha opinião. Se parece pedante, é porque te falta leitura. É fácil de resolver, leia mais que termos e palavras deixam de ser pedantes. ****
  2. Pseudoaleatório. Sim, porém, para aqueles que continuam compreendendo matrizes, não ajudará em nada, pelo contrário confundirá ainda mais com todas essas passagens por referência, ponteiros e nomes curtos e funções complicantes. E demais para um exercício iniciante das matrizes, mas se a intenção foi demonstrou conhecimento, então… boa resposta parabéns
  3. @Hello_World Boa Noite! Compila! c'11 - gcc'11.4 #include <stdlib.h> #include <math.h> #include <stdio.h> int main (void) { int n= 2; printf ("Entre com um decimal como quantidade de alunos? "); for ( ; ; ) { int r= getchar (); if (r=='\n' || '-'==r) continue; ungetc (r,stdin); r= scanf ("%d",&n); if (r==EOF) { perror ("Falha na leitura da quantidade"); return 1; } if (r==1) break; while (EOF!=(r= getchar ()) && '\n'!=r); } printf ("%s%d%s%c","... registar ",n," aluno(s)",'\n'); int matricula[n]; double vetor2[n] ,vetor3[n] ,vetor4[n] ,mediaDireta[n] ,vetorRecu[n]; double soma= 0; for (int i= 0 ; i<n ; i++) { printf("Qual e a matricula do aluno? \n"); scanf("%d", &matricula[i]); printf("\nQual foi a nota da primeira prova? \n"); scanf("%lf", &vetor2[i]); printf("\nQual foi a nota da segunda prova? \n"); scanf("%lf", &vetor3[i]); printf("\nQual foi a nota da terceira prova? \n"); scanf("%lf", &vetor4[i]); mediaDireta[i]= (4* vetor2[i]+ 3* vetor3[i]+ 3* vetor4[i])/ 10; if (mediaDireta[i] < 7 && mediaDireta[i] >= 4){ printf("Qual a nota da Prova Final do aluno %d? \n\n", matricula[i]); scanf("%lf", &vetorRecu[i]); mediaDireta[i]= (mediaDireta[i]+ vetorRecu[i])/ 2; } soma= mediaDireta[i]+ soma; } for (int i= 0 ; i<n ; i++) { if (mediaDireta[i]>=6) printf("\n%d Aprovado %f \n\n", matricula[i], mediaDireta[i]); else printf("\n%d Reprovado %f \n", matricula[i], mediaDireta[i]); } double maior= mediaDireta[0]; for (int i= 0 ;i <n; i++ ) if (mediaDireta[i]>maior) maior = mediaDireta[i]; double mediaTurma= soma/ n; printf("A media da turma e %.2f \n",mediaTurma); printf("A maior nota foi %.2f \n",maior); return 0; }
  4. E esta expressão: #include <stdio.h> int main (void) { int d= 100 ,q= 0; int n= 0; scanf ("%d",&n); long sum= 0; while (n) { q= n/ d; n-= d* q; sum+= q; d/= 10; } printf ("%ld%c",sum,'\n'); return 0; }
  5. @907467 Boa Tarde O Problema ... le as idades de 10 alunos, eu preciso ter funções nesse código e não estou conseguindo fazer (...). Uma sugestãp Funções e programas são semelhantes e existem para produzir uma resposta a uma pergunta em 3 etapas (pelo menos): entrada, processamento e saída. Aqui está suas 3 funcões >Ler >Calcular >Mostrar Por exemplo, C'11 - gcc11.4 #include <stdio.h> typedef int idade; /* solicita e captura n idade's */ int ler (idade alunos[], size_t n); int main (void) { idade alunos[10]; size_t n= sizeof alunos/ sizeof(alunos[0]); int r= ler (alunos,n); printf ("%s%d%s%c","Leu: ",r," aluno(s)",'\n'); return 0; } int ler (idade alunos[], size_t n) { int answer= 0; printf ("%s","Informe "); int w= printf ("%zu",n); printf (" decimais como idades dos alunos\n"); for (size_t i= 0 ; i<n ; ++i) { alunos[i]= -1; printf ("idade do aluno %*zu: ",w,i+ 1); int r= scanf ("%d",&alunos[i]); if (r==EOF) { perror ("Falhou na informação de alunos"); return 0; } if (r==1) ++answer; while (EOF!=(r= getchar ()) && '\n'!=r); } return answer; }
  6. Boa Tarde! O Problema Crie um programa onde o usuário digita três valores e imprima na tela o maior valor devendo para isso, criar uma função Maior do tipo int que retorna o maior dos três valores. Criar uma função maior, e não somente uma, função do tipo int (…) A ideia do autor do tópico funciona, porém, suponho que o exercício não seja somente sobre fluxos, é muito mais sobre funções. Logo, sem pensar muito (ou fetichismo), defina uma função que resolva para 2 inteiros e reutilize para 3. Por exemplo, #include <stdio.h> int Maior (int a1, int a2, int a3); int main (void) { int v1 , v2 , v3; int r; printf ("Entre 3 inteiros: "); _1: if (EOF==(r= scanf ("%i",&v1))) return 1; if (1!=r) { getchar (); goto _1; } _2: if (EOF==(r= scanf ("%i",&v2))) return 1; if (1!=r) { getchar (); goto _2; } _3: if (EOF==(r= scanf ("%i",&v3))) return 1; if (1!=r) { getchar (); goto _3; } int m= Maior (v1,v2,v3); printf ("%s%d%c","Maior é: ",m,'\n'); return 0; } int maior (int a1, int a2) { if (a1>a2) return a1; return a2; } int Maior (int a1, int a2, int a3) { return maior (maior (a1,a2),a3); } ***
  7. @Polaris Boa Tarde O que é subrotina? — chatbot Agora que entendemos uma definição de subrotina (função ou método). Iteração sobre vetores. Operações com expressões lógicas. E modulação de programa: esses são alguns dos temas do exercício. Estudou isso, ou algo semelhante?
  8. Isso é complicado para não dizer ilógico, porque para distinguir os números é necesário ler, porém se ler números iguais, então não satisfará o algoritmo que exige leitura de números diferentes. Como definir uma repetição sem ler? — Garanta não haver valores iguais entre 4 valores diferentes.
  9. Somente para aqueles que não são capazes e que dizem coisas como essa frase acima. A solução é condizente com enunciado. Aquela matriz por definição é aleatório! Ainda é impossível saber ou identificar os critérios e processos lógicos/químicos/físicos que acontecem no meu cérebro enquanto escolhia os valores para defini-la (a matriz). Por razão disso, aleatório. E não confunde aleatório com pseudoaleatório. Sei de tudo isso! São temas lidos nos tópicos de apontamentos de matrizes e demonstram-se nos exercícios conforme o exemplo que proponho (de boa fé) a essa discussão. ***
  10. @CarlosMagnos Boa Dia! Veja. Em tese, a linguagem é somente uma ferramenta (de expressão). Logo, defina uma função que permute. Por exempo: Seja a,b duas variáveis Se a<b Então troque seus valores Seja c um novo valor Se a<c Então troque Se b<c Então troque Seja c um novo valor Se a<c Então troque Se b<c Então troque *** Por exemplo C++ #include <iostream> int main() { //1 2 float a; std::cin>>a; float b; std::cin>>b; if (a<b) { float v= a; a= b; b= v; } // 3 float c; std::cin>>c; if (a<c) { float v= a; a= c; c= v; } if (b<c) { b= c; } // 4 std::cin>>c; if (a<c) { float v= a; a= c; c= v; } if (b<c) { b= c; } std::cout<<a<<'e'<<b<<std::endl; return 0; }
  11. @arfneto Defina aleatório, por favor? Observe com materialidade, sem fetiches: notará que é um exercício das matrizes. E que suas palavras não fazem sentido. E da? Explique-me, o que significa isso? "No fundo"? O que isso diz? Explique-se por favor!
  12. @itstalisson Boa Terde! Nessa sua tentativa, a matriz perdeu sentido, acredito em guardar os índices da matriz e não copiar seus valores. Por exemplo C'11 - gcc'11.4 #include <stdio.h> /* Include the header file for input and output */ int main (void) { size_t a[2]= {0}/* sendo o suposto maior elemento dum unitário */; int matriz [] [4]= { {1,2,3,4} , {5,-6,7,8} , {9,0,-1,2} , {6,5,7,8}}; for (size_t ai= 0 ; ai<sizeof matriz/ sizeof(matriz[0]) ; ++ai) { for (size_t aj= 0 ; aj<sizeof matriz[0]/ sizeof(matriz[0][0]) ; ++aj) { if (matriz[ai][aj]>matriz[a[0]][a[1]]) a[0]= ai , a[1]= aj; }} size_t aij= 0; for (size_t aj= 0 ; aj<sizeof matriz[0]/ sizeof(matriz[0][0]) ; ++aj) { if (matriz[a[0]][aj]<matriz[a[0]][aij]) aij= aj; } putchar ('\n'); printf ("%s%d%c","O maior elemento da matriz é: ",matriz[a[0]][a[1]],'\n'); printf ("%s%d%c","O menor elemento na linha do maior elemento é: " , matriz[a[0]][aij], '\n'); /* ... */ return 0; } AQUI são os índices que auxiliam a produção. Para mim, isso confere com enunciado — se conhece algum refinamento, então aplique-o.
  13. Caso não fique satisfeito com o uso da função e biblioteca strings, tudo bem. Compare após casting: já que nos sistemas atuais, 4 bytes são a estrutura de um “int”! Mas, suponho que esse não seja o exercício da questão. O exercício é de strings.
  14. @Eduardo_Braz Bom dia! Resolveu? Spostamente, é um exercício de expressões lógicas–em laço sobre strings; mas subverteste a operações aritméticas sobre inteiro (“int”). O Problema João tem um irmão mais novo, José, que começou a ir à escola e já está tendo problemas com números. Para ajudá-lo a pegar o jeito com a escala numérica, sua professora escreve dois números de três dígitos e pede a José para comparar esses números. Mas em vez de interpretá-los com o dígito mais significativo à esquerda, ele deve interpretá-lo com o dígito mais significativo à direita. Ele tem que dizer à professora qual o maior dos dois números. Escreva um programa que irá verificar as respostas de José. Uma análise No sistema os números são strings. O fato tem 2 termos e cada termo 3 elementos, que sugere uma comparação de conjuntos. Sem pensar muito: Solicitar um decimal, depois capturarr strings com duas iterações de índice decrescente, em seguida, chamar a função strcmp e elas nos argumentos que definirão a valorosa e imprimir. O decimal é o quantia de testes; cada teste é duas capturas, uma compração e uma impressão, ou seja, é um laço. char numeros[] [4]= {{0} , {0}};/* Os números da professora */ Capturar: um exemplo de laço size_t i= 3UL; while (i) { int r= getchar (); if (EOF==r) break; if (isgraph (r)) numeros[0][--i]= (char) r; } Talvez isso inspira o suficiente para uma solução. ***
  15. Isso mesmo, igualmente, notei essa pouca precisão dos alertas. Ficam no entorno do problema. Exige adaptação, exige análise do alerta e dos elementos entorno do alerta: por exemplo, tem-se a expressão lógica: Os operadores: ( ) > Os operandos: Nota MaiorNota Os comandos: MaiorNota <- nota Os operadores dos comandos: <- Os operandos dos comandos: nota MaiorNota [ ! ] Observe que o nome de um dos operandos é **`nota`, porém em ***VAR o N é maiúsculo. ***VAR **Comandos de Se ... Então — Atenção!
  16. @Samuel Fortes Brasil Boa Terde! Aparentemente, esqueceu a declaração da variável `MaiorNota`, pois exatamente esse o problema. Corrija: declare sua variável faltosa. Correção: Var turma:Inteiro N1,N2,N3,N4,N5:Inteiro Nota,MaiorNota:Real Produz: Início da execução ----------------------------------- Quantos alunos a turma possui: 1 ----------------------------------- Qual é o nome do(a)Aluno(a): 0 Nota: 9.0000000000 ----------------------------------- Fim da execução. Captura:
  17. @rafaznj Boar Terde! Essa dificuldade está em definir o valor que desencadeia o fluxo de comparações e produz o maior e o menor valor\número. Essa talvez seja a questão. — Como definir inicialmente o referêncial de maior e o menor? Alguns suponha não haver limites, então, o primeiro e o único valor de uma lista é simultaneamente o maior e o menor dessa lista de um valor. Esse é caso que inspira a solução acima (#3) e por exemplo: C++ #include <iostream> #include <locale.h> using namespace std; int main () { int lista= 0, n, cont, menor, maior; cout << "Digite o tamanho da lista: "; cin >> lista; for (int i= 1; i<=lista ; i ++) { int n; cout << "Digite o numero " << i << ": "; cin >> n; switch (i) { case 1: maior= menor= n; break; default: if (n<menor) menor= n; if (n>maior) maior= n; break; }} if (lista) cout << "menor: " << menor << endl , cout << "maior: " << maior << endl; return 0; }
  18. Por exemplo: C'11 - gcc'11.4 #include <stdio.h> int main (void){ int i ,j ,m[4][4]= {0} ,menor[2]= {0} ,maior[2]= {0}; printf ("%s","Informe até 16 valores como inteiro: "); for (i= 0 ; i<4 ; i++) { for(j= 0 ; j<4 ; j++) { int c= scanf ("%i",&m[i][j]); if (c==EOF || c!=0x1) i= 4 , j= 4; else { if (m[i][j]<m[menor[0]][menor[1]]) menor[0]= i , menor[1]= j; if (m[i][j]>m[maior[0]][maior[1]]) maior[0]= i , maior[1]= j; }}} printf ("%s%d%c%c","O menor valor é: {",m[menor[0]][menor[1]],'}','\n'); printf ("%s%d%c%c","O maior valor é: {",m[maior[0]][maior[1]],'}','\n'); return 0; } Se há algum refinamento de código, então, aplique-o, porque para mim esse código confere com enuciados.
  19. Porém, fez um que insinua produzir e talvez ler uma matriz enquanto determina o maior e o menor valor entre as leituras. Assim, faz com que o serviço da matriz bi fique abaixo do enunciado, quase inútil. Interprete, ipo — Entrada, processamento e Saída. Verá que o processo excluiu a matriz. Corrija: Invés do valor, memorize o índice de maior... ***
  20. @ningumx Bom dia! Notei que maioria das falhas são de especificadores, tipos de dados e atribuir entre tipos diferentes. C'11 - gcc'11.4 #include <stdio.h> int main() { float v[10]; int i; for (i= 0 ; i<10 ; i++) { printf ("%c%s%d%s",'\r',"Digite o ",i+ 1,"° valor: "); int c= scanf ("%f",&v[i]); if (c== EOF) { perror ("Falha na leitura"); return 1; } if (c!=1) --i; while ('\n'!=(c= getchar ()) && EOF!=c); } int maior= 0; for (i= 0 ; i<10 ; i++) { if (v[i]>v[maior]) maior= i; } float soma= 0; for (i= 0 ; i<10 ; i++) { soma= soma+ v[i]; } float media= soma/ 10; printf ("O maior valor eh: %.2f.\n",v[maior]); printf ("A media dos valores eh: %.2f.\n",media); printf ("Valores maiores que a media: \n"); for (i= 0 ; i<10 ; i++) { if (v[i]>media) printf ("%.2f\n",v[i]); } return 0; } Sugestão: dê-se a oportunidade de aprender mais com o compilador, ative todos os alertas (todos, inclusive os pedantes). Dica: utilize gcc'11 e chame-o com estas opções
  21. Boa Noite! Notei que suas mensagens são iguais "Todos Elementos Com Indice Maior Que O Maior Numero" Sigam a sugestão Por exemplo C'11 gcc'11.4 #include <stdio.h> #define TAM 10 int main (void){ int valor[TAM] , i/* sendo contadora de laços */, maior ,posMaior; for (i= 0; i<TAM; ++i) { printf("Informe o valor %i ",i+ 1); int c= scanf("%i",&valor[i]); if (c==EOF) return 1; } maior= valor[0]; posMaior= 0; for (i= 0 ; i<TAM ; i++) if (valor[i]>maior) maior= valor[posMaior= i]; putchar ('\n'); printf ("%s%d%s%d%c","Valor máximo = ",maior,", com índice = ",posMaior,'\n'); if (posMaior>0) { printf ("%s%d%s","Elementos com índices menor que ",posMaior," são: "); for (i= 0 ; i<posMaior ; ++i) { printf ("%d",valor[i]); printf ("%s",posMaior==i+ 1? "." : ", "); } putchar ('\n'); } if (posMaior<TAM- 1) { printf ("%s%d%s","Elementos com índices maior que ",posMaior," são: "); for (i= posMaior+ 1; i<10 ; ++i) { printf ("%d",valor[i]); printf ("%s",10==i+ 1? "." : ", "); } } putchar ('\n'); return 0; } ***
  22. @Samuel Fortes Brasil Boa Tarde! Aplique a seguintes correções Apague os parenteses que isolam as sentenças. Identifique as declarações do bloco com recuou. Deste jeito: Enquanto valorInicial < valorFinal faca Escreval(valorInicial) valorInicial <- valorInicial + contPersonalizada FimEnquanto ... Enquanto valorFinal >= valorInicial faca Escreval(valorFinal) valorFinal <- valorFinal - contPersonalizada FimEnquanto Produz Início da execução ----------------------------- CONTADOR INTELIGENTE ----------------------------- Qual o valor inicial da contagem? 10 Até quando o contador deverá contar? 15 ----------------------------- Pretende fazer uma contagem(normal ou regressiva) de quanto em quantos números? Por exemplo: 1 + 2 ao invés de 1 + 1. Resposta.: 1 10 11 12 13 14 Fim da execução. visualg 3.0.7.0
  23. @Dafne Guimarães Olá! O Problema Escreva uma função (bem como um programa que exercite tal função) que receba 3 números informados pelo usuário no programa principal. A função deverá retornar o maior e o menor número. Posteriormente, o programa principal deverá imprimir essas informações. Essa função não possui o comando printf. Chamam de passagem por referência, nisso maior e menor são ponteiros para maior e menor no escopo da função main. Por exemplo C'11 -gcc'11.4 #include <stdio.h> int proceed (float array[3], float *max, float *min); int main (void){ float array[3]; for (int count= 3 ; count ; --count) { printf ("%c%s%d%s",'\r',"entre com ",count," números: "); int c= scanf ("%f",&array[count- 1U]); if (c==EOF) { perror ("Falha na leitura"); return 1; } if (c==1) continue; getchar (); ++count; } float maior ,menor; int c= proceed (array,&maior,&menor); if (!c) printf ("%c%s%f%c%f%c",'\r',"O maior e menor número é: ",maior,' ',menor,'\n'); return 0; } int proceed (float A[3], float *a1, float *a2){ if (NULL==A || NULL==a1 || NULL==a2) return 1; *a1= *a2= *A; for (float const *LIMIT= A+ 3U ; A<LIMIT ; ++A) if (*A>*a1) *a1= *A; else if (*A<*a2) *a2= *A; return 0; } O processo (função `proceed`) tem 3 argumentos, sendo ela do tipo (float *, float *, float *) Às vezes, as ponteiros são ditas referências!
  24. Olá @Ray12 O Problema Faça um programa que receba do usuário um vetor com 10 posições, em seguida deverá ser impresso o maior e o menor elemento do vetor. O dado é um vetor (com 10 posições) *Nada disso! É "Entre com 10 números ..."; e não até 10 números. O programa não cede enquanto não obter/receber/ler o vetor, e somente o vetor. printf ("%s","Entre com 10 números decimais (separe-os com a Enter ou a Espaço): "); Por exemplo. #include <stdio.h> int main (void){ int C[10], i= 0; printf ("%s","Entre com 10 números (separe-os com a Enter ou a Espaço): "); for ( ; i<10; i++) { int c= getchar (); if (EOF==c) { perror ("Falha na leitura"); return 1; } if ('\n'==c) printf ("%2d%c",i+ 1,'>'); else ungetc (c,stdin); c= scanf("%d",&C[i]); if (1==c) continue; while ('\n'!=(c= getchar ()) && EOF!=c); ungetc ('\n',stdin); --i; } /* ... */ return 0; } Suponha que o dado é vetor, somente ele satisfaz.
  25. Não! — Expressamos a checagem e adaptamos um laço de repetição. Assuma que o primeiro elemento é o menor e continue no laço. Por exemplo C'11 - gcc'11.4 #include <stdio.h> int main (void){ float numeros[]= {1,2,3,10,-1200,0.12}; float menor= numeros[0]; for (size_t i= 1 ; i<sizeof numeros/ sizeof(*numeros) ; ++i) if (numeros[i]<menor) menor= numeros[i]; printf ("%s%.1f%c","O menor número é: ",menor,'\n'); return 0; }

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!