Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Foi para nós, é uma situação hipotética, o cerno do código é sua estrutura de funções; Procedimentos é tudo. Tem muito sobre matrizes e ponteiros na internet. Deixe de desculpas e aprende ponteiros. De nada, @Josesousa
  2. Olá! sys_loteria 0) Escreva um algoritmo que leia um vetor de 13 elementos, que é o Gabarito de um teste da loteria esportiva. Contendo os valores 1(coluna 1), 2(coluna 2) e 3(coluna do meio). 1) Leia, a seguir, para cada apostador, o número do seu cartão e um vetor de Respostas de 13 posições. 2) Verifique para cada apostador o números de acertos, comparando o vetor de Gabarito com o vetor de Respostas. 3) Escreva o número do apostador e o número de acertos. Se o apostador tiver 13 acertos, mostrar a mensagem "Ganhador". Aqui acima só sistematizo nosso problema, nada mais. Dividir e conquistar: Boa parte dos problemas podem ser resolvidos dentro e somente na main, existem linguagens de um só método, já com relação a C nem sempre isso é uma boa ideia. Já parou para pensar o porquê de ficar tão difícil a medida que somou mais uma questão ao problema, apesar do problema não ser nada ruim, você chegou no seu dilema rápido de mais se comparada a complexidade do sistema na questão. Dentre muitas coisa ..., eu humildemente atribuo isso a falta métodos gerais: Online GDB: sys_loteria
  3. Deve de ter um acerto neste erro! adicionado 6 minutos depois Faça de novo e dessa vez lei as apostilas com mais paciência, minha humilde recomendação
  4. Que nada, esse é um jogo que eu gosto de jogar. Obrigado!
  5. Olá ! Poxa!!! Só mais uma tentativa, cuja diferença, é substituir a operação em printf por operação em vetor. Na tentativa de resolver esse problema, que não sei descrever. Online GDB: stringalizando_double ~~/~~
  6. Manejo de caracteres na String. Basta saber o número de espaços a ser distribuído entre as palavras, [ignorando inclusive o que já tem lá].Pois, ao que parece, justificativa é aqui sinônimo de tamanho do campo. Imagine a situação: func_formatar( "Hello", "World", 20 ) Determina o número total de letras Subtrai do valor de espaços no campo Divido Dividir o resultado pelo número total caracteres nas de palavras E agora, sabe-se quantos espaços há entre palavras. @Estudante0123 Não fiz ainda. ~~~ Bons Códigos.
  7. Uma apresentação mediana é assim, eu sei porque meus professores me dizem o tempo todo: #include <math.h> #include <stdio.h> #include <string.h> struct Aluno { char nome[30]; char email[30]; float peso; float altura; float IMC; } cadaluno[20]; void func_imc( void ) { char p; float IMC; float peso; char * nome; float altura; int count, i; printf( "+--------------------------------------+\n" ); printf( "|4- LISTA DE INDICE DE MASSA CORPORAL |\n" ); printf( "+--------------------------------------+\n" ); for( i = count = 0; i < 20; i++ ){ if( cadaluno[i].nome[0] == '\0' ) continue; else count++; nome = cadaluno[i].nome; peso = cadaluno[i].peso; altura = cadaluno[i].altura; IMC = peso/(pow(altura,2)); printf( "+......................................+\n" ); printf( "| %2d:\t%-30.38s |\n|%38s|\n", i, nome,"" ); printf( "| IMC:\t%-30.2f |\n", IMC ); printf( "| Classificacao: "); if( IMC < 18.5 ) p = printf( "Baixo peso." ); else if( IMC > 18.5 && IMC < 25 )p = printf( "Peso ideal." ); else if( IMC > 25 && IMC < 30 )p = printf( "Sobrepeso." ); else if( IMC > 30 && IMC < 35 )p = printf( "Obesidade Grau 1." ); else if( IMC > 35 && IMC < 40 )p = printf( "Obesidade Grau 2." ); else if( IMC > 40 ) p = printf( "Obesidade Grau 3." ); printf( "%*s\n", 23-p, "|" ); } printf( "+--------------------------------------+\n" ); printf( "+-> Cadastros: %d \n\n", count ); return; } int main( ){ int opcao, i; /* Cadastro de Teste */ strcpy( cadaluno[19].nome, "Doidinho de Jesus e Maria" ); cadaluno[19].altura = 1.85; cadaluno[19].peso = 100.6; cadaluno[19].IMC = .0f; strcpy( cadaluno[18].nome, "Fulano de Jesus e Maria" ); cadaluno[18].altura = 1.85; cadaluno[18].peso = 80.6; cadaluno[18].IMC = .0f; /* Cadastro de Teste */ do { printf( "+-----------------------------+\n" ); printf( "|-----CADASTRO DE ALUNOS------|\n" ); printf( "+-----------------------------+\n\n" ); printf( "1- Cadastra aluno\n" ); printf( "2- Listar alunos\n" ); printf( "3- Apagar aluno\n" ); printf( "4- Listar IMC de alunos\n" ); printf( "0- Sair\n" ); printf( "\n<<< " ); scanf( "%d", &opcao ); switch( opcao ){ case 4: func_imc( ); /* Escrever Ìndice de Massa Corporal */ } }while(opcao != 0); return 0; } Boa Sorte. ~~ / ~~
  8. Olá@Gnomo Psicodélico Não, é apenas um modelo que crie para realizar o teste. #include <stdio.h> #include <stdlib.h> // EXIT_SUCCESS #include <string.h> // strchr() /* Principal função do Programa Retorna ------- */ int main( void ) { unsigned char real_str[18]; unsigned char * s; double real; /* Declaração de Variáveis */ real = (1331108.20 * 10.70/100 - 22500.00)/1331108.20; /* Não queremos apresentar esse valor redondo */ sprintf( real_str, "%f", real ); /* 1º Salvamos o resultado na :real_str: string sprintf converte o valor real para string */ s = strchr( real_str, '.' ); /* 2º Localizamos o dot (.) e armazenamos a posição no :s: pointer strchr vai retorna o ponteiro da primeira ocorrência de dot (.) só exite uma e armazenamos sua posição em s */ printf( "%.*s", (int)(s - real_str)+5, real_str ); /* Enfim, escrevemos no prompt Nota ---- A opereção: (int)(s - real_str)+5 se resume em aritmética de ponteiros onde :s: é um posição númericamente maior que :real_str: tal que a di- ferença deles é o número de casas decimais antes de dot (.) */ return EXIT_SUCCESS; /* Finaliza o programa */ } O que achou dessa solução, (Pensei nela agora e )? Foi o que eu disse: Boa Sorte ~~/~~
  9. Neste caso você está comparando o endereço da memória de :nome: com o de uma string nula. Não vai funcionar do jeito que esta pensando. Já assim: if (cadaluno[i].nome[0] == ""[0]) continue; Se nome, estiver vazio, e o vetor[cadaluno] foi inicializado, ou até mesmo se a posição atual foi excluída; deve funcionar. adicionado 2 minutos depois Pessoal aqui é fera, vamos te ajudar. Mas isso só será possível se começar a usar procedimentos (funções) adicionado 6 minutos depois Mesmo que não faça a apresentação do quadro acima, porém funções tem que fazer, vai por mim.
  10. Rapaz começa a colocar essas soluções em funções, porque se não, a main vai ficar entupida. Aquela massa de código terrível e desgostosa. Faça uma apresentação bonitinha para essa lista, tipo assim: +------------------------------------------------+ | LISTA DE INDICE DE MASSA CORPORAL - IMC | +----------------------------+--------+----------+--------+-------------------+ | | | | | | | NOME | PESO | ALTURA | IMC | CLASSIFICACAO | | | | | | | +----------------------------+--------+----------+--------+-------------------+ + Fulano de Tal da Silva | 78.500 | 1.8500 | 64.0 | Peso ideal + +----------------------------+--------+----------+--------+-------------------+
  11. #include <stdio.h> // printf #include <stdlib.h> // EXIT_SUCCESS /* Principal função do Programa Retorna ------- */ int main( void ) { double real = 0; /* Declara variável real do tipo double */ real = (1331108.20 * 10.70/100 - 22500.00)/1331108.20; /* Versão C' do cálculo */ printf( "REAL: = %.6f \n", real ); // printf( "REAL: = %.4f \n", real ); // /* O "problema" acontece apenas na apresentação dos dados, para qual exigiu-se arredondamento, floor. Recomenda-se não reduzir para menos de 6 dígitos de precisão. */ return EXIT_SUCCESS; /* Finaliza o programa */ } Boa Sorte ~~/~~
  12. Ansi C

    C maior entre dois inteiros

    Quando omitido o tipo, o modificador adota o padrão int. Escrever desta forma é tão ingênuo que ninguém mais se arisca faze-lo ou relembrar tal conceito. Porém obrigado! Claro que funciona! Ocorreu-lhe que não?! [Pesquisou onde] pelo motivo já citado. Boa Sorte ~~ / ~~
  13. Olá! Isso depende da precisão da variável real. Seu resultado é: 0.0900967910797935 Veja que existe vários '9s' perigando o arrendondamento: 0.0900967910797935 Daí a precisão da variável ser tão importante no caso.
  14. Realize todas as mudação pospostas @Alexandre Tarouco Abaixo segue apenas os fragmentos com as observações parciais #include<stdio.h> #include<stdlib.h> /* Foram desativados por motivo deuso momentaneo */ //#include<conio.h> //#include<string.h> struct Aluno // No enunciado seu nome é próprio [Aluno] e não [aluno] { ... }; struct Aluno cadaluno[20]; int main( ) { int opcao, i; do{ ... scanf( "%d", &opcao ); // Checado switch( opcao ){ case 1: /* (1) Existem especificações no enunciado ignoradas / inexiste- tentes nessa parte, porém devem ser atendidas aqui: 1. Cadastra aluno (apenas 1, escolhendo a posição de 1 a 20). ------------------------------------------------------------ Esse trecho nos leva ao entendimento de que o usuário ainda tem de escolher ¹folha de cadastro para preenchiento. E não é exatamente o que está acontecendo. Pelo contrário não há escolha, e todos as ¹folhas de cadastro são vista no mesmo instante. ¹ Posições no Vetor :cadaluno: */ for( i = 0; i < 20; i++ ){ ... scanf ( "%f", &cadaluno[i].peso ); // Checado ... scanf ( "%f", &cadaluno[i].altura ); // Checado fflush( stdin ); } break; case 2: for( i = 0; i < 20; i++ ){ printf( "%d: %s - %s - %.2f - %.2f - %.2f", // Checado i, cadaluno[i].nome, cadaluno[i].email, cadaluno[i].peso, cadaluno[i].altura, cadaluno[i].IMC ); } break; ... } }while ( 1 ); // Checado return 0; } Qualquer coisa nos pergunte mais Boa Sorte ~~/~~
  15. Ansi C

    C maior entre dois inteiros

    Para ser mais claro, haja vista que é um exercício dos mais introdutório, me resta fazer dois exemplos. /* Com um loop podemos percorrer todos os valores de uma matriz que representa também o número de iterações. A função em questão compara 2 valores, e reto rna aquele que é o maior. Com isso, pode-se guardar o valor campeão de cada iteração ... */ #include <stdlib.h>/* EXIT_SUCCESS */ #include <stdio.h> /* printf() */ /* Retorna o maior valor (a ou b) Por meio de operador ternário ( ? ) testa qual de dois valores é o maior retornando camada superior o campeão. RETURN: TRUE > FALSE? TRUE:FALSE Nota ---- Essa função pode ser reduzida a macro, entretanto, não significa nada em termos de desempenho na atualidade. Parâmetro --------- a: int Primeiro valor da propósição, e hipoteticamente o MAIOR valor b: int Segundo valor da propósição, e hipoteticamnte o MENOR valor Retorno ------- */ int maior(int a, int b) { return a > b? a:b; /* Se 'a' é maior que 'b'? retorne a, se não retorne b; */ } /* A principal função do Programa Nota ---- Não precisa se preocupar com o 'parâmetro' void, pois se trada de uma conversão antiga que melhor releva a inexistência de parâmetros, 'void' nesse contesto, de fato, nos diz 'nenhum' parâmetro. Retorno ------- */ int main( void ) { int v[10] = {12, 4, 5, 78, -4, 18, 542, 0, 45, -72}; /* Declara matriz do tipo inteiro com 10 itens */ /* Exemplo 1:*/ unsigned item = 0; /* Contador de iterações while */ while(item < 10){ v[0] = maior(v[0], v[item]); item++; /* Por hipoteses consideramos o primeiro valor na matriz, e no parâmetro da função; como sendo inicialmente o maior, permanecemos assim até o fim das iterações while. Nota: Se por acaso modificar o primeiro elemento da matriz é proibido / ou inconveniente, basta declarar outra variável para salvar o valor campeão. Exemplo 2: int v[10] = {12, 4, 5, 78, -4, 18, 542, 0, 45, -72}; int m = v[0]; // Por hipotese dizemos que o maior valor é o primeiro e preservamos int i; for(i = 0; i < 10; i++){ m = maior(m, v[i]); // A variável campeão 'm' participa de todas iterações */ } printf("O maior valor no vetor: %d\n", v[0]); /* Exemplo 2: printf("O maior valor no vetor: %d\n", m); */ return EXIT_SUCCESS; /* Finaliza o programa */ } Obervação: O conteúdo no interior de /* */ são comentários e outra possibilidade de resolução (existem muitas análogas) Ainda estou exercitando a didática da coisa; ainda sim estou impressionado, culpo o meu 'português ingenuo' ! Boa Sorte ~~ / ~~
  16. Bem simples, tirando o papo das estruturas o que sobre é manipulação de vetores. Qual o problema?
  17. Existem varias versões de como se fazer essa tarefa Time_execute TIME_EXECUTE
  18. Ansi C

    C maior entre dois inteiros

    Com um loop podemos percorrer todos os valores de uma matriz que representa também o número de iterações. A função em questão compara 2 valores, e retorna aquele que é o maior. Com isso, pode-se guardar o valor campeão de cada iteração. Daí basta garantir que esse campeão seja um dos 2 termos da próxima iteração, repetindo esse procedimento até que todos os valores na matriz sejam testados. Para ser mais preciso poderia fazer pseudocódigo, porém é mais fácil escrever o programa, pois o algoritmo é iniciante e não faz sentido nenhum uma tentativa que não seja diretamente escrita em C. Contudo, espero que tenha entendido e pelo menos faça umas tentativas de resposta. Dica: Garanta que o maior valor seja sempre, sempre a primeira posição na matriz, v[ 0 ], Boa Sorte
  19. Olá @Cristina2000 O procedimento pow(...) retorna tipo real [Float ou Double] no caso, é double. Daí o ideal é que a variável que receberá o retorno seja também do tipo double com isso evita truncagem, é muita mais consistente e legal. Online GDB: math :: pow
  20. Ansi C

    C código em c sobre cartas

    @Simon Viegas você deu ai boas sugestões de como melhorar, e ajustar a lógica do programa. É um jogo de cartas pelo que pude perceber, eu não 'manjo' nada de jogos de cassino.
  21. Ansi C

    C código em c sobre cartas

    @Don1212 Fiz alguns concertos, agora está executando.
  22. Ansi C

    C cls nao funciona mais

    Ave Maria! @cezarstark É somente o CLS ou outros também, por exemplo PAUSE?
  23. Ansi C

    C++ subprograma em dev c++

    Olá ... ! Também existe conflito no cabeçario da função: pontos(...) #define N 10 /*<< #Macro N = 10*/ int pontos(Bilhar jogador, int N /*<< Conflito com #Macro N*/ ){ ... } Mude o nome do 2ª parâmetro ou do #Macro.
  24. Ansi C

    C++ Problema com função C++

    Olá @Escanor tudo bem! ¹ E outros mais que foram comentados em outros Posters; ² Eu sei! O erre é relacionado com protótipo da função ... Quando o interpretador vê isto: void notaaluno(int *x, int *y, int *z, char *medias[1]) vê realmente isto: void notaaluno(int *, int *, int *, char **) Assim o 4 parâmetro exige argumento do tipo Matriz Bidimensional quando associamos o números de asteriscos (*); Matriz Unitária - MU(*), Matriz Binária - MB(**), ... entende. Já aqui: notaaluno(&nota1, &nota2, &nota3, &medias[1]) no 4º argumento é acontece 2 momentos: medias[1] é uma variável que aponta [erroneamente] para próxima célula de memória [ou item da MU] depois de medias[0], sendo por tanto o mesmo que uma variável com ponteiro MU [char *]. Conseguinte temos &medias[1] que e o ponteiro para variável media[1] da MU [char *] Por fim, apenas para esse trecho do código recomento as seguintes colocações a se entender: char * ptr; char medias[1];// é [conceitualmente] o mesmo que char media; ptr = &media; ptr = &medias[0]; // formato correta de acessar: É a índice da // declação menos 1, [N - 1]: na declaração o índice foi 1 // &medias[1] configura erro de seguranção // porque acessa 1 item além do reservado, ou seja o 2º item, // que não existe (em tese) depois de medias[0]. (X) É uma problema conceitual que geralmente se vê na teoria [lendo livros]. char *medias[] não é mesma coisa que (char * ou &medias[]) char *medias[] é igual a isso aqui (char ** e medias(*)[]) Ou seja, char* medias[] é um vetor de ponteiros para tipo char Daí qual é o formato 'adequado' no cabeçario [protótipo] da função? float ou double notaaluno(int *x, int *y, int *z, char *medias)
  25. (0)*Escrever um Programa em C que lê um número não determinado de valores para M, todos inteiros e positivos, um de cada vez Subproblema é Número é Inteiro é Positivo Esse exemplo. * Quantas funções você quiser, você terá. (0) Função para teste de entrada /* Função de captura e validação de entrada */ #include <stdbool.h> #define E && /* Verificar se é número, inteiro, positivo. ------------------------------------- Parâmetro: [in] strings não nulo Retorna: */bool numero( char in[] ) { if( !*in ) return false; while( '0' <= *in E *in <= '9' ) { ++in; } return !*in; }

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!