-
Posts
3.284 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Ansi C postou
-
@AdrianoSiqueira ordenação funciona, e na prática em matrizes volumosas é ainda melhor. @julialilia Querendo, use duas funções de uma linha cada que resolve de outro jeito. int imaior (int a, int b){ return a > b ? a : b; } int imenor (int a, int b){ return a < b ? a : b; } Para determinar o maior e menor de 3 valores int, sem se preocupar com os detalhes. int primeiro = imaior (imaior (a, b), c); int terceito = imenor (imenor (a, b), c); E o segundo ? int segundo = (a + b + c) - (primeiro + terceiro); Aritmética "de maçãs".
-
C Limpar buffer após varias inserções
Ansi C respondeu ao tópico de felipe pereira forte em C/C#/C++
As alternativas de @Lucca Rodrigues são as práticas comuns e seguras. Independente do sistema operacional. adicionado 0 minutos depois scanf("%*[^\n]"); scanf("%*c"); -
Leia a linha inteira: Depois teste para caracteres somente decimais com exceção um (.) que separara as frações. Se tive OK converta para float usando a função sscanf (); Senão solicite nova entrada.
-
C Imprime as letras vogais de uma string se o tamanho dela for impar <string.h>
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Não simplifica; Crie funções novas e utilize as que já tem em <string.h> P. ex: /*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> #define MAX 10 #define CSIZ(x) #x #define SCN_S(x) "%" CSIZ(x) "s" int scanf_de (char *palavra){ size_t n = scanf (SCN_S(MAX), palavra); return n; }//---- FIM_SCANF_DE int printf_de (const char *palavra, const char *sequencia){ char *lra = strpbrk (palavra, sequencia); size_t cdor = 0; while (lra != NULL){ printf ("%c", *lra); lra = strpbrk (lra + 1, sequencia); ++ cdor; } return cdor; }//---- FIM_PRINTF_DE int main (void){ char palavra [MAX + 1] = {""}; printf ("Digite uma palavra com %d letras: ", MAX); scanf_de (palavra); size_t tamanho = strlen (palavra); if (tamanho % 2 == 1){ printf_de (palavra, "aeiouAEIOU"); } return 0; }//---- FIM_MAIN -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
@Yank Marsh Reinicie a discussão. Que parte do problema está mais difícil para você? -
Capacidade de uma reservatórios é medido em litros (ℓ) ou em metro cúbico (m3). Tem pegadinha.
-
C Bubble sort - porque não funciona se eu trocar i+1 por 2?
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Select sort é uma tipo de bubble que sobe até a posição mais significativa do vetor por etapa. Cada etapa é um posição significativa e precisa de um valor [máximo ou mínimo] a depender da ordenação. @Benjamin Breeg ilustrou as etapas. Porque pula 2 etapas [0, 1], assim quaisquer que forem seu valores são imerecidos, além disso quando i > j, inverte-se a ordenação porque i é pensado para ser menor que j. -
C ler uma frase de, no máximo, 80 caracteres, criptografá-la e exibir o resultado
Ansi C respondeu ao tópico de Dontcry Hs em C/C#/C++
Precisa mais que essa pergunta e o enunciado para iniciar sua discussão. * Só com isso corre o risco de uma resposta indesejada. Ideal mesmo é que aponte suas dificuldades objetivamente com intensões claras. Leia mais uma vez, tente identificar os elementos do problema e elabora outras perguntas. P. ex. "Faça um programa que preenche uma matriz 10x10" O que é uma matriz e como faço uma ? Como faço para acessar uma matriz ? São duas perguntas acerca da linguagem, acima de tudo porque suas especificações tem meios para essas coisas; e estão diretamente ligadas ao exercício sem ser uma resposta. -
C Dificuldade em encontrar o erro no meu programa, alguém poderia me ajudar?
Ansi C respondeu ao tópico de Aprendiz de TI em C/C#/C++
Lembrando que Visual C++ C não suporta vetores de comprimento variável - vla. -
A princípio, eficiência não é importante: A discussão é "Ordenando em ordem alfabética txt", ou seja, os procedimentos envolvidos (eficientes e ineficientes) precisa ordenar, não importando os custos. Uma discussão paralela com todos os resultados, entenda resultado por uma solução, mais envolvente; repleta de números, gráficos, projeções, custo de execução e analise temporal etc, é um caso além. A maioria não tem energia. Ótimo, um resultado satisfatório, inicialmente é tudo de bom.
-
Tem a mesma relação que um meio para o fim: Traduzir uma variável int para uma a string, é um procedimento que envolve decompor o valor na variável inteiro em suas unidades e Mais. O Mais, não importa muito porque o objetivo é o número de dígitos, mais precisamente, algarismos. Para evitar ambiguidade, símbolos \ dígitos é menos preciso que algarismos indo-arábico ou comumente só algarismos. O único sistema de numeração que se utiliza exclusivamente do algarismo é o decimal. Mais O Binário com 2 dígitos: 01 O Hexadecimal com 16 dígitos \ símbolos: Conj. Algarismos + ABCDF Ainda resta os algarismos romanos, quem lembra deles? Pois é, esses a sprintf desconhece totalmente.
-
Decomponha seu valor até 0: O número de algarismo é também o número máximo das divisões de resultado inteiro pela base. No procedimento, o quociente da divisão inteira é o dividendo da operação seguinte, o divisor é sempre a base 10. C11 size_t numero_de_algarimos_em (int numero){ size_t ctdor = 0; do { ++ ctdor; } while ((numero *= .1)); return ctdor; }
-
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
Não suporta matrizes de comprimento variável. Já que ele (o compilador) não se dá o trabalho de traduzir para a alocação dinâmica então faça tu mesmo! Contudo, dessa vez siga igual recomenda na mensagem. Visto que, o máximo valor nas dimensões é 10x10. char mat [10][10] = {0}; Tem o máximo disponível, necessário ou não. -
- a quantidade de pessoas com mais de 100 quilos , Depois de que lê o peso de alguém, o próximo passo é determina se é um valor maior que 100. Para todos os casos em que valor na peso é maior que 100, incrementa +1 no valor de uma outra variável e do tipo inteiro. if (peso > 100.0){ ++ mais_100; } Use uma estrutura de decisão IF. A expressão de decisão é: (peso > 100.0)
-
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
Basicamente, main é a função mediadora das funções. A medida que se lê o enunciado, mais e mais funções surgem. Por mais tentado que é escrever toda a solução em um bloco de código para deixá-lo completinho "socado" e apertado na função main, essa é uma prática não recomendada. Não importa a complexidade do programa, a função main precisa do mínimo de instruções possíveis. Na qualidade de Central e comandante do código, main é a principal. -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
Basicamente com um parâmetro a função retorna dois produtos, sendo que um deles na verdade é uma divisão. Se o valor no parâmetro é um caractere maiúsculo do alfabeto retorna seu valor numérico multiplicado pelo quociente de 1/10 senão multiplicado por 2. Uma alternativa a bloco de decisão IF-ELSE, chama-se operador ternário (?), ele é um operador que realiza tarefa semelhante ao bloco IF e com menos letras nas palavras chave. C11 #define CAIXA_ALTA(ch) (('A' - 1) < (ch) && (ch) < (1 + 'Z')) #define R_SIM 0.1 //> Quociente de 10 #define R_NAO 2.0 //> Produto de 2 float caso (char var){ return var * (CAIXA_ALTA(var)? R_SIM : R_NAO); } São 3x funções definidas para a chamada dentro da função main, por isso, coloque-as no topo onde podem ser vistas por todo o código, antes de main. Tudo em um novo código porque essas funções não são adaptadas para o código atualmente em discussão, mas sim para teste de lógica, execução e se tudo estiver bem uma alternativa de solução para o exercício. Na função main do novo código, faça testes das 3 funções. Eu realizei poucos testes e todos os resultados saíram como esperado de uma entrada ideal. Teste você também! Compartilhe os resultados inesperados. Estude o que cada uma das funções faz, e se estão de acordo, sem erros, monte uma solução que precisa como se fosse um quebra cabeça. Exemplo de um Teste: ler 6 caracteres (sem espaço) e guarda na matriz. int main (void){ char matriz [10][10] = {0}; printf ("Teste: Ler matriz! \n"); ler (2, 3, matriz); return 0; } -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
void * ocorrencias (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]); É quase uma regra que toda função que envolve percorrer a matriz pelos índices, não importando o motivo, tem sempre o número de instrução FOR igual o número de dimensões da matriz. Nessa função não é diferente, são 3 instruções FOR: Duas para a matriz de caracteres (FOR-LINHA e FOR-COLUNA), e para vetor de frequência (FOR-COLUNA). FOR-LINHA contém, unicamente, FOR-COLUNA. FOR-COLUNA da matriz contém os comandos que fazem cálculo e a verificação de frequência e define qual é o caractere de maior valor na matriz de caracteres. Depois de copiar o caractere no índice atual da matriz para uma variável, ela é usada no índice do vetor frequência, logo após o valor na frequência é incrementado. Em seguida essa mesma variável é comparada; o objetivo é determinar se seu valor é o maior já atingido e atualizar outra variável que tem o valor que supera todas as anteriores. FOR-COLUNA do vetor de frequência contém os comandos que imprime o vetor com todas as frequências registradas percorrendo esse mesmo vetor; como o vetor frequência tem o comprimento igual ao limite do valor de um char sem-sinal UCHAR_MAX, torna-se importante saber qual é o maior valor atingido dos caracteres, com isso evitar percorrer o vetor completo (255 elementos) sem necessita. Para contorna esse problema use a variável determinada anteriormente como limitadora do índice de coluna. Como nada garante que existe intervalos sem ocorrências entre 0 e essa variável, é necessário testar se o valor no vetor, no índice atual, é diferente de 0 para só assim imprimir. C11 #define UCHAR_MAX ((unsigned char)(-1)) void * ocorrencias (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]){ size_t frequencia_do [UCHAR_MAX] = {0}; size_t caract = 0; size_t maior_caract = 0; for (size_t l = 0; l < nlinh; ++l){ for (size_t c = 0; c < ncolun; ++c){ caract = da_matriz [l][c]; ++ frequencia_do [caract]; if (caract > maior_caract){ maior_caract = caract; } } } for (size_t c = 0; c <= maior_caract; ++c){ if (frequencia_do [c]){ printf ("%ux { %c } \n", frequencia_do [c], c); } } return da_matriz; } -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
Como a matriz tem sempre duas dimensões (MxN), essa parte da questão resume-se em escrever uma função que receba o número de linhas, colunas e o ponteiro. void * ler (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]) C11 void * ler (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]){ for (size_t l = 0; l < nlinh; ++l){ for (size_t c = 0; c < ncolun; ++c){ printf ("Elemento [%u][%u] = ", l, c); scanf_s (" %c", &da_matriz [l][c]); } } return da_matriz; } -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
Uma solução envolve no mínimo 3 funções, exceto main. Função que é um algoritmo em C para preenche matriz de caracteres. Função que conta o número de ocorrências dos caracteres e lista o resultado: entende-se por exibir o resultado. Função que recebe um caractere e retorna se caixa alta quociente de 10 senão produto de 2 . -
C Criar uma função que receba o primeiro caractere registrado na matriz
Ansi C respondeu ao tópico de Yank Marsh em C/C#/C++
"Faça uma algoritmo em C que receba uma matriz de caractere [...] " Uma matriz de caractere do tipo char é mais adequada porque não desperdiça bytes de memória. A máscara certa para leitura de caractere é "%c" -
"[...] a consulta aos clientes: por código (que é o índice do vetor). Deverá ser digitado o código 999 para encerrar o programa." Na ordem em que os fatos são anunciados ao encerra sua iteração consulta, encerra-se logo em seguida o processo porque não existe mais nada depois. Entretanto, na hipótese de "encerra o programa" se relacionar, não a ordem dos fatos, mas sim naquele local então é com return 0 . Consulta aos cliente, precisa ser uma consulta por laço, caso contrário, não faria sentido. Por esse razão, a iteração consulta não termina enquanto código é diferente de 999. * C++, diferente de C, não obriga o trabalho com vetores primitivos, existe uma classe segura só para esse tipo de implementação <vector> Além disso na expressão de ponteiro dados o índice correto cod. O contador i não serve para nada, só atrapalha.
-
C É possível fazer o teste lógico de comparação de uma cadeia de char no while?
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Sim. Exemplo: int v [100]; int *p = v; // Quando alcançar v nesse ponto. O endereço do primeiro elemento de v é atribuído a um ponteiro, só fica o ponteiro v. Porque nesse situação necessariamente não pode ser, essa é a situação em que a matriz char [30] é criada. Perfeitamente, e digo que nesse momento "traduziu" para ponteiro, pois a situação exigiu essa "transformação". -
C É possível fazer o teste lógico de comparação de uma cadeia de char no while?
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Acho que entendi! Então é tudo por conta do compilador, dependendo de onde está a expressão ou nome da matriz o compilador converte a matriz (propriamente dita char [n]) em um ponteiro conforme o necessário. Disso fica a ideia de que o primeiro item (&v[0]) é simultaneamente elemento, ponteiro, mas na verdade ocorre uma conversão naquela local que "transformou" v em uma referência do tipo ponteiro. Como a v matriz é irrelevante, v é um ponteiro até n. Meio que isso né! -
C É possível fazer o teste lógico de comparação de uma cadeia de char no while?
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Então o endereço 0x012ff89c é numericamente igual a &v[0] ? -
C É possível fazer o teste lógico de comparação de uma cadeia de char no while?
Ansi C respondeu ao tópico de Luiz Paulo Escobar em C/C#/C++
Neste caso podemos dizer que a memória total reservada apenas para essas duas (azul e var),em uma ambiente 32 bits, é de 8 bytes. Correto isso porque é 4 bytes de ponteiro + 4 de var?
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