-
Posts
6.526 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que arfneto postou
-
Não tenho como ver isso agora. Tenho tempo mas não tenho computador ou documentos. Era um post sobre bingo. O programa que mostrei fazia o sorteio das cartelas e um jogo até alguém ganhar e usava essas coisas todas adicionado 4 minutos depois Mas pode ver no fórum mesmo tem ferramentas de pesquisa Now que centralizar texto nada tem a ver com full-screen. A cada vez que vai escrever na console chama a função parts identificar o tamanho atual da tela. Full screen não muda nada nesse aspecto
-
Encontre o tópico de que falei aqui no fórum. Tem um programa pronto que tem tudo a ver com o que você precisa e uma discussão é referencias Para centralizar o texto tem uma função ao que se chama GetSystemMetrics você chama e recebe os valores de que precisa para centralizar o texto Tem exemplos lá no post
-
Olá Tem certeza de que precisa disso em um programa para console? Em geral se usa isso para o caso de computadores que não tem interface gráfica, coisa que está se tornando bem comum com os serviços em nuvem e supercomputadores que você só acessa a partir de um emulador de terminal, coisas como Amazon Cloud 9. Isso é um inferno para programar e o resultado não compensa se tiver alternativa, que seria usar a óbvia interface gráfica que vai te dar tudo isso de graça. Tempos atrás postei aqui um programa que simulava um jogo de bingo e usava essas funções para controlar o cursor e cor e tal, porque marcava nas cartelas os números que iam saindo até o final do jogo. E postei uns links para a documentação oficial da Microsoft e alguma coisa do Unix/Linux/MacOS. Dá para pesquisar aqui no forum por isso. Se eu me lembrar depois posto o exato tópico. Se tiver mesmo essa necessidade, talvez faça melhor uso de seu tempo usando uma biblioteca, como todo mundo usa. Eu usava uma nos ´90 chamada curses, que depois passou a se chamar ncurses e acho que pode se usar hoje em windows e Linux e é uma boa opção.Até onde eu me lembro era muito bem escrita. Se portabilidade não for importante, lembro que Windows foi quase que totalmente escrito em C, mesmo caso do Unix e derivados, de modo que pode usar as API -- funções --- do sistema que usa.
-
Olá! Como o enunciado é vago, defina algo para você poder continuar. Por exemplo imprimir as strings maiores picadas por strncpy() para colocar 20 posições por linha apenas e com um indíce das posições que estão na linha a cada linha. Use strcat() depois para montar a string de 200 a partir da de 10, coisas assim. marque as funções que já usou até usar todas e pronto Talvez pudesse pedir ao cidadão que especificou isso para se expressar um pouco melhor para ajudar a entender o que ele pretendia dizer...
-
C Problema em colocar uma struct dentro de uma matriz ixj
arfneto respondeu ao tópico de robson s martins em C/C#/C++
Olá Acho que muito do seu problema com o exercício vem do modo como tratou a estrutura... Não é isso que se espera que você construa. Pense bem. Não acha estranho ter uma matriz de int chamada poltrona apesar de ter uma struct chamada cadeira? E não acha redundante ter as cadeiras com fila, coluna... e número? E não acha que a fila seria um char como em geral é? Sugiro refazer sua lógica em torno de uma matriz de... cadeiras, claro, onde as poltronas são identificadas por letra e número, por exemplo entre A1 e E4. Uma melhor abstração. E não perder tempo com coisas não essenciais. Desenhe um gabarito com seu editor de texto. 5 minutos. Veja esse exemplo 0 1 2 3 4 5 6 7 0 * 0 * 0 * 0 * 0 * 0 * 0 * 0 |--------|--------|--------|--------|--------|--------| | A1 A2 A3 A4 | | B1 B2 B3 B4 | | C1 C2 C3 C4 | | D1 D2 D3 D4 | | E1 E2 E3 E4 | ------------------------------------------------------- 0 1 2 3 4 5 6 7 0 * 0 * 0 * 0 * 0 * 0 * 0 * 0 Já tem até um gabarito com números das colunas E use maiúsculas para as poltronas livres, minúsculas para as ocupadas. Escreva uma função para mostrar a sala a partir de um óbvio ponteiro para uma matriz de cadeiras. Depois você pode trocar isso. Depois quer dizer depois que seu programa estiver PRONTO... ch-191127-poltronas.txt -
Em relação ás pilhas: não misture a lógica do seu programa com o lance das pilhas. Implemente e teste em separado, como uma outra camada de seu programa, porque é isso que elas são: uma camada de abstração, se chama isso na literatura. Sobre os eventos: imagine um loop de controle como o do windows. Se deu certo com o Windows já é um argumento. Um simples switch que trata os eventos em seu programa. Pode usar uma letra para cada um apenas. São poucos. E torna a implementação muito, mas muito mais fácil. Eu postei aqui um programa usando essa técnica, um programa completo com testes e tudo. Só que não me lembro sobre o que era. Deve dar pra pesquisar no forum. Vou ver depois se acho e te mostro.
-
Não entendi Duas coisas que te recomendo fazer: implemente soluções genéricas para as pilhas. De jeito nenhum misture a lógica das pilhas com a do seu programa. crie seu programa principal a partir de uma série de eventos. No seu caso não são muitos: chega um pedido, distribui pedidos, registra entregas, abre loja, fecha loja Não, empilhar ou desempilhar coisas não faz parte do loop de seu programa: só as regras do negócio. . Pode usar uma letra para cada serviço e um loop simples.
-
Olá vocês tem uma solução funcionando ou quase então não há porque não mostrar outra possibilidade, eu acho. Como eu disse, é mais simples partir dos possíveis números e não dos números fornecidos na execução: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { int N; // o total de numeros int numeros[101]; // os possiveis numeros int maior_frequencia = INT_MIN; // o resultado int i, v; // auxiliares if (scanf("%d", &N) != 1) return -1; // nao leu N if (N < 1 || N > 1000000) return -2; // N invalido for (int i = 0; i <= 100; i += 1) numeros[i] = 0; // prepara o vetor for (i = 1; i <= N; i += 1) { // le um cara e marca if (scanf("%d", &v) != 1) return -3; // nao leu algum if (v < 0 || v > 100) return -4; // nao esta entre 0 e 100 numeros[v] = numeros[v] + 1; if (numeros[v] > maior_frequencia) maior_frequencia = numeros[v]; }; // for // terminou: for (i = 0; i <= 100; i += 1) { if (numeros[i] == maior_frequencia) { printf("%d\n%d", i, maior_frequencia); return 0; // so isso }; // if }; // for }; // main() Esse é o trecho importante if (scanf("%d", &v) != 1) return -3; // nao leu algum if (v < 0 || v > 100) return -4; // nao esta entre 0 e 100 numeros[v] = numeros[v] + 1; if (numeros[v] > maior_frequencia) maior_frequencia = numeros[v]; Só isso. Ao final maior_frequencia vai ter o valor esperado, porque começou em INT_MIN e basta procurar no vetor numeros[] o primeiro item que tem esse número de ocorrências
-
Olá @devair1010 é certo o que você disse sobre os vetores e tal, mas alocar um vetor ou 3 de alguns megabytes de memória não é nada assim importante. Postei aqui um programa outro dia com uma função que mostra quanto pode alocar aproximadamente de memória em um dado momento e mesmo para um computador modesto os valores são bem maores que isso. Imagine que alocar até uns 25% da memória de sua máquina não deve ser nada preocupante. Num computador com 2GB de RAM, até uns 512mb eu não me preocuparia. Teste. Claro, quando esse programa vai rodar o dia todo, ou tem outras coisas importantes rodando na máquina é saudável se preocupar Em seu programa, o que pretendia fazer com o vetor m[]? Classificar o vetor não é necessário. Não está no enunciado. E se o aluno perder metade do tempo fazendo isso pode comprometer os prazos a toa. Por outro lado, ao classificar durante a inserção não há razão para usar coisas como bubble sort ou quicksort ou heapsort ou xyzSort. Como você está inserindo os valores a partir do vetor vazio, apenas insira já na posição correta. Sim, seria como o insertion sort, mas bem menos: comece do fim do vetor e abra espaço para o novo na posição final. Muito mais simples de programar e faz o número mínimo de comparações sempre. POR OUTRO LADO, não precisa de vetor nenhum... @Eduardo_Braz @devair1010 Está certo que pode ter um milhão de números, podiam ser 10 milhões, é só uma pegadinha. Usem um vetor de 101 posições apenas. E um int para o resultado. Iniciem todas as posições com -1 e marquem os números conforme vão aparecendo... Note que até a questão do menor em caso de empate já está resolvida: o primeiro índice, já que estão naturalmente na ordem... Imagine que entraram um milhão de itens, metade zero e metade um. Ao final do programa o vetor vai ter vetor[0] = 500 000 vetor[1] = 500 000 vetor[2] = -1 ... vetor[100] = -1 Ao ler os valores você obviamente vai mantendo registro do mais frequente. Então ao ler o último sabe que o mais frequente apareceu meio milhão de vezes. Como o vetor tem os números de frequência basta achar o primeiro que tenha essa frequência que será o menor, certo? Nesse caso 0.
-
C++ estruturas de repetição linguagem de programação em c
arfneto respondeu ao tópico de isaias lucas em C/C#/C++
Em relação ao seu programa, imagine a entrada -50, -49, -48, ... -1 O menor? -50, o maior? -1. E seu programa vai dizer o que? Para isso existem as constantes INT_MAX e INT_MIN com os conteúdos óbvios: qualquer int é MAIOR que INT_MIN e menor que INT_MAX Em relação ao "problema" seguinte, você postou uma folha com este e mais 13 exercícios, e o código em um arquivo comprimido. Não estranhe não ter muitas respostas. Tem pessoas que respondem eventuais questões aqui no tempo livre e claro vão optar por questões que tenham chance de ajudar mais gente, tenham um tópico definido e de fato relacionado ao problema porque assim outros com dúvidas similares vão acabar lendo isso, e assim multiplica o alcance da resposta. Não se esqueça que uma pesquisa com tópico similar pode trazer um aluno direto para o post a partir de uma pesquisa no Google ou no Bing não impliquem em deixar o forum e fazer downloads de programas e tal. -
A utilidade de cada coisa da struct é definida pela lógica do programa. No caso uma letra e um valor inteiro. Os parâmetros de check estão declarados int check(char sym[9],char ch,int count); Então ao chamar check você fornece um vetor com 9 char, um outro char e um inteiro, e recebe de volta um inteiro Em seu programa Aparentemente check() retorna 1 se ch está no vetor symbol em certas posições ou se não está mas count vale 8....
-
C++ estruturas de repetição linguagem de programação em c
arfneto respondeu ao tópico de isaias lucas em C/C#/C++
Olá! Talvez deva postar cada problema em um novo tópico... Se for simplesmente acrescentando problemas a um tópico antigo vai ser mais difícil conseguir ajuda. Usar um título condizente com cada problema também vai aumentar suas chances... -
Em C strings são do tipo char* e não char e assim a declaração normal desses vetores seria char* vetorA[5]; char* vetorB[5]; char* lado_a_lado[5][2]; Considerando a garantia de que o tamanho máximo de cada nome é 10 você pode reservar 10+1 bytes para armazenar cada nome e assim usar char e não precisar alocar memória para as strings. Tome o cuidado de garantir a existência de um null, \0 ao final de cada string. Aí poderia usar char* vetorA[5][11]; char* vetorB[5][11]; char* lado_a_lado[5][2][11];
-
Mas o que fez na parte do caminho antes de se perder?
-
C Compartilhamento de arquivos entre 3 Pcs
arfneto respondeu ao tópico de wagner_barbosa94 em C/C#/C++
Olá Programas não compartilham arquivos, dispositivos ou pastas. Isso é função do sistema operacional. Use as funções do sistema operacional e compartilhe alguma pasta para esse propósito e configure seus programas para usarem tais pastas. Por outro lado os sistemas expõem funções de compartilhamento que podem ser usadas para gerenciar o compartilhamento de pastas no sistema, dependendo dos privilégios de sua conta, a partir de seus programas em C ou outras linguagens. No Unix/Linux/MACOS pode usar Samba que é compatível com Windows e bem rápido... -
Matriz ou vetor não acrescentam nada de especial. Trata-se apenas de uma variável que digamos acontece um certo número de vezes então você usa o mesmo com o mesmo nome e você numera as ocorrências chamando o número da ocorrência de índice. Só isso. Acho que a coisa mais frequente que a gente tem disso no dia a dia é uma tabela, como uma nota fiscal, onde você tem algo como item, quantidade, descrição / preço unitário, preço total. E cada linha é um produto. Então no programa você tem uma linha por produto e nesse caso por exemplo 5 campos então você poderia declarar tipo nota_fiscal[10][5]; indicando por exemplo 5 colunas e dez linhas. E na linha 2 estaria então seu terceiro produto e em cada coluna estariam os campos. Nesse exemplo a última coluna é o preço total , então a quinta coluna da segunda linha teria o preço total do segundo produto, e você escreveria nota_fiscal[2][4] = nota_fiscal[2][1] * nota_fiscal[2][3]; para indicar que o preço total do produto é o preço unitário multiplicado pela quantidade. Só isso. Quanto faz sentido você pode usar 1, 2,3 ou mais índices. Nada muda na lógica. De volta ao seu problema Seu caso é muito simples e na verdade não precisa usar nada "novo": use dois vetores, um com o número e outro com o número de ocorrências e pronto... E usa o óbvio número da linha para associar o valor com o número de ocorrências.
-
O mais simples? Mas que serviço é esse? Tem um nome? usa os serviços do sistema para criar uma conexão tipo IPSEC ou o que? qual o o mecanismo para por isso no ar ou tirar? Você não está explicando. Tem uma API? Tem scripts de ativação? qual a plataforma? Imagino que pretendia escrever "burocracia" e "conexão". O Team Viewer pode ser configurado para conexão automática e opcionalmente desligar a tela do computador que está sendo acessado. E tem um módulo para transferência de arquivos embutido. E tem uma coisa que eu uso muito e que pode ser útil, não sei o sei o seu cenário, pode-se usar o TeamViewer para ligar uma máquina que está desligada. Bem razoável quando o funcionário vai embora e é preciso aplicar uma atualização na máquina. Veja no programa as opcões para WakeOnLan. Desde que ele não tenha desligado da tomada, claro... Não é assim. VNC não precisa de rede local, apenas de uma porta e que pode ser qualquer uma. Então você precisa apenas configurar rotas de encaminhamento nos roteadores e pode usar qualquer cliente VNC. Entendo. MAs não precisa de um programa. Pode escrever um script que testa a conectividade por qualquer meio e ativa a VPN se antes de iniciar a transferência de arquivos. VPN sem configuração LogmeIn Hamachi --- https://www.vpn.net/ --- é uma VPN grátis para até 5 nós que é bem flexível e não tem nem configuração. É muito esperto e já usei para muitas coisas parecidas. Na versão grátis não roda como serviço mas dá pra improvisar algo nos moldes do que expliquei antes. Uma VPN fácil de controlar e mais versátil que o Hamachi LogmeIN é a clássica OpenVPN --- veja em https://openvpn.net/vpn-server-resources/ --- que tem uma versão também grátis e já usei para coisas assim. É bem fácil de controlar via scripts ou mesmo via programa.
-
Pois é. Foi o que eu disse. SE a VPN expõe uma API --- na forma de uma bliblioteca de funções em C por exemplo --- ou uma série de scripts como eu disse, tudo que voê precisa é usar sockets em seu programa paa verificar conectividade com alguém do outro lado da VPN, usar um timer para verificar a cnexão, e usar uma função para se conectar novamente. Na verdade nem precisa de tudo isso porque os sistemas operacionais tem agendas de execução e você pode lá executar qualquer coisa a cada dois minutos, usando a agenda do windows ou o cron no linux. Também não precisa de sockets e TCP/IP em seu programa C++ porque pode executar um script ou o seu programa a cada a cada x minutos e usar ferramentas como ping para verificar conectividade E como eu disse se a VPN roda como serviço no windows -- daemon no Unix/Linux/Mac -- tem uma lógica que pode ativar sózinha os serviços, porque é uma necessidade comum... Não tenho tempo agora de ver no Linux porque tenho uma regra minha para postar no forum --- só uma máquina, só um sistema, só um compilador, sem WSL, só essas linguagens e o outro forum de redes e tal --- mas veja esse formulário do Windows, que é igualzinho desde décadas atrás, que você acessa por exemplo escrevendo Window+R em seu terminal, depois services.msc e enter, e selecionando o serviço de precisa monitorar: Claro que escrever um programa em C++ que roda como serviço ou daemon é um caminho mais elegante, mas pode não precisar de nada disso. Mesmo um script de poucas linhas já faria o trabalho. Também não precisa de C++ a menos que vá usar uma biblioteca em C++. Não parece haver razão para classes complexas, monitorar várias redes, interface gráfica sofisticada ou algo assim. Conclusão: qual a VPN que usa? Qual o método de conexão? o que fica no ar é um serviço, um daemon ou programa qualquer? adicionado 3 minutos depois Bem, não custa nada mostrar um exemplo para windows, direto da fonte que lista todos os processos que estão rodando em sua máquina. Em C++. #include <windows.h> #include <stdio.h> #include <tchar.h> #include <psapi.h> // To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS // and compile with -DPSAPI_VERSION=1 void PrintProcessNameAndID( DWORD processID ) { TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process name. if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) ); } } // Print the process name and identifier. _tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID ); // Release the handle to the process. CloseHandle( hProcess ); } int main( void ) { // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) { return 1; } // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name and process identifier for each process. for ( i = 0; i < cProcesses; i++ ) { if( aProcesses[i] != 0 ) { PrintProcessNameAndID( aProcesses[i] ); } } return 0; }
-
Não sei o que tenta fazer com esses bits, já que não postou uma definição de seu programa com o código, mas entenda que trocar stdio.h por iostream e trocar printf() por cout e scanf() por cin não é exatamente transformar C em C++ getline() retorna uma referência para istream e o valor lido em str. E lê até encontrar delim, um char, ou um '\n'. Veja a declaração: Em seu programa bit é do tipo char*, e bit --- que é a mesma coisa que *(bit + i) --- é um char, para qualquer i. Isso quer dizer que você tenta gravar uma string em um char. E não vai rolar. O parâmetro delim é opcional em C++. Isso se chama function overloading e quer dizer que você pode ter várias funções com o mesmo nome desde que tenham algum parâmetro diferente. O compilador se vira para chamar a certa. Em C++ string é uma classe e você pode comparar diretamente variáveis desse tipo. Não precisa de funções porque o operador = foi "treinado" para essa classe strcmp() está disponível, bem como toda a família dessas funções, mas operam com char* e em casos de programas de iniciação raramente se espera em um programa em C++ ver essas funções. E é bom dizer que usar strings é muito muito mais fácil... Diga o que está tentando fazer com esse programa e podemos escrever um outro exemplo em C++, ou um em C e outro em C++ pra ajudar a ver as possíveis diferenças. adicionado 26 minutos depois Cansei de tentar corrigir isso no site. Por favor imagine que eu tenha digitado certo desde o início bit [ i ] --- que é a mesma coisa que *(bit+i) --- é um char, devido ao * off-topic: às vezes aqui demora mais para formatar o texto do que para escrever um programa de teste para o tópico podiam aceitar um documento formatado talvez, ou caprichar mais nessa ferramenta de edição. Por 4 vezes digitei isso e a alteração sumiu adicionado 29 minutos depois Hum..... sumiu de novo. Ao que parece o código do site na edição não entende aquela linha se eu digitar como está no código mas como texto. E foi preciso inserir espaços entre os colchetes e o índice ou o texto sumia de novo :D:D:D
-
Nem tentou? Ou escreveu algo já? Recomendo usar algo como o Office Lens para capturar documentos. Esses programas corrigem a geometria para não ficar tudo torto, focam o texto para não sair distorcido, enquadram o papel para não saírem seus dedos na foto e até fazem upload automático de suas imagens... E você só precisa "fotografar". Veja essa foto de uma daquelas etiquetas de identificação que vem grudadas no verso de switches e modems e tal. O software alinha a imagem --- ok está um pouco torto --- para ficar plano e corrige o ângulo. E salva no OneNote ou em outros lugares, sozinho e você já vê no computador e arrasta para o post do forum e pronto: daria para ler o enunciado sem esforço BIS devem ser consumidos aos pares, a julgar pelo nome. E talvez deva aumentar a quantidade. Software sob encomenda sai caro. E nesse caso nem dá pra ler a especificação direito. Paz
-
E? acho que sabe que é pouca informação para alguém ajudar... O software que usa para a VPN seria provido como? Se a VPN expõe uma API para controle e monitoramento você só precisa usar as funções certas e se identificar e monitorar o serviço. Se roda como um serviço, via cron ou no windows, você precisa ter uma conta com privilégios suficientes para acessar essas estruturas e controlar os serviços usando os mecanismos do sistema operacional. Se roda via coisas como scripts em /etc/inetd ou algo assim você precisa estudar esses scripts de ativação e usar coisas como systemctl para consultar o serviço e eventualmente escrever outros scripts e colocar nos lugares certos... Acho que precisa explicar melhor o cenário, plataformas, versões, fornecedor da VPN, cosas assim. E talvez o suporte do fornecedor da VPN possa ser mais útil.
-
C Como poderia fazer esse programa com funçoes
arfneto respondeu ao tópico de Julia Leite em C/C#/C++
O que tem inicialmente em seu arquivo? tem um formato de registro? vai alocar uma estrutura a partir do contéudo do arquivo? Tem uma especificação? -
C Como poderia fazer esse programa com funçoes
arfneto respondeu ao tópico de Julia Leite em C/C#/C++
Olá! Inicia() Termina() Pintar() Salvar() seriam escolhas comuns ao ler seu código -
Olá for(j = n; j > n; j--) { if(k >= vetor[j]) { total++; } } Que pretendia escrever? Uma coisa j que é igual a uma outra coisa n não será maior que a outra, e não vai dar tempo de diminuir... Acho que já te disse para não misturar coisas e ir aos poucos em seus programas. Ninguém vai saber se você escreveu seu código em dez pequenos programas depois que você juntar todas. Seu problema está em extrair a contagem dos maiores, no momento? Que seja. Veja esse programa int main(int argc, char** argv) { int vetor[1000] = { 1,2,3,4,5,6,7,8,9,10 }; int N = 10; int K = 6; int maiores = 0; for (int i = 0; i < N; i = i + 1) { if (vetor[i] >= K) maiores = maiores + 1; }; // for printf("%d dos %d sao maiores ou iguais a K=%d\n", maiores, N, K); return 0; } Que mostra isso 5 dos 10 sao maiores ou iguais a K=6 Já usando os nomes de variáveis que estão no enunciado e no seu programa. Entende a diferença? Sem scanf() sem ler do teclado, sem mudar o cursor pela tela, sem mudar a linguagem, nada. Só testa o seu caso e pronto. Depois você põe o resto. Programação defensiva
-
C Iniciante em C, algoritmo sem utilizar os Mods
arfneto respondeu ao tópico de Victor Hugo Barbosa Silva em C/C#/C++
@Herbertbahia Como seria isso? Fiquei curioso int CalDivisao(int dividendo, int divisor) { int resultado; resultado = dividendo / divisor; } int Calresto(int resto, int divisao) { resto = resto % divisao; } @Victor Hugo Barbosa Silva Você usou uma função logo acima no seu mesmo programa que usa os dois operadores que você não poderia usar... Acho que não vai ter sucesso com essa técnica com o seu instrutor. "algoritmo sem utilizar os Mods" seria então não usar o operador % ? Mas está certo de que pode usar subtração? Como @Mauro Britivaldo disse, afinal divisão é isso mesmo. E módulo também. Num primeiro momento pensei em pegar os valores como string e usar como se fosse no papel, apenas repetir aquele algoritmo do primário. Pensei em por na tela passo a passo e tal. Divertido seria, mas fiquei com preguiça. Postei algo assim aqui dias atrás para calcular o MMC de 3 números, seria algo igual. Veja lá se se interessou. Postei o programa inteiro. Não tenho o post agora, mas é só pesquisar aqui por MMC Mas vou deixar dois outros palpites Caso 1: usando simples recursão Umas 5 linhas cada um, porque são no fundo apenas subtrações sequenciais Divisão int x_div_r(int a, int b) { if (b > a) return 0; return 1 + x_div_r(a - b, b); }; // x_div_r() Módulo int x_mod_r(int a, int b) { if (a < b) return a; return x_mod_r(a-b, b); }; // x_mod_r() Caso 2: usando apenas a subtração Não muda muito porque é só uma sequência de subtrações até um limite Divisão int x_div_s(int a, int b) { int n = 0; while (a >= b) { a = a - b, n = n + 1; }; return n; }; // x_div_s() Módulo int x_mod_s(int a, int b) { while (a >= b) a = a - b; return a; }; // x_mod_s() E seguindo o enunciado ao pé da letra essa função algoritmo int algoritmo(int dividendo, int divisor); nesse programa int main(int argc, char** argv) { algoritmo(182, 30); algoritmo(18, 3); return 0; } mostra [A = Bx + c] Para A = 182 e B = 30, 182 = 6 * 30 + 2 Quociente = 6, Resto = 2 [A = Bx + c] Para A = 18 e B = 3, 18 = 6 * 3 + 0 Quociente = 6, Resto = 0 Eis a função, usando recursão -- se preferir usar subtração troque os _r por _s para chamar as outras duas funções como está acima int algoritmo(int dividendo, int divisor) { int quociente = x_div_r(dividendo, divisor); int resto = x_mod_r(dividendo, divisor); printf("\n[A = Bx + c] Para A = %d e B = %d, %d = %d * %d + %d Quociente = %d, Resto = %d\n", dividendo, divisor, dividendo, quociente, divisor, resto, quociente, resto); } Eis o programa de teste todo #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int algoritmo(int dividendo, int divisor); int x_div_r(int, int); // retorna a / b recursao int x_div_s(int, int); // retorna a / b subtracao int x_mod_r(int, int); // return a % b recursao int x_mod_s(int, int); // return a % b subtracao int main(int argc, char** argv) { algoritmo(182, 30); algoritmo(18, 3); return 0; } int algoritmo(int dividendo, int divisor) { int quociente = x_div_r(dividendo, divisor); int resto = x_mod_r(dividendo, divisor); printf("\n[A = Bx + c] Para A = %d e B = %d, %d = %d * %d + %d Quociente = %d, Resto = %d\n", dividendo, divisor, dividendo, quociente, divisor, resto, quociente, resto); } int x_div_r(int a, int b) { if (b > a) return 0; return 1 + x_div_r(a - b, b); }; // x_div_r() int x_div_s(int a, int b) { int n = 0; while (a >= b) { a = a - b, n = n + 1; }; return n; }; // x_div_s() int x_mod_r(int a, int b) { if (a < b) return a; return x_mod_r(a-b, b); }; // x_mod_r() int x_mod_s(int a, int b) { while (a >= b) a = a - b; return a; }; // x_mod_s() Espero que ajude
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