Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

posts postados por Ansi C

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

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

     

    ***

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

     

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

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

     

    ***

  8. @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
  9. 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
  10. @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
  11. @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!

     

     

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

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

     

  14. Olá!

     

    O Problema

    Tem-se um conjunto de dados contendo a altura e o sexo (masculino, feminino)

    de N pessoas. 

     

    Faça um algoritmo que calcule e escreva:

    a) A maior altura entre os homens;
    b) A média de altura das mulheres.

     

    Uma análise

    Supostamente, nada se conhece das informações, além de dado e formato de dado.

     

    Daí ...

    Em 05/06/2022 às 20:28, ningumx disse:
        printf("Digite o numero de homens: \n");
        scanf("%d",&hom);

    É pouco ou quase nada racional solicitar a quantidade de homens.

     

    Imagine que os dados são uma corda composta de altura e sexo. Sabidamente, as cordas terminam em 0 ('\0').

     

    ***Note os verbos: calcular e escrever

    Assuma que não é implícito carregar, ler ou solicitar, porque aqueles dados já existem no sistema.

     

    Suponha que numa corda

    #include <stdio.h>
    int main (void){
      char dados[]= {"160 feminino 175 masculino 150 masculino 165 feminino"};
      /* ... */
      return 0;
      }

     

     

  15. Olá

     

    O Problema

    1 vetor com 04 elementos;


    O programa necessita encontrar o maior e o menor elemento do vetor;

    Aplicar a função recursiva e imprimir os números entre o maior e menor número

    encontrado  (em ordem decrescente).

     

    ***A suposta tentativa de solução é distante do problema.

    Comecei pelo vetor; ele supostamente existe — não há indicação de carregar, solicitar ou ler os seus 4 elementos.

     

    #include <stdio.h>
    int main (void){
      int vetor [4]= {1,3,2,4};
      ...
      return 0;
      }

     

    Daí, assuma-se o primeiro elemento, sendo maior e menor, e continua num laço.

    #include <stdio.h>
    int main (void){
      int vetor [4]= {1,3,2,4} ,menor ,maior;
    
      maior= menor= vetor[0];
      for (int i= 1 ; i<4 ; ++i)
        if (vetor[i]>maior) maior= vetor[i];
            else
        if (vetor[i]<menor) menor= vetor[i];
    
      /* ... */
      return 0;
      }

     

    @Luan Nicoluzzi ***Confundiu histórias quando imprime ou solicita cada dado no laço.

     

    • Obrigado 1
  16. Olá!

     

    O Problema

    Faça um programa que leia um valor N e crie dinamicamente um vetor 
    de N elementos e informe a média, o maior e o menor dos valores fornecidos
    pelo usuário. Além disso, antes de finalizar o programa, deve-se liberar a área
    de memória alocada.

     

    Uma análise.

    Supostamente, N≥0, porque é quantia de elementos, tratando-se de leitura (Ler), o programa não segue e não finaliza enquanto não ler N.

     

    Em 21/04/2022 às 20:18, Vitor Nata Zanetta Santos disse:
    	printf("Digite a quantidade de elementos: ");
    	scanf("%i", &q);

     

    Tua expressão é mais para solicitar que leia (no caso do teclado), porque não se checa a N<0 para quantidade de elemento. Abaixo expresso, o que para mim é um ler N.

     

      while (q<0) {
        printf ("%c%s",'\r',"Entre com a quantidade de elementos: ");
    
        int c= getchar ();
        if (EOF==c) {
          perror ("Abortar quantidade de elementos");
          return 1;
          }
        if ('\n'==c) continue;
        ungetc (c,stdin);
        scanf ("%d",&q);
        while ('\n'!=(c= getchar ()) && EOF!=c);
        }

    O fluxo não cederá enquanto N<0; ele repetirá a leitura do decimal.

     

    Ate que... depois

    Em 21/04/2022 às 20:18, Vitor Nata Zanetta Santos disse:
    for(i=1;i<=q;i++){
    		printf("\nDigite o numero para o indice [%i]: ", i);
    		scanf("%i", &p[i]);
    		soma=soma+p[i];
    		if(p[i] < menor){
    			menor = p[i];
    		}else{
    			if(p[i] > maior){
    				maior = p[i];
    			}
    		}
    	}

    Nada disso, não é — supostamente — uma solicitação. Mas, sim, leituras!

     

    ***O fundamento é mesmo, não ceder até ler N dados, e incrementar somente depois de testar a leitura (Ler 1 de N).

     

     

     

    • Curtir 1
  17. Em 20/09/2021 às 09:58, Andreygabs disse:

    Preciso q o programa pare quando o usuário digitar um número negativo , porém o número negativo não pode sair como menor , qual o problema com o meu código?

    Precisa não, tu queres  (...) que, após digitalização dum número (especificamente decimal),

     

    cheque-o para negativos e ignore-o.

      /* Asuma que 0 é positivo, e neutro                                        */
      if (decimal<0) continue;
      if (decimal>maior) maior= decimal;
      if (decimal<menor) menor= decimal;
        

    ou

      /* Asuma que 0 é positivo, e neutro                                        */
      if (decimal>-1) {
        if (decimal>maior) maior= decimal;
        if (decimal<menor) menor= decimal;
        }

     

    Notei

    Em 20/09/2021 às 09:58, Andreygabs disse:

    int maior, menor, num;

      maior=num;

          menor=num;

     

    Qual é valor na `num` ?

    — Arbitrário, ele é logicamente errado.

     

    ***Resolve-se com maior e menor iguais ao primeiro valor da lista, numa primeira leitura que está fora do laço.

     

    Ou inicializar após checagens durante o laço.

      char flag= 1;
      do {
        printf ("\rNumero : ");
      
        scanf ("%i",&num);
    
        if (0>num) continue;   
        if (flag) maior= menor= num , flag= 0;    
    
        if (num>maior) maior= num;
        if (num<menor) menor= num;
        } 
      while (num)/* stop 0 */;

     

     

    Em 20/09/2021 às 09:58, Andreygabs disse:

    qual o problema com o meu código?

    Em 20/09/2021 às 09:58, Andreygabs disse:

     } while(num>=0);

    ***Um deles é insinuar o desejo de ignorar os números negativos enquanto o laço continua para os positivos.

     

     

    Enfim,

    algos assimn, para mim, já é bom!

    C'11 - gcc '11.4

    #include <stdio.h>
    int main (){
      int maior ,menor ,num= 1;
      char flag= 1;
      do {
        printf ("\rNumero : ");
    
        num= -1;
        scanf ("%i",&num);
    
        if (0>num) continue;
        if (flag) maior= menor= num , flag= 0;
        if (num>maior) maior= num;
        if (num<menor) menor= num;
        } 
      while (-1<num)/* stop ... ,-1 */;
      putchar ('\n');
      printf ("%s%d%c%d%c","O menor e o maior número é: ",menor,' ',maior,'\n');
      return 0;
      }

     

     

     

     

    — Okey ??

  18. @immoraesz Olá

     

    ***Se o valor atual `num` é maior, ou menor, então, atualizam-se suas posições e os valores maiores, ou menores, sequencialmente.

     

    Disso:

    Em 11/12/2021 às 16:24, immoraesz disse:
    int num, maior = 0, menor = 0, y = 0;
    

     

    Talvez seja isso:

    /* Admite-se inicialmente que 0 é uma não posição.      */
    int atual ,maior ,m= 0/*              posição do maior. */ 
              ,menor ,n= 0/*                      ...menor. */
              ,y/*                    sendo a posição atual */;
    
    ...
      
    /* Defina-se m,n                                         */
    if (!m || atual>maior) maior= atual , m= y;
    if (!n || atual<menor) menor= atual , n= y;

     

    Suponho que assim definira m, n acertadamente.

  19. Olá!

     

    O Problema

    Escreva um programa que leia 10 números inteiros e os armazene em um vetor. Imprima o vetor, o maior elemento (número e posição) e o menor elemento (número e posição).

     

     

    Uma analise

    ***Observe o verbo!

     

    Ler

    10 números como inteiro (supostamente decimal)

    Em 04/04/2022 às 17:36, BONGO boy disse:

    printf("\nDigite o valor do elemento da posicao $d: ", i+1); 
    scanf("%d", &vet[i]);

    Existem, pelo menos, três notações de inteiros: hexadecimal, decimal e octal; aqui está especificamente o decimal (“%d”) …

     

    Notei:

    Errou ao especificar o formato na `printf`, porém usou um acertadamente na `scanf`

     

     

    De volta à leitura de números inteiros, assuma decimais sendo 1/3 dos padrões de leitura de  inteiros, daí, pressuponho que o especificador adequado ao problema de ler (…) inteiros é “%i”, porque esse argumentará, simultaneamente, aqueles 3 padrões.

     

    C'11 - gcc '11.4

      int numeros[10];/* sendo o conjunto de números lidos                       */
      /* Leitura de 10 números inteiros (de base: octal, decimal ou hexadecimal )*/
      for (unsigned i= 0 ; i<10 ; ++i){
        int elem= i+ 1;
        printf ("%c%s%d%s",'\r',"Digite o valor do elemento ",elem,": ");
    
        elem= getchar ();
        if (EOF==elem) break;
        if ('\n'==elem) {
          --i;
          continue;
         } 
        ungetc (elem,stdin);
    
        /* Ler o inteiro; se falha, então, descarta 1 elemento                  */
        if (1!=scanf ("%i",&elem)) --i;
            /*              ^~~~ Isto é, opcionalmente, hexadecimal, decimal ou octal */
            else numeros[i]= elem;
        while ('\n'!=(elem= getchar()) && elem!=EOF);
        }

     

     

     

    Armazenar

    Na porção da memória que é sabidamente um vetor.

     

    Encontrar (esse é implicito)

    A partir daquele vetor, o seu maior e menor elemento (valores e posiçções)

     

    Imprimir

    Os resultados, supostamente no simulador de terminal.

     

     

     

    • Curtir 1
  20. Em 01/06/2009 às 15:44, Rudydrier disse:

    [...] alguém poderia me dizer o que faço para que um numero negativo não seja informado [...]

    Essa, talvez, não seja a questão!

     

    Supostamente, há captura duma lista de números, depois, para cada ocorrência de número negativo, é necessário entrar com positivo.

     

    A propósito, a fonte da lista não é o teclado + usuário, não tem sentido ser deste jeito. Essa lista tem outras fontes: neste caso, acho melhor o arquivo texto (TXT).

     

    *** O segundo prompt  acontece depois da captura da lista.

     

    Em 01/06/2009 às 15:44, Rudydrier disse:
     printf("digite os valores:");
        scanf("%d",&nro);

    Nada disso! 

     

    1. Lista (o punhado de número no arquivo.txt);

    2. Leituras de positivos (que corrigem os casos negativos);

    3. Aquele relatório.

     

    Para mim, algo assim é bom: C'11 - gcc '11.4

    #include <stdio.h>
    int main (int argc, char *argv[]) {
      FILE *f= NULL;
      if (argc<2 || NULL==(f= fopen (argv[1],"r"))) {
        perror ("Falha! Não encontrou o arquivo");
        return 0;
        }
      int numero= 0 ,maior= 0 ,menor= 0 ,soma= 0;
      while (fscanf (f,"%d",&numero)==1) {
        if (0==numero) break;
        while (0>=numero) {
          printf ("%c%s%d%s",'\r',"Erro número não positivo (",numero,"): ");
         
          int c= getchar ();
          if (EOF==c) break;
          if ('\n'==c) continue;
       
          ungetc (c,stdin);
         
          if (scanf ("%d",&numero)!=1) getchar ();
          }
        if (soma) { 
          soma+= numero;
          if (numero>maior) maior= numero;
              else
          if (numero<menor) menor= numero;
          } else {
          soma= maior= menor= numero;  
          }
        }
      putchar ('\n');
      printf ("%s%d%c%d%c","O maior e o menor número é: ",maior,' ',menor,'\n');
      printf ("%s%d%c","A soma dos número é: ",soma,'\n');
      return 0;
      }

     

     

     

  21. Olá, observem.

     

    O Problema

    Algoritmo contendo a altura e o sexo (masculino, feminino) que calcule e escreva.

     

    A maior e a menor altura do grupo é:
    A média de altura das mulheres  ... é: 

    O número de homens                  ... é:

     

    Uma Analise

    Há alguma indicação de interação (dado-a-dado) com o usuário?

    — Acho que não, e nem há indicação do tamanho do grupo.

     

    A condição de parada do algoritmo, supostamente, não é um limite quantitativo, mas sim, talvez, um sinal (flag): nota-se que a informação é composta dum par de dados (altura e sexo: sendo “masculino” ou “feminino”) e o grupo, aparentemente, é uma corda de informação. E sabe-se que as cordas acabam em 0 ('\0').

     

     

    ***Para min, deve-se uma revisão de prompt.

     

     

     

     

    • Obrigado 1
  22. Em 24/04/2024 às 11:22, jaireugenio disse:

    as únicas bibliotecas q sei são stdio e math, [...]

    Isso acima, insinua-me um estudo a pagar na solução do exercício, se tem no apontamento, então, é requisito.

     

    Dica

    Apresente-o uma solução que vem com a função `sqrt

    • Curtir 1
  23. def executar_selection_sort(lista):
      lista_ordenada = []
      while lista:
        minimo = min(lista)
        lista_ordenada.append(minimo)
        lista.remove(minimo)
      return lista_ordenada
      
    lista=[ 10,9,5,8,11,-1,3 ]
    #Isto Declara a lista
    
    lista=executar_selection_sort(lista)
    # I. Isto atribui o retorno
    
    print(lista) 
    #II. Isto produz a lista com resultados do retorno
    1 hora atrás, PSan disse:

    Não obtenho um resultado!

    RESULTADO:

    Porque faltam declarações:

     I. atribuir o retorno 

    II. chamar uma função que produza, por exemplo, ´print´ que produz resultados no simulador de terminal.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!