Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.259
  • Cadastrado em

  • Última visita

posts postados por Ansi C

  1. 22 minutos atrás, arfneto disse:

    C não tem passagem por referência. Apenas por valor. Todo array em C é um ponteiro para uma área de memória de um certo tamanho. Na literatura procure por "array to pointer decay".

    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.

     

     

    22 minutos atrás, arfneto disse:

    Deve mesmo ser confuso chamar a matriz de M e o minimo de minimo e o maximo de maximo, como está aí acima...

    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.

     

    22 minutos atrás, arfneto disse:

    Obrigado por clarificar esse conceito. Pode parecer um tanto pedante você insistir nisso, mas assim é: rand() gera números pseudo-aleatórios!!! 

    Se parece pedante, é porque te falta leitura.

    É fácil de resolver, leia mais que termos e palavras deixam de ser pedantes.

     

     

     ****

    • Amei 1
  2. 3 horas atrás, arfneto disse:
    int define(int M[][DIM_N], int minimo, int maximo)
    {
        int* p = (int*)M;
        if (minimo > maximo) maximo = minimo + 1000;
        for (size_t i = 0; i < DIM_M * DIM_N; i += 1)
            *(p + i) = minimo + rand() % (maximo - minimo + 1);
        return 0;
    }

     

    Pseudoaleatório.

    image.png.83d332cf5f4f9fd26c408ab0798535b8.png

     

    🙂

     

    3 horas atrás, arfneto disse:

    Passados quase 3 anos acho que uma resposta mais completa pode ajudar a outros

     

    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. @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;
      } 

     

  5. 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);
      }
        

     

    ***

  6. @Polaris

     

    Boa Tarde

     

    O que é subrotina?

    Citação

    Uma subrotina em programação de computador é uma parte menor de um módulo de código maior que tem suas próprias operações internas projetadas para servir ao programa geral. Ela também é chamada de função ou método, pois retorna um resultado de código específico que é usado pelo programa. Espero que isso esclareça o conceito de subrotina! 😊

    — chatbot

     

    Agora que entendemos uma definição de subrotina (função ou método).

     

    Em 04/02/2021 às 12:40, Polaris disse:

    identificar o maior valor de um vetor de 10 valores

    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?

     

  7. Em 29/03/2020 às 17:20, CarlosMagnos disse:

     faça um algoritmo que leia quatro números reais diferentes

    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.

     

  8. 30 minutos atrás, arfneto disse:

    Esse não é o forum para definir aleatório

    Somente para aqueles que não são capazes e que dizem coisas como essa frase acima.

     

    30 minutos atrás, arfneto disse:

    Eu não chamaria de refinamento uma "aplicação" para fazer sua solução condizente  com o enunciado. Seria uma correção.

    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.

     

     

    30 minutos atrás, arfneto disse:

    Memória é algo linear. Em C há apenas arrays, e arrays de arrays e assim por diante. Uma "mariz 4x4" é só uma região contínua na memória. Pelo enunciado só é preciso definir a linha em que está o maior elemento, para depois identificar o menor valor nessa linha. Não precisa de índices para isso.

    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.

     

    ***

    • Amei 1
  9. @CarlosMagnos

     

    Boa Dia!

     

    Veja.

    Em 29/03/2020 às 17:20, CarlosMagnos disse:

    Lembrando que deve ser feito em C++

    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

    Em 29/03/2020 às 17:20, CarlosMagnos disse:

    A questão pede que eu faça um algoritmo que leia quatro números reais diferentes. Após isso, imprima o maior valor e o segundo maior valor.

     

    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;
    }

     

     

  10. @arfneto

     

    Defina aleatório, por favor?

     

    12 minutos atrás, arfneto disse:

    Salvar os índices numa matriz que é usada uma única vez não é provavelmente "auxiliar a produção". Apenas usa mais tempo e memória e letrinhas. No fundo sequer precisa dos índices

    Observe com materialidade, sem fetiches: notará que é um exercício das matrizes. E que suas palavras não fazem sentido.

     

    12 minutos atrás, arfneto disse:

    Não chamaria de refinamento

    E da?

     

    12 minutos atrás, arfneto disse:

    "auxiliar a produção"

    Explique-me, o que significa isso?

     

    12 minutos atrás, arfneto disse:

    No fundo sequer precisa dos índices.

    "No fundo"?

    O que isso diz? Explique-se por favor!

    • Amei 1
  11. @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.

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

     

    ***

  13. 46 minutos atrás, Samuel Fortes Brasil disse:

    Mas porque porque o visualg aponta o erro no SE ?

     

    Isso mesmo, igualmente, notei essa pouca precisão dos alertas.

    Ficam no entorno do problema.

     

    Capturar.PNG.0ab5664b717a53bda45c67822ba1f61c.PNG

     

    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

    1 hora atrás, Samuel Fortes Brasil disse:
    Var
       turma:Inteiro
       N1,N2,N3,N4,N5:Inteiro
       Nota:Real

     

    **Comandos de Se ... Então

    1 hora atrás, Samuel Fortes Brasil disse:
    MaiorNota <- nota

     

    — Atenção!

    • Curtir 1
  14. @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.

    42 minutos atrás, Samuel Fortes Brasil disse:
    Var
       turma:Inteiro
       N1,N2,N3,N4,N5:Inteiro
       Nota:Real

     

    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:

    Capturar.PNG.884c1ebc5e690bf3ff534094b96f8fb3.PNG

    • Obrigado 1
  15. @rafaznj

    Boar Terde!

     

    Em 22/07/2023 às 10:48, rafaznj disse:

    Fiz o code assim, mas queria saber outro jeito de mostrar o maior e menor número da lista.

     

    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;
        }

     

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

  17. Em 19/07/2017 às 18:43, Leo_92 disse:

    O código é para achar o maior e menor número de uma matriz

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

     

    ***

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

    Citação

    -std=c11 -Wall -Wextra -Wfatal-errors -pedantic -pedantic-errors -fanalyzer

     

    • Obrigado 1
  19. Boa Noite!

     

    Notei que suas mensagens são iguais

    "Todos Elementos Com Indice Maior Que O Maior Numero"

    Em 24/09/2018 às 05:12, devair1010 disse:
        printf("Todos Elementos Com Indice Menor Que O Maior Numero\n\n");
        for(i=0;i<posMaior;i++){
             printf("%d ",valor[i]);   
        }
        
        printf("\n\nTodos Elementos Com Indice Maior Que O Maior Numero\n\n");
        for(i=posMaior+1;i<10;i++){
             printf("%d ",valor[i]); 

     

    Sigam a sugestão

    Em 23/09/2018 às 18:49, P1909 disse:

    Valor máximo = 11, com índice = 3.

    Elementos com índice menor que 3 são: 2, 5, 9.

    Elementos com índice maior que 3 são: 3, 6, 8.

     

    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;
      }


    ***

    • Obrigado 1
  20. @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

    • Curtir 1
  21. @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!

     

     

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

    Em 20/10/2021 às 09:24, Ray12 disse:

    printf("escreva um numero\n");

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

  23. Em 16/08/2021 às 18:58, kailane disse:

    Como o vetor tem 20 valores eu vou ter que comparar todos um por um?

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!