Ir ao conteúdo
  • Cadastre-se

arfneto

Membro Pleno
  • Posts

    6.252
  • Cadastrado em

  • Última visita

Tudo que arfneto postou

  1. arfneto

    C Fila em Liguagem C

    @Simon Viegas E esse ponto que Mauro falou é pra repetir: Então todos os X podem ser iguais. Como entrar nesse contexto? Estariam todos uns sobre os outros na fila? Estariam em círculo à mesma distância? E se fosse pequena ? Eu desisti,
  2. arfneto

    C Fila em Liguagem C

    Não vejo onde está escrito que a posição da pessoa na fila --- que é o que está de fato escrito --- é a distância a partir de algum ponto de referência. Conseguiu ler ali que Xé a distância, em metros, da pessoa do início da fila? Não consigo. de um modo resumido: não consigo.
  3. Muito burro ter uma opção saldo se trata uma conta por vez
  4. aqui nada diz sobre continuar imprimindo aquela bobagem. esqueça
  5. Seu professor vai se sentar e testar isso, com muita paciência. esperando as mais de 30.000 linhas com a mesma mensagem na tela, e depois de novo para uma outra conta? Ou ele vai pagar alguém? E você vai esperar pra testar? No enunciado diz que tem que ter menu? Tem mesmo? Ou basta ter vetores?
  6. Entendeu esse exemplo? Faça o simples. Não está escrito no enunciado. Não dá pra imaginar o programa mostrar 30.000 linhas com a mesma mensagem na tela, e sem sentido, a cada vez que for alterar a conta corrente. Tem mesmo que ter um menu? Tem um enunciado que fala isso? Poderia postar o enunciado dizendo que vai imprimir sem parar a toa? vou por numa moldura
  7. Você não está falando sério está? Acha mesmo que vai ficar parado esperando até dar 9999 transações para cada conta , com o programa escrevendo aquela bobagem na tela, para depois voltar ao menu e continuar? Eu pediria uma assinatura do professor no enunciado antes de programar isso
  8. Testou de fato seu programa? Sabe que ao usar a opção sair ele fica no loop ate 9999 mostrando nada na tela, imagino. Acha que ficou bom? Que está certo? Ao entrar no programa e digitar 4 sair ele fica um tempo imprimindo isso. Não contei mas acho que são 9999 vezes. Não, não está assim bom. Bem, se foi quer dizer que tem dois SAIR. um pra sair da conta e outro para SAIR do programa. Ou será que vai ler 9999 contas toda vez? Se você tem que fixar as operações por conta só é mais chato mas é mais fácil. Você precisar ler o número da conta do cara e arrumar uma posição no vetor para ela. Ou nos 3 vetores como te falei. E aí você fica no menu fazendo as tais operações. E atualiza o saldo e deixa na tela junto com a conta. É melhor pra você controlar os testes. Ao sair da conta você pergunta se vai ler outra ou não... E ao encerrar manda o relatório com as movimentações... Não. Entenda o que você tem que fazer antes de tentar fazer. você tem até 10.000 clientes e isso é só para o cara testar o conhecimento com os tais vetores. eu te disse duas maneiras de fazer e te disse umas coisas que estavam erradas no que estava fazendo. Você não usou nenhuma das duas e nem corrigiu o que estava errado então é razoável que ainda tenha problemas ao final, quando o cara teclar sair, você tem que mostrar um relatório de fechamento, mostrando PARA CADA CONTA MOVIMENTADA o saldo final e a quantidade de operações. E usando uma estrutura de repetição para mostrar isso. Esqueça essa parte porque se não usar uma estrutura de repetição vai fazer usar o que? uma furadeira de impacto e listar cliente[0] cliente[1] cliente[2] ate cliente[9999] ? se você em lugar nenhum trata a conta corrente como vai conseguir listar os saldos de até 10.000 contas? sorteio? Você tem que ler o número da conta e a partir daí criar uma movimentação para essa conta no vetor, e atualizar o saldo e o contador de operações. Só isso. Não precisa por em ordem de conta, nada disso, pode ir colocando no vetor o numero da conta e o saldo que começa com zero e a movimentação. Só isso. Ao receber uma movimentação para uma conta você vai lá no vetor de 10000 e vê se a conta já está lá. se já está você faz a operação e atualiza os saldos. Se não está você coloca e marca a primeira operação. É muito simples na verdade, se não começar a enfeitar. É algo assim conta 1 deposito 100 conta 2 deposito 500 conta 1 deposito 300 conta 1 saque 150 -- fim -- movimentos conta 1: 3 operacoes saldo 250 conta 2: 1 operacoes saldo 500 A entrada desse programa devia ser um arquivo de movimentações e não um menu na tela. Como vai conferir o resultado se não tem os valores digitados? Bobagem. Se você entrasse com um simples arquivo como acima e mostrasse na tela o resumo da movimentação faria mais sentido. Acha que entendeu agora porque precisa do número da conta para tratar até 10.000 contas? Seu programa está muito longe de funcionar. E mude aquelas coisas de que te falei.
  9. arfneto

    C Fila em Liguagem C

    Tentei mesmo levar a sério esse troço, mas não dá. Alem da bobagem de tentar dar um aspecto sério a um texto bobo: não toca no assunto da distância esperada entre as pessoas na fila. não considera que a fila anda e que o contágio não é instantãneo se tem N pessoas na fila, fica a critério do leitor imaginar o que é uma lista de N posições das pessoas na fila. Haverá não-pessoas na fila então? ovelhas? pombos? máquinas de café e biscoitos? Se só tem pessoas na fila então essa lista das posições vai ter N pessoas e N posições. Genial. Será um grupo em particular de N pessoas dentro de um universo maior de pessoas na fila? Vão estar numeradas de 1 a N, de N a 1 ou o que? Não, porque a fila contem N inteiros e a fila tem N pessoas. Veja que eu tentei. Acho que deve discutir com o grupo de cientistas que elaborou isso e tentar achar um sentido.
  10. arfneto

    C Fila em Liguagem C

    Isso é uma bobagem. Qual a distância entre as pessoas na fila? O alcance da contaminação vai depender da distância do indivíduo contaminante. E a posição do contaminado na fila vai contaminar um círculo de 2m. Só que a fila é considerada linear até prova em contrário. E assim o total de contaminados vai sr função da distância entre as pessoas na fila e posição do contaminado estar antes de metade dessa distância, certo? Uma conta óbvia. Considere um índice delta = a quantidade de pessoas por metro na fila e faça as contas em função desse delta e da distância do contaminado em relação à borda da fila
  11. arfneto

    C Fila em Liguagem C

    Isso faz pouco sentido. Antes de tudo não fala sobre a passagem do tempo e não vejo como modelar isso sem considerar o tempo. Por outro lado nada fala sobre a distância entre as pessoas na fila, a taxa de chegada, os tempos de atendimento. Se as pessoas ficarem a 2.5m de distância na fila não haverá contaminação... Que material teórico poderia dar solução a uma coisa tão vaga? Há todo um campo de Teroria das Filas, com vasta bibliografia. Eu por exemplo estudei isso. Há muitos recursos e modelos sobre dispersão de partículas, sobre tempos de espera. E há muito material sobre estruturas de dados e modelos abstratos. Mas não sei o que fazer com enunciado desses.
  12. Muito bem. Em geral essa é a maneira mais comum de fazer isso mesmo. Trata-se de uma pilha, uma estrutura de dados que inverte as coisas, como numa pilha de livros onde você coloca os caras e retira depois a partir de cima, e os livros vem na ordem inversa. Você usou uma outra string como a tal pilha e inverteu os valores, e aí basta comparar as duas. Bom trabalho. Não com aquele modelo, mas com essa implementação. Note que em C apenas 0 --- zero --- é falso e assim muitos preferem escrever if(erro) ao invés de if ( erro == 1).
  13. Pode não bastar mas necessário é. Mas você pode testar a mecânica apenas chamando uma das funções embutidas, a partir de um programa qualquer, fora do contexto do ANSYS. Assim saberá se o conteúdo da DLL é usável do modo como ela foi gerada.
  14. Meigo esse modelo. Serviria também para construir uma espaçonave? Bem genérico!
  15. Então... é justamente o contrário. Não compilo o programa a cada vez que vou rodar. tem lá a tela, e la rodo os programas que eu tenha para testar. Entenda que um programa não é feito para ser compilado a vida toda: depois que ele fica "pronto" nunca mais é compilado. Ele vai para outras máquinas e outras pessoas e passa a ser algo útil. Então uma parte essencial desse "teste" é rodar o programa no console, ou no Terminal do Windows Pro já que usa. Como já te disse o terminal é muito mais rápido e compatível com o Linux e o Max em muitas coisas. E roda Unicode então tem menos chance de problemas com caracteres não representáveis. Ou nenhum. Um programa como esse sempre seria usado assim, se se chamasse "frutas" por exemplo: frutas lista1.txt lista2.txt lista3.txt Os nomes dos arquivos são sempre passados como parâmetro. Como em todos os comandos que usa, como CD ou DIR ou MKDIR ou DEL. Imagine se faz sentido compilar o programa de novo para trocar o nome dos arquivos sendo que o programa é exatamente o mesmo. Essa parte eu não entendi: o programa que te mostrei é muito mais simples que o exemplo que postou com sete loops e tal. O que eu te mostrei é o simples. Por isso escrevi. Não tem nem 50 linhas e segue exatamente o planejado no início O exemplo que mostrou tem quase 100, usa 10 includes, usa coisas crípticas para um iniciante como #define de funções, mudanças de cor que não estavam previstas, e como eu disse sete loops. A versão de windows não faz diferença. Há décadas SetConsoleScreenBufferInfoEx() define os atributos da console e se você usa isso é educado antes de mudar chamar GetConsoleScreenBufferInfo(); e salvar a cor e o fundo em uso e restaurar ao final do programa, porque as pessoas não gostam de ter isso alterado só porque rodou um programa que escrevia em outras cores Não. A cor é alterada quando chama a função. Desde os anos 90. Ela serve para isso. É um programa didático, só para mostrar que dá pra seguir a lógica programada e ver a lógica refletida no arquivo. Só um exemplo. Deve parecer profissional porque sou profissional, mas um programa profissional jamais teria os nomes dos arquivos como literais dentro do programa Entenda o que as funções que te mostrei fazem: elas são derivadas de programas de décadas atrás, mas o objetivo é importante: salvar a configuração do terminal para restaurar igualzinho na saída. Em especial repare na função que mostra a mensagem em vídeo reservo, que é mais simples: Ela não muda a cor da tela, apenas inverte o valor em uso duas vezes. E lá tem as chamadas de função mais simples, as que atuam sobre a cor e o fundo apenas. Vou editar o programa que postei e incluir os parâmetros e vou postar aqui para você entender a diferença Abraço adicionado 28 minutos depois Em geral se escreve assim, pela simples razão que faz a gente escrever programas afinal: executar ações repetitivas. Então você tem o programa "Une.exe" e ele junta duas listas em uma terceira., eliminando as duplicidades. E você não vai querer compilar o programa para cada vez que tem um novo arquivo certo? E se mandar seu programa para alguém não vai mandar o une.c com instruções de compilação, certo? Pode abrir o NotePad assim na linha de comando assim. No seu Windows Pro. Digitando o programa e o nome do arquivo, um parâmentro: Notepad fruta3.txt O programa não mudou nada: continua sendo só um exemplo e sem tratar as condições de erro e tal. Mas acho que dá pra entender a diferença. Há uma razão para todo programa ler parâmetros, em qualquer linguagem. O programa de teste #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void Use(); int main(int argc, char** argv) { char lista_original[40][20]; FILE* lista; FILE* nova_lista; int continua = 0; int qtd = 0; char fruta[20]; if (argc < 4) Use(); printf("Lista de Frutas\n\n * Da primeira lista:\n"); lista = fopen(argv[1], "r"); nova_lista = fopen(argv[3], "w"); do { qtd = qtd + 1; fscanf(lista, "%s", fruta); printf("%2d: '%s'\n", qtd, fruta); strcpy(&lista_original[qtd][0], fruta); fprintf(nova_lista, "%s\n", fruta); } while (!feof(lista)); fclose(lista); printf("\n * Da segunda lista:\n"); lista = fopen(argv[2], "r"); do { fscanf(lista, "%s", fruta); int duplicada = 0; for (int i = 0; i < qtd; i = i + 1) { if (strcmp(fruta, &lista_original[i][0]) == 0) { duplicada = 1; printf(" '%s' [Duplicada]\n", fruta); break; } }; // for() if (duplicada) continue; qtd = qtd + 1; printf("%2d: '%s'\n", qtd, fruta); strcpy(&lista_original[qtd][0], fruta); fprintf(nova_lista, "%s\n", fruta); } while (!feof(lista)); fclose(lista); fclose(nova_lista); return 0; }; void Use() { printf("\n\narfneto [2020]\n\nUse \"une lista1 lista2 lista3\"\n\n"); printf(" para unir 'lista1'e 'lista2'"); printf(" em 'lista3' sem duplicidade\n"); exit(1); }; // fim
  16. As operações e contas e o saldo devem ser mantidos por cliente. TUDO. Então se tem 30 clientes tem 30 saldos e 30 contadores de operações, que é uma coisa besta mas assim é. vou ver o que tem no programa logo mais adicionado 11 minutos depois o scanf() para ler um float precisa de um endereço de um float então deve usar &valor_saque e não apenas valor_saque já sabe que a opção de saída deve sair simplesmente do loop mas mostrar as operações que foram feitas, cero? Se não perguntou a conta do cara em nenhum momento como acha que vai tratar 10.000 contas? E listar as operações? Qual o propósito ao ver a tal opção 4 sair ficar mostrando sei lá o que até dar as 10.000 operações? Sério? Continua usando aquelas construções exóticas de case sem break com continue. Eu te avisei que era problema e na opção 4 já deu m#$d% Depois da opção 4 já pensou em terminar o trem e listar as operações que foram feitas?
  17. Parece que não mudou quase nada. Continua com o case sem break com os cases terminando em continue para o loop de fora. A mesma construção de antes e uma operação, 1.000 saldos e 10.000 contas? adicionado 0 minutos depois E continua tudo baseado no teclado e na tela...
  18. ??? Não entendo o quer quer dizer. Eu sei qual o problema a resolver. Leu o que eu escrevi no início? Faça como eu disse. Você só precisa de um nome. Só um. Se você só tem um carro ele é o mais potente. E o menos. E o mais verde. Tudo. Então você salva o nome dele. E a potência, é óbvio. E a cada carro que você lê se for mais potente que o primeiro voce salva. é só isso
  19. Não sei se entendo. Um printf() imprime o nome do carro.
  20. um char é pouco, a menos que o carro seja um X, como o da Tesla você precisa de uma string certo? com algum número de letras.... e você não precisa comparar o nome.... Pra que serviria?
  21. não. apenas declare uma variável. e mantenha atualizada. Entenda no entanto que char* é um vetor de letrinhas. Ou mesmo char maisPotente[200]; declara um vetor de 200 letrinhas, certo?
  22. sem ver o programa? Mas é simples. Apenas salve e mantenha atualizada uma variável com o nome do veículo mais potente já lido
  23. Recortei os dados e usei OCR para converter para texto e coloquei em uma planilha. Talvez ajude: Aí tem as somas e os máximos e os valores para conferir Eis o arquivo para não ter que digitar 3 Brasil Estados Unidos Argentina 10 482 502 487 352 323 1138 1119 1074 1146 1222 17050 19046 20093 19118 20463 25305 26756 28879 32525 33725 87 101 55 75 146 88 79 132 88 98 Como gerei a planilha a partir do desenho e os totais na planilha estão batendo com os do enunciado pode usar sem dúvida. Agora em relação às funções tem algo errado e acho mais simples mudar um pouco os parâmetros ou o valor de retorno para ficar mais fácil. Ou para corrigir mesmo porque eu acho que não está bom do jeito que foi declarado. Vou explicar Os problemas das funções do enunciado le_paises() --- depois de ler o total de países vai ler um país por linha a partir do mesmo arquivo então precisa passar o identificador do arquivo como argumento. Outro problema é o retorno. Então é muito mais simples declarar char** le_paises(FILE*, int); E assim você passa o arquivo para função continuar lendo, e o número de países a ler, claro. E a rotina faz o simples: cri a tabela de países e devolve prontinha. E declarar como char** é uma boa ajuda porque aí você pode usar Pais[0] = "Brasil" Pais[1] = "Estados Unidos" Pais[2] = "Argentina" ... que é o simples para acessar os nomes dos países um a um num printf() por exemplo. E para criar não podia ser mais simples --- se o arquivo fosse entrada e N o número de países char** Pais = le_paises(entrada, N); // o obvio le_contagios() --- mesmo caso: vai rodar pra ler a tal tabela de 30 valores depois de se ter lido o 3 e o 10 para dar os 30: 3 países e 10 leituras. Então o arquivo já está aberto. É preciso passar a identificação do arquivo como parâmetro para a leitura continuar de onde parou. E é mais esperto retornar o endereço da tabela de dados já preechida pela função, como no caso anterior: int* le_contagios(FILE*, int, int); E assim pode escrever direto int* Tabela = le_contagios(entrada,D,N); para ler os dados de contagio do arquivo entrada, para D dias e N países. Mais uma vez o simples: a tabela volta preenchida e não se fala mais nisso. maior_contagio_pais() --- essa não retorna nada mas precisa imprimir dois valores. E o nome do país.Só que o nome do pais está em outra tabela. Não seria o fim do mundo imprimir o país e chamar a função para imprimir o resto da linha, mas o simples é passar o nome do pais como parâmetro assim ela pode imprimir a linha toda como em: Brasil: 10 (1222) Algo assim serviria: void maior_contagio_pais( int nDias, int nPais, int* dados, char* Pais) ... Claro que o mais simples seria uma estrutura que representasse a planilha toda, com países e leituras, talvez algo assim: struct leitura { char* pais; int* dias; }; typedef struct leitura Leitura; struct leituras { int nPaises; int nDias; Leitura* info; }; typedef struct leituras Leituras; E aí seria tudo mais fácil. Poderia declarar Leituras teste; teste.nDias = 10; teste.nPaises = 3; teste.info = (Leitura*)malloc( teste.nDias * teste.nPaises * sizeof(Leitura) ); E cada leitura teria o pais e os totais de contágio por dia. Mas seria outro programa e não dá pra usar as funções assim sem "recriar" o enunciado
  24. Entenda que esse exemplo é apenas uma lista. Não tem assim um algoritmo ou uma estrutura sofisticada. É uma lista simples. A estrutura vem da linguagem apenas.
  25. Vamos deixar isso claro: sempre aconteceu. Nada tem a ver com o compilador. adicionado 1 minuto depois MAs entendeu que poderia ser bem mais simples, em especial para um iniciante, certo? leu o exemplo que mostrei?

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!