Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Ansi C

    C Algoritmo de Matriz em C

    @Web Melo Mandei!
  2. Ansi C

    C Algoritmo de Matriz em C

    Você usa a função ‘scanf’ com especificador conjunto de caracteres. Sim, notei esse problema quando digito um compromisso com espaços a função captura somente a primeira ‘string’, mas isso que significa o especificador "%s". Então eu troquei para o correto "%[^\n]". Esse captura até o fim da linha. Inverti as proposições nas três verificações [mês, dia, hora] sua pergunta originalmente era se um dado na data está valido, eu troquei para SE um dado é invalido. Acredito que assim fica mais entendível para o computador (humano e máquina). @Web Melo Quer seu programa aqui on INBOX? A demais coias estão ótimas, para mim.
  3. Ansi C

    C Algoritmo de Matriz em C

    @Web Melo Estudarei sua resposta e no que posso ajudar em sua lógica. Por ora, adianto que imaginei um código menor, isso porque não pensei nos detalhes do exercício. Até mais.
  4. Ansi C

    C Algoritmo de Matriz em C

    @Web Melo Oih! É sim possível. Exceto se não tem os saberes necessário que, a propósito, são o básico de matrizes. Você estudou, ou estudará, pra esse exercício?
  5. @iandl99Sua tentativa está em puro C, cara! As diferenças seriam poucas, mas existem. Lembre-se do que disse agora a pouco.
  6. Você leu a definição Do produto? A saída, mais simples, acontece em duas fases: Determine o produto a partir da definição, imprime seu valor, após, imprime as operações sem calcular só mostra. Você tem os saberes necessário, a lógica é a mesma que usa com lápis e papel... A única diferença é que o resultado vem primeiro, então não existe fórmula: é um loop para calcular e outro em seguida para mostrar as operações. >.<
  7. Me metendo na conversa de vocês três pela última vez Então eu peguei o código original do autor do tópico, considerei a entrada dos dados e fiz poucas alterações. /* https://www.clubedohardware.com.br/profile/1154506-avss/ https://www.clubedohardware.com.br/forums/topic/1539587-n%C3%A3o-consigo-resolver-exerc%C3%ADcio-em-linguagem-c/ Alguém Poderia me ajudar a resolver esse exercício em C. Solicitar ao usuário os seguintes dados de até 20 alunos Matrícula Int, positivo, 0= fim Ano.matrícula Int, >= 2010 Exibir a menor matrícula e quantidade de alunos matriculados após ano 2010 */ // Dados de ate 20 alunos, matricula int; positivo; ano matricula int >=2010 // Exibir a menor matricula e a quantidade de alunos matriculados apos 2010 #include <stdio.h> int main( void ){ int _matriculas_codigo_ [20]= {0}, _matriculas_ano_ [20]= {0}, _matriculas_tamanho_= 0; printf("%s", "NESTE PROGRAMA DESCOBRE E EXIBE A MENOR MATRICULA E A QUANTIDADE DE MATRICULAS APOS O ANO 2010\n" "DENTRE ATE 20 MATRICULAS DE ALUNOS\n" ); { for( int idx= 0; idx < 20; ++idx ){ printf( "INFORME A MATRICULA (0=FIM DOS DADOS)\n" ); { int codigo= 0; int flag= scanf( " %d", &codigo ); scanf( "%*[^\n]" ); while( 1 > flag ){ printf( "Matricula Invalida.\n" "Informe Novamente: " ); flag= scanf( " %d", &codigo ); scanf( "%*[^\n]" ); } if( 0 == codigo )break; _matriculas_codigo_ [idx]= codigo; ///adicionar matricula } printf( "INFORME O ANO DA MATRICULA (ANO >= 2010)\n" ); { int ano= 0; int flag= scanf( " %d", &ano); scanf( "%*[^\n]" ); while( (1 > flag)||(2010 > ano) ){ printf( "Ano Invalida.\n" "Informe Novamente: " ); flag= scanf( " %d", &ano ); scanf( "%*[^\n]" ); } _matriculas_ano_ [idx]= ano; ///adicionar ano matricula } ++_matriculas_tamanho_; ///concluir um cadastro } } printf( "%s%u%s", "Excelente! Chegamos ao final do cadastramento...\n" "O total de ",_matriculas_tamanho_, " matricula(s) cadastrada(s)\n\n" ); ///<<FALTA>> /// <<PROCESSAMENTO>> /// <<SAIDA>> } // fim dos dados GDB online Debug | Compiler
  8. Talvez está a procura: Ascii ray tracing
  9. @Lucca Rodrigues Ahh! Aqui, como lá, definiu senha do tipo inteiro, senha é ‘strings’. >.<
  10. Oih @Helio Junnior Sartor Dalmolin o enunciado é para exercício das ‘strings’, sua senha também é ‘string’. USUÁRIO e SENHA são STRINGS! #include<stdio.h> #include<string.h> int main( ){ char _usuario_[24]= {"helio"}, _senha_[24]= {"XXXXX"}; printf( "Para prosseguir escolha uma das tres opcaos.\n\n" "(1) Login\n" "(2) Alterar senha\n" "(3) Sair\n" "( )\b\b" ); int codigo= 0; scanf( " %d", &codigo ); if( codigo == 1 ){ char usuario[24]= {""}, senha[24]= {""}; printf("Informe o nome de login: \n"); while( scanf (" %s", usuario), strcmp(usuario,_usuario_)/* aqui use a função que compara strings */ ){ printf("Acesso negado %s \n" "Informe o nome de login: \n", usuario); } printf( "Informe a senha: \n"); while( scanf (" %s", senha), strcmp(senha,_senha_) ){ printf("Acesso negado \n" "Informe a senha: \n"); } printf("Acesso Permitido."); } } PS: Você pede um de cada vez, penso que deveria ser os dois na mesma linha. Ou se uma entrada por vez, como está, faça a verificação junta, e não uma de cada vez..
  11. Oih @Helio Junnior Sartor Dalmolin a função strdcpy que tenta usar para copiar senha nova em senha é apropriada somente para "stings" (tipo composto de alguns primitivos char) e não serve nesse caso, especificamente. Entendo que senha nova e senha são definidas/declaradas do tipo inteiro (tipo primitivo int) e nesse caso é atribuição direta e com operador de atribuição (=). Como você é iniciante, talvez não tenho sido claro suficiente até agora, ainda assim, tente resolver só com essa explicação. Falta o operador (&)! O conhecido por "endereço de", ele é a única maneira que as funções têm para acessar e modificar valores entre elas de espaço local para espaço local, acessando a variável lá onde ela se encontra na memória do computador, por essa razão "endereço de" existe. Faltou a vírgula que separa os parâmetros reais: "A nova senha eh: %d \n", senha
  12. Reafirmo o que dissemos antes, trata-se de uma limitação que não mais existe atualmente, mas continua nas versões iniciais da linguagem (penso que C90). É um incomodo que as configurações padrão do seu compilador\IDE estejam no modo clássico, mas mude isso, encontre algo parecido com "compile flags" e escreva std=c11 Padrão C 11, entre C90 e C2X é aquele que apresenta as atualizações mais significativas, e tenho certeza que tem na sua máquina, pois essa é a sugestão na última mensagem da aba [compilador] EDIT: precisa colocar um sinal (-) antes, assim: -std=c11
  13. Oih @AVSS teria uma resposta melhor se desse (descrição) precisamente qual é o erro. Mas, suponho ser relacionado a variável 'i' que é definida no espaço de construção do FOR. Uma limitação de compiladores antigos e baseados neles obriga definir a variável fora desse espaço. #include <stdio.h> int main(){ int menor = 0; int quantidade = 0; int i; //<<---- variável contador for(i = 0; i < 20; i += 1){ int ano; int matricula; printf("Matricula: "); scanf("%d", &matricula); printf("Ano: "); scanf("%d", &ano); if(i == 0 || matricula < menor){ menor = matricula; } if(ano > 2010){ quantidade += 1; } } printf("Menor Matricula = %d\n", menor); printf("Quantidade > 2010 = %d\n", quantidade); return 0; } Se não é esse o problema, post descrição gerada pelo compilador para que o autor tem com que dá detalhes, se precisar.
  14. Ansi C

    C++ Função de Vetores em C++

    Oih @Moraes_27 Existem alguns caminhos para se chegar a uma resposta. Aquele que eu considero mais adequado para quem é iniciante excluiu estudo sobre qualquer algoritmo de ordenação porque eles não devem ser consultados até que consiga, intuitivamente, uma solução em C que melhor se aproxima da maneira que resolveria numa situação real. Desde que tenha os saberes certo da linguagem C de programação não demora muito. Então, de que forma você juntaria esses conjuntos de dados, pode ser qualquer coisa, por exemplo, bolas numeradas, noutro conjunto em ordem decrescente ou crescente não importa? Responda esta pergunta em sua cabeça e quando tive pronto, mostre-nos o código (ou tentativa). Entretanto, você pode sempre escolher entre a oportunidade de aprender ou esperar pelo próximo que resolva por você.
  15. @Angela Maria Desculpa dizer, mas isso aí é trapacear... você precisa se dá uma oportunidade. Não desista, pergunte.
  16. Ansi C

    C exercicio de string em C

    @Tozzi22 Imagino que você resolveu o problema do tamanho dinâmico do vetor... Disso parte para preencher o vetor de produtos com nomes deles. Perceba que pode está copiando um dispositivo que já existe, ou seja, não é NOVO. Contudo, na sua lógica primeiro você captura os nomes e depois faz a contagem no processo das comparações, isso pode funcionar. Pode incluir nesse processo os caracteres já convertidos para MAISÚSCULAS ou minusculas, conforme o enunciado a diferença entre dois nomes pode ser só a caixa da letra? Penso que não. Finalize o ‘loop’ antes de copiar "0" para matriz, aproposito, o primeiro caractere de uma ‘string’ fica no índice 0. Ahh, 0 não é '0', portanto quando comparar o primeiro caractere da ‘string’ compare com '0'. E não é para comparar com '\0' só poque mat[1] == 0 quando entrar com 0 kkkk, penso que mat[1] == '\n' Tem pergunta? EDIT Se identificar a entrada como uma repetição, incrementa o valor no vetor de ocorrências com mesmo índice do nome que já existe na matriz de "strings" E NÃO INSERE a entrada NA MATRIZ.
  17. Ansi C

    C exercicio de string em C

    @Tozzi22 Eu direi agora o que estou vendo, e que talvez você queira melhorar. Conforme enunciado o número de descrição (nomes) de aparelhos é definido pelo usuário. Digamos que sou o usuário e minha resposta a essa solicitação é: 51. Na pior hipótese. os 51 nomes diferem, não tem nenhuma repetição entre eles, todos são NOVOS, *** MAS, a capacidade da matriz é de 50 nomes, com isso é provável que o programa trave, e no pior momento, logo no fim do trabalho, após digitar 51 aparelhos. >.< Tenha um processo chamada alocação dinâmica que @Midori menciona, e que resolve o problema de tamanhos definidos em tempo de execução. Esse é o primeiro problema que talvez queira começar resolvendo.
  18. Ansi C

    C exercicio de string em C

    Oi @Tozzi22 uma maneira de pensar o problema é que cada NOVO aparelho na lista tem uma posição única no vetor de "strings", que se identifica na memória pelo índice. Um segundo vetor de tipo inteiro com mesmo número de posições que o vetor de "strings" guarda as ocorrências (repetições) a cada entrada. Se identificar a entrada como uma repetição, incrementa o valor no vetor de ocorrências com mesmo índice do nome que já existe na matriz de "strings". Nesse ponto, tem todas as entradas e o vetor de ocorrências terminados e com essa informação pode fazer o que pede o enunciado; por exemplo, eu pedi para meus alunos a exibição de um histograma (gráfico) de frequência. ***MAS, o enunciado acredito que quer a soma dos valores no vetor de ocorrências.
  19. Oi @Vilmar Vieira eu não pude entender a saída e entrada, logicamente. A saída diz que foram 4 atendimentos, entretanto, a palavra CLIENTE aparece 2 vezes na entrada... e segue todas as informações discordantes porque não seriam obtidas da entrada. Essa foi a tua dificuldade? Estruturação dos dados de entrada não é necessário. É uma calculadora com as operações de subtração e adição respectivamente chamadas por SAQUE e PAGAMENTO sobre o primeiro valor da sequência: reserva disponível, só isso! A palavra FIM não interrompe as operações (subtração e adição) restantes na entrada, apenas inicia um contador diferente para essa ocasião que simula atendimentos após horário normal do banco (quando banco fecha com pessoas ainda na fila). Tem perguntas?
  20. @paulo luz magalhaes Alocação dinâmica acontece quando um programa, já inicializado, solicita memória ao sistema operacional Uma situação tipica para uso da alocação dinâmica de memória é igual a essa que tem em seu código. Sabemos que as funções malloc e calloc são responsáveis nos programas escritos em C pela solicitação de memória em tempo de execução. Reescrever um procedimento que usa VLA para alocação dinâmica e bastante fácil; sua lógica é praticamente igual. Abaixo está demostração da matrizA sendo dinamicamente alocada. //Definição de variaveis int linhaA= 0, colunaA= 0; //Entrada de dados printf( "\n Informe a quntidade de linhas da matriz A : " ); scanf( "%d", &linhaA ); printf( "\n Informe a quantidade de colunas da matriz A : " ); scanf( "%d", &colunaA ); float (*matrizA)[colunaA]= calloc( linhaA, sizeof(*matrizA) ); if( NULL == matrizA ){ printf( "%s Falha ao Alocar Memoria!",__func__ ); exit( 1 ); } // ... printf( "%f", matrizA[0][0] ); // ... free( (void *)matrizA ); **Após captura das dimensões o ponteiro matrizA é definido com VLA destinado a receber o endereço de memória dinâmica. É possível ter visto notação puramente de ponteiros, porém a de vetores é a que mais se aproxima da noção de tabelas e a primeira que aprendemos, o que a torna extremamente intuitiva, e não exige compreensão imediata de aritmética de ponteiros. É como uma transição suave, já que ponteiros são inevitáveis Uma recomendação de boas práticas é sempre liberar o que foi dinamicamente alocado quando não mais for necessário de modo a evitar perda de memória. Desconheço a "Função Double", mas se nos questiona sobre alocação dinâmica de matrizes de dados double, então... não há diferença, basta trocar o tipo na variável. Esse assunto pode ser bem difícil, então escreva com atenção porque a "brincadeira" é com a memória. Se resta dúvida, pergunte.
  21. Oi@paulo luz magalhaes Sei que existem algoritmos eficientes para multiplicar duas matrizes quadradas, porém você pode está escolhendo escrever o cálculo diretamente pela definição intuitiva. Inicialmente é necessário verificar se as matrizes satisfazem a condição de produto: o número de colunas de A é igual ao número de linhas de B. (i,n=n,y) O resultado terá A linhas, B colunas. (i,y). ***Mas, como o problema envolve duas matrizes quadradas de dimensões iguais, a definição de produto é garantida em razão do enunciado. Ainda na definição, o valor de um elemento da Matriz Produto é a soma de (n-1) produtos dos elementos de A, B. P[i,y]= A[i,1] • B[1,y] +...+ A[i,n-1] • B[n-1,y] Sua complexidade é O(n³); nós sabemos que 3 loops são necessários para escrever esse cálculo em sua forma mais simples. Nessa estrutura de 3 laços enraizados. for( i ){ for( y ){ for( n ){ } } } Como disse anteriormente esse é o modo mais simples de apresentar sua solução. Se não entendeu a maior parte do que expliquei, me diga que tentarei outras abordagens, mas antes sugiro que pesquise sobre assunto e se precisar traga perguntas objetivas.
  22. Ajuda a ter impressão certa de que modo programar essa tabela se a organizo assim. Índice de Massa Corporal Homem (IMC > 40) Obesidade mórbida (30 < IMC < 40) Obesidade moderada (25 < IMC < 30) Obesidade leve (20 < IMC < 24) Normal (IMC < 20) Abaixo do normal Mulher (IMC > 39) Obesidade mórbida (29 < IMC < 39) Obesidade moderada (24 < IMC < 29) Obesidade leve (19 < IMC < 24) Normal (IMC < 19) Abaixo do normal Observe que a esquerda existe expressão lógica, e a direta a sentença. Nós sabemos que, em C/C++, uma estrutura de fluxo de controle e decisão é programada, mais facilmente, sobre instruções IF-ELSE. Instrução IF avalia certa expressão lógica e troca o fluxo de execução do código quando verdadeira. O exemplo abaixo da modificação do famoso "Alô mundo!" mostrar em português, ou inglês sua mensagem a depender do valor na variável tradução. (10 < TRADUCAO < 100) Olá Mundo! (100 < TRADUCAO < 1000 ) Hello World! hello.c int main( ){ double TRADUCAO= 99.0; if( 10.0 < TRADUCAO && TRADUCAO < 100.0 ){ printf( "Alo Mundo!\n" ); ] else if( 100.0 < TRADUCAO && TRADUCAO < 1000.0 ){ printf( "Hello World!\n" ); } else { printf( "Traducao Indiponivel!\n" ); } } Troque de valores, estude esse trecho de código, pois ele é a base para tabela de IMC. Se precisa de mais ajuda, pergunte.
  23. Ansi C

    C Algoritmo de Matriz em C

    Seria compromissos uma "string"? E agenda uma rara matriz de caracteres [12][31][24][X] com 4 dimensões. Há desperdício de memória nessa abordagem, porém ganha em desempenho e facilitada de programação. Se precisar de compromisso às 16 horas de hoje, é bem fácil! &agenda[3][29][15][0]
  24. Perguntei porque existem estruturas iguais. 1# for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { printf("Elemento[%d][%d] = ", i, j); scanf("%d", &m[i][j]); } } 2# for(int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ soma= soma+m[i][j]; } } 1# + 2#= 3# E tem potencial para ficar ainda mais denso juntando outras lógicas for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { printf("Elemento[%d][%d] = ", i, j); scanf("%d", &m[i][j]); soma= soma+m[i][j]; } }
  25. Cada linha tem j (de 0 até 3) colunas, são esses elementos que precisamos verificar se estão no intervalo e contar, depois que terminar uma linha, pode mostrar quantos estão no intervalo e começar tudo outra vez para a próxima linha. São dois loops: uma Para as linhas outro Para as colunas. E uma decisão para verificar o intervalo e uma variável para contar. for (i=0; i<2; i++) { for (j=0; j<4; j++){ if(m[i][j] > 10 && m[i][j] < 20){ count++; } } //<< mostrar contar >> } ****Não é somente na primeira linha ([0][j]) é em cada linha. A média dos elementos pares também necessita percorrer toda a matriz, poderia até reaproveitar essa lógica que já existe, simplesmente acrescentando outra decisão abaixo para verificar os elementos pares e soma-los. Decisão me refiro a instrução IF. Com fim dessa estrutura tem mostrado todas as quantidades por linha, e já sai dela com a soma dos pares. A verificação de par segue esta lógica: if( numero % 2 == 0 ){ // é par? }

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!