Ir ao conteúdo
  • Cadastre-se

ScreenBlack

Membro Pleno
  • Posts

    1.062
  • Cadastrado em

  • Última visita

Tudo que ScreenBlack postou

  1. Sobre a segunda pergunta, pode fazer de 3 maneiras simples: 1) Retornar um vetor de strings (matriz de char) char ** gets_nome(char *str)2) Montar uma lista de nomes usando structs nomedaStruct * gets_nome(char *str)3) Passar o vetor de strings por referência e alterar o conteúdo diretamente nele void gets_nome(char **str)Para os casos 1 e 2, a função que vai chamar "gets_nome()", precisa estar preparada para o tipo retornado.Exemplo para declaração de um vetor de strings: char listaNomes[5][100]; // permite 5 nomes com 100 caracteres em cada
  2. ScreenBlack

    Pilhas em C

    Não cheguei a olhar seu código inteiro, mas já percebi um erro: int main(){ int status=1; int val, op, x; printf("Bem-vindo! Calculadora RPN usando conceito de Pilha\n"); printf("Informe uma opcao:\n"); while (status==1) { printf("\n\n[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisão\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\n\n"); printf("Informe o codigo referente ao processo desejado: "); scanf("%d",&op); while (op!= 1 && op!= 2 && op!= 3 && op!=4 && op!=5 && op!=6 && op!=7) { system("cls"); printf("Informe uma opcao:\n"); printf("[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisao\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\nOpcao desejada: "); scanf("%d",&op); } system("cls"); if (op==1) { if (x < 2) { Está fazendo uma validação para a variável 'x', sem ao menos, tê-la iniciado com um valor válido. A comparação está sendo feita com lixo em memória, atribuída a variável 'x'.
  3. O código aqui funcionou corretamente. Utilizei as seguintes entradas: char exemplo1[] = "aaaxxx"; char exemplo2[] = "aaaaaa"; char exemplo3[] = "aaabbb";Para imprimir: printf("Palavra em pRaiz: %s\n", pRaiz->palavra); printf("Palavra em pRaiz->pDir: %s\n", pRaiz->pDir->palavra); printf("Palavra em pRaiz->pDir->pDir: %s\n", pRaiz->pDir->pDir->palavra); printf("Palavra em pRaiz->pDir->pEsq: %s\n", pRaiz->pDir->pEsq->palavra); printf("Palavra em pRaiz->pEsq: %s\n", pRaiz->pEsq->palavra);Saída: Entrou no IFnovoNo->palavra dentro do IF: aaaxxxnovoNo->palavra dentro do if: aaaxxxentrou no ELSE2Entrou no IFnovoNo->palavra dentro do IF: aaaaaanovoNo->palavra dentro do if: aaaaaaentrou no ELSE2entrou no ELSE1Entrou no IFnovoNo->palavra dentro do IF: aaabbbnovoNo->palavra dentro do if: aaabbbPalavra em pRaiz: aaaxxxPalavra em pRaiz->pDir: aaaaaaPalavra em pRaiz->pDir->pDir: (null)Palavra em pRaiz->pDir->pEsq: aaabbbPalavra em pRaiz->pEsq: (null)Process returned 0 (0x0) execution time : 0.501 sPress any key to continue.PS: Vale lembrar que você estava imprimindo apenas o primeiro nível abaixo da raíz, portanto, se os valores de entrada fossem inseridos para um mesmo lado da raíz, a sua impressão na tela não mostraria o conteúdo do segundo nível.PS 2: Verdade o que o amigo @dontpanic comentou. Alterei também a struct (coloquei valor 100 para o array palavra) e coloquei também valor 100 para a declaração da função. TNo* Insercao(TNo *pRaiz, char novaPalavra[100])
  4. Primeiro faça a alocação ponteiro para memória no ponteiro inicial da matriz (linhas), depois faça a alocação de memória para o float. if ( ( *matriz = malloc( *quantEleme * sizeof(float *)) ) == NULL ) { printf("Memória insuficiente"); quantEleme = 0; return; } for ( i = 0; i < *quantEleme; i++ ) { if ( ( (*matriz)[i] = malloc( sizeof(float) * 2 ) ) == NULL ) { printf("Memória insuficiente"); quantEleme = 0; return; } }
  5. ScreenBlack

    Proteus

    Verdade amigo @xykoTE. Eu havia esquecido do tri-state (14 anos sem atuar na área, dá nisso. rs). Sobre a DDP, comentei baseando em curto-circuito, onde possa retornar uma tensão superior ao comportado pelo CI na porta de saída (exemplo, chegar 12V sendo que o CI comporte, geralmente, 5V), por mais que consideremos o estado [1], as tensões, ainda sim, serão diferentes. Obrigado pelas complementações aos meus comentários.
  6. ScreenBlack

    Proteus

    1) "O que acontece a um CI se aplicar um sinal a um pino cuja função seja de saída": Bem provável que o CI queimará. Principalmente se ele não tiver bloqueio de corrente reversa (por exemplo: diodo para CC e/ou ponte de diodos para CA - Retificadores) e estiver alimentado e sinalizado (com sinal no pino de alimentação e de entrada). Isso gerará a chamada DDP (Diferença De Potencial). A intensidade do estrago será proporcional a intensidade do sinal aplicado no sentido inverso. 2) "o que acontece se deixar um pino de entrada de uma porta lógica com sinal suspenso?" Considerando "sinal suspenso", como sendo o estado sem sinal, então vai depender do comportamento do CI. Se não houver sinal da porta de entrada, mas, possuir uma porta lógica 'barrada' (porta lógica NOT - inversão de sinal) dentro do CI, a porta do sinal de saída terá sinalização. Desde que, o CI possua alimentação (sinal na porta VCC/V++). Mais informações sobre porta NOT
  7. DLL - Dynamic-link Library (Biblioteca de vínculo dinâmico, ou no popular: Biblioteca de "linkagem" dinâmica) Tem um princípio muito parecido com o de um programa convencional, porém, não existe a regra inicial de execução para o sistema operacional. Serve apenas para disponibilizar rotinas de execução (já compiladas) para programas da qual dela necessitam.
  8. A saída parece estar certa com o que você informou sobre o comportamento do programa. Se o usuário informar um valor certo e em posição errada, será apresentada a exclamação na posição errada. Se você pretende fazer o tratamento para as senhas em certas, porém, em posições erradas, caso o usuário, numa tentativa posterior, tenha acertada a mesma senha na posição certa, talvez seja interessante remover a exclamação, para evitar confusão, pensando que possa existir mais dela em outras posições. A não ser que, realmente seja verdade. Exemplo Senha correta: vd, vm, vd, vdEntrada 1: vd, am, am, vmSaída: @__!Entrada 2: vd, vm, am, vmSaída: @@_!No caso acima, o usuário acertou a senha que aparece apenas uma vez na senha verdadeira, porém, não tem como saber se só existe realmente aquela.Uma forma de evitar essa dúvida ao usuário, seria remover a exclamação quando tiver alcançada a quantidade de senhas corretas nas posições corretas. Exemplo: Senha correta: vd, vm, vd, vdEntrada 1: vd, am, am, vmSaída: @__!Entrada 2: vd, vm, am, vmSaída: @@__
  9. ScreenBlack

    Erro no sprintf

    Pode trocar as chamadas das funções para essas que passei acima. Os dois únicos erro de lógica que encontrei, foram: 1) Na função "main()", passar a chamada da função "obtemLocalIdadeMenorMedia()" para dentro do "for" e trocar o parâmetro "qtdePessoas" para "contador2". printf("Tabela de pessoas que possuem idade menor que a media das idades:\n"); printf("SEXO IDADE LOCAL\n"); for ( contador2 = 0; contador2 <= qtdePessoas-1; contador2++ ) if ( idades[contador2] < mediaIdades ) { obtemLocalIdadeMenorMedia(idades,localIdadeMenorMedia,localViagem, mediaIdades, contador2); printf("%4c %5d %s\n", sexo[contador2], idades[contador2], localIdadeMenorMedia); } 2) Na função "obtemLocalIdadeMenorMedia()", remover o tratamento para validar idades inferiores a média (pois ela já está inclusa no "for" do item 1) e remover o "for", pois a posição está sendo passada por parâmetro: void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int posicaoCadastro){ if ( localViagem[posicaoCadastro] == 'S' ) sprintf(localIdadeMenorMedia, "ASIA"); else if ( localViagem[posicaoCadastro] == 'E' ) sprintf(localIdadeMenorMedia, "EUROPA"); else if ( localViagem[posicaoCadastro] == 'A' ) sprintf(localIdadeMenorMedia, "AMERICA DO NORTE"); else sprintf(localIdadeMenorMedia, "NUNCA SAIU DO PAIS"); }
  10. ScreenBlack

    Erro no sprintf

    Fiz o teste aqui e funcionou. PS: precisei ajustar as chamadas de funções, pois os compiladores mais recentes não aceitam o tipo de nomenclatura que você está usando. void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int qtdePessoas);int leValidaInteiro(const char titulo[100], const char msgErro[100], int valorMin, int valorMax);char leValidaCaracter(const char titulo[100], const char msgErro[100], char opcao1, char opcao2);char leValidaLocalViagem(const char titulo[100], const char msgErro[100]);
  11. O retorno da função strcmp() será zero caso os conteúdos comparados sejam iguais. Tente assim: for(i=0; i<n; i++) { printf("%s, ", vs[i]); if ( !strcmp(jog[i], "vm") ){ printf("%so ", COR_VERMELHO); } if ( !strcmp(jog[i], "vd") ){ printf("%so ", COR_VERDE); } if ( !strcmp(jog[i], "am") ) { printf("%so ", COR_AMARELO); } if ( !strcmp(jog[i], "az") ) { printf("%so ", COR_AZUL); } if ( !strcmp(jog[i], "mg") ) { printf("%so ", COR_MAGENTA); } if ( !strcmp(jog[i], "ci") ){ printf("%so ", COR_CIANO); } } Para o if() valer, esse valor retornado precisa ser diferente de zero. A exclamação ('!') na frente da função, nesse caso, serve para inverter o resultado. Ou seja, se o retorno for zero (0), ele inverte para um (1).
  12. ScreenBlack

    Erro no sprintf

    Não aparecem todos porque está limitado para mostrar apenas os cadastros com idades inferiores à média.
  13. Isso mesmo. Significa cada valor contido na matriz.
  14. "valorProximo" foi apenas um nome que escolhi para a variável. Pode chama-la de "num_menor", se desejar. Fica a seu critério. O importante é a sequencia a ser executada.
  15. O valor próximo da média pode ser um valor anterior ou posterior à própria média. Para isso, precisa basicamente, iniciar a variável "valorProximo" com um valor contido na matriz (qualquer um) e executar 5 comparações entre o valor contido numa certa posição da matriz para com a média: 1) Se forem são iguais, o valor da matriz será verdadeiro;2) Se valor da matriz e o valor da variável "valorProximo" forem menor que a média, verificar se o valor da matriz é maior que a variável "valorProximo", então, o valor da matriz será verdadeiro;3) Se valor da matriz e o valor da variável "valorProximo" forem maior que a média, verificar se o valor da matriz é menor que a variável "valorProximo", então, o valor da matriz será verdadeiro;4) Se valor da matriz é maior que a média e o valor da variável "valorProximo" menor que a média, verificar se o resultado da subtração (valor da matriz - média) é menor do que o resultado da subtração (média - "valorProximo"), então, o valor da matriz será verdadeiro;5) Se valor da matriz é menor que a média e o valor da variável "valorProximo" maior que a média, verificar se o resultado da subtração (média - valor da matriz) é menor do que o resultado da subtração ("valorProximo" - média), então, o valor da matriz será verdadeiro.
  16. CodeBlocks é apenas uma IDE para desenvolvimento e não um compilador. Quase certo que ele utiliza o MinGW por baixo, para compilar. A diferença entre seus cenários, parece estar apenas na flag passada (-wsign-compare - Comparação de sinal), quando utilizado o MinGW (Manualmente?!). Se especificar essa flag utilizando o CodeBlocks, aparecerá também esse aviso. Sobre o Aviso: A chamada size() retorna um valor do tipo unsigned int e está sendo comparada com a variável "i" ou "j", onde ambos são do tipo int. Solução: Troque os tipos int para unsigned int, nas variáveis "i" e "j".
  17. Você está usando função de string para comparar conteúdo do tipo inteiro: strstr(codigo[i] ,busca_codigo_alterar)São coisas diferentes.Para comparar valores inteiros, a comparação é direta: if ( codigo[i] == busca_codigo_alterar[i] )Outro erro: A variável 'busca_codigo_alterar' foi criada como vetor, mas está sendo utilizada como variável simples. Troque de:int busca_codigo_alterar[10];Para:int busca_codigo_alterar;Ficando a comparação:if ( codigo[i] == busca_codigo_alterar )
  18. Vou tomar como exemplo o seguinte conteúdo informado pelo usuário: ((2+3)*(3*5)/(1+2)) Colocando esse conteúdo em um vetor, teria de verificar para posição do mesmo, para saber se condiz com os carácteres que você deseja verificar '(' e ')'. Sempre que encontrar um '(', basta incrementar uma variável temporária do tipo inteiro. Quando encontrar ')', basta decrementar a mesma variável. Quando chegar no final do vetor, se a variável temporária estiver com valor zero, significa que, para cada '(', existiu ')' na mesma quantidade. Exemplo: if ( vetor[i] == '(' ) contador = contador + 1;if ( vetor[i] == ')' ) contador = contador - 1;if ( contador == 0 ) printf("Expressão matemática está correta\n");
  19. Você precisa de um valor de referência para a busca e retorno dos dados do funcionário. Para isso, pode utilizar o nome como valor de busca. char busca_nome[20];printf("Informe o nome do funcionario a ser encontrado");scanf(" %s", busca_nome);A partir daí, basta criar a rotina para percorrer a lista de funcionários e comparar cada nome da lista, com o nome da busca. if ( strcmp( nome[i], busca_nome ) == 0 ) printf("São iguais\n");
  20. @carloseduardosilva o colega @Anthmann apenas quis dizer, em português de portugal, que existem tutoriais na internet. Ele não te ofendeu. O próprio exercício explica o raciocínio lógico da operação. Pelo o que você comentou, sua dúvida não é em relação a linguagem de programação (foco da lista), mas sim, raciocínio lógico. O que você não entendeu?
  21. 1) A declaração da union segue o mesmo princípio de uma struct, porém, a diferença é que ela compartilha a mesma área de memória entre todos os elementos contidos no "bloco". O tamanho dessa área de memória será o do maior elemento contido nela. Como a área de memória é compartilhada, logo, o conteúdo de um elemento será sobrescrito e/ou lido pelo do outro. Por exemplo: union Teste{ int valor; // tipo inteiro contém 32 bits char letra; // tipo char contém 8 bits}; Memória alocada para a union é de 32 bits. Exemplo struct: struct Teste{ int valor; // tipo inteiro contém 32 bits char letra; // tipo char contém 8 bits}; Memória alocada para a struct é de 40 bits. 2) Para mostrar o valor da multa, pode ser feito através de uma função, onde esta receberá os valores de velocidade da via e do veículo. A partir daí você pode decidir se quer que a função retorne o resultado do cálculo ou ela mesma mostre na tela. Depois disso, é só chamar essa função sempre que for mostrar os dados de um veículo. 3) Para fazer a busca pela placa, atualmente você já faz uma leitura dela (para cadastro do veículo), basta fazer outra leitura e então compará-las. A comparação seguirá o mesmo princípio que a atual opção 2 do programa, onde mostra os valores. Pode utilizar a função strcmp() para isso. Exemplo: char placa[20]; scanf(" %[^\n]s", placa); if ( strcmp(placa, m[i].placa) == 0 ) printf("Sao Iguais!\n");
  22. Não tenho certeza, mas acredito que você consegue fazer isso com a lib ImageMagick. API C simples: http://www.imagemagick.org/script/magick-wand.php API completa: http://www.imagemagick.org/script/magick-core.php Lista de linguagens suportadas: http://www.imagemagick.org/script/api.php Nunca a utilizei diretamente. Espero que ajude. Att.
  23. Quando o usuário digita uma string, ele aperta a tecla ENTER para confirmar a operação. Esse mesmo ENTER também serve para fazermos quebra de linha em um texto qualquer. É exatamente esse código do ENTER ('\n') que a função "fgets()" inclui no final string, antes do terminador ('\0'). Att.
  24. Para fazer leitura de string com espaço: scanf(" %[^\n]s", f[qtdCadastrada].nome);Sobre "bugar", você reparou que estou usando um espaço antes do "%" na função "scanf()"?Ele serve para ignorar o caracter do "BUG", que nada mais é do que remover o caracter da tecla ENTER que estava armazenado no buffer da chamada anterior da função "scanf()".
  25. Bem simples. Só definir a variável "f" para servir como um vetor "f[x]", onde "x" será a quantidade de posições permitidas para armazenar filmes. #include <stdio.h>#include <stdlib.h>#define QTD_FILMES 10struct filmes{ char nome[20]; char genero[20]; int classificacao;};int main(void){ int opcao = 0; int qtdCadastrada = 0; int tmp = 0; struct filmes f[QTD_FILMES]; while(1) { printf("Digite 1 para cadastrar filmes, 2 para ver filmes e 3 para sair: "); scanf(" %d", &opcao); switch (opcao) { case 1: if ( qtdCadastrada >= QTD_FILMES ) { printf("\n## Limite de cadastros alcancado ##\n\n"); break; } printf("Digite o nome do filme: "); scanf(" %s", f[qtdCadastrada].nome); printf("Digite o gênero do filme: "); scanf(" %s", f[qtdCadastrada].genero); printf("Digite a classificação etária do filme(somente números): "); scanf(" %d", &f[qtdCadastrada].classificacao); qtdCadastrada++; // O mesmo que: qtdCadastrada = qtdCadastrada + 1; break; case 2: for ( tmp = 0; tmp < qtdCadastrada; tmp++ ) { printf("Nome: %s\n", f[tmp].nome); printf("Gênero: %s\n", f[tmp].genero); printf("Classificação etária: %d\n\n", f[tmp].classificacao); } break; case 3: return 0; break; } } return 0;} Att.

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!