Logo Hardware.com.br
eclipse29
eclipse29 Novo Membro Registrado
4 Mensagens 0 Curtidas
#3 Por eclipse29
25/03/2018 - 11:55
esquiloesperto disse:
Mostre o que já fez.
Pode ser o código, fluxograma ou algoritmo

Absolutamente nada, eu realmente nem sei por onde começar. Nesse questão pedia que a entrada fosse duas cadeias de caracteres com algorismos romanos e a saía fosse a soma e a diferença dos dois dado em romano, oque eu consegui fazer:
int n1,n2,n3,n4,num1,num2,soma,sub;
char rom1[1001],rom2[1001];
main(){
printf("Digite dois numeros em algarismo romano:"
scanf("%s%s",&rom1,&rom2);

if ((num1<=1000)&&(num1>=1)&&(num2<=1000)&&(num2<=1)){
soma=num1+num2;
if (num1>num2)
sub=num1-num2;
else
sub=num2-num1;
n1=soma%10;
n2=(soma/10)%10;
n3=(soma/100)%10;
n4=(soma/1000)%10;
printf("O resultado da soma e:&quot;
(n4==0)?n4==1)?printf("M&quotn4==2)rintf("MM&quotn4==3)?printf("MMM&quotn4==4)?printf("MMMM&quotn4==5)?printf("|V|&quotn4==6)?printf("|VI|&quotn4==7)?printf("|VII|&quotn4==8)?printf("|VIII|&quotrintf("|IX|&quot;
(n3==0)?n3==1)?printf("C&quotn3==2)?printf("CC&quotn3==3)?printf("CCC&quotn3==4)?printf("CD&quotn3==5)?printf("D&quotn3==6)?printf("DC&quotn3==7)?printf("DCC&quotn3==8)?printf("DCCC&quotrintf("CM&quot;
(n2==0)?n2==1)?printf("X&quotn2==2)?printf("XX&quotn2==3)?printf("XXX&quotn2==4)?printf("XL&quotn2==5)?printf("L&quotn2==6)?printf("LX&quotn2==7)?printf("LXX&quotn2==8)?printf("LXXX&quotrintf("XC&quot;
(n1==0)?n1==1)?printf("I&quotn1==2)?printf("II&quotn1==3)?printf("III&quotn1==4)?printf("IV&quotn1==5)?printf("V&quotn1==6)?printf("VI&quotn1==7)?printf("VII&quotn1==8)?printf("VIII&quotrintf("IX&quot;
n1=0;
n2=0;
n3=0;
n4=0;
n1=sub%10;
n2=(sub/10)%10;
n3=(sub/100)%10;
n4=(sub/1000)%10;
printf(",e o resultado da subtracao e: &quot;
(n4==0)?n4==1)?printf("M&quotn4==2)?printf("MM&quotn4==3)?printf("MMM&quotn4==4)?printf("MMMM&quotn4==5)?printf("|V|&quotn4==6)?printf("|VI|&quotn4==7)?printf("|VII|&quotn4==8)?printf("|VIII|&quotrintf("|IX|&quot;
(n3==0)?n3==1)?printf("C&quotn3==2)?printf("CC&quotn3==3)?printf("CCC&quotn3==4)?printf("CD&quotn3==5)?printf("D&quotn3==6)?printf("DC&quotn3==7)?printf("DCC&quotn3==8)?printf("DCCC&quotrintf("CM&quot;
(n2==0)?n2==1)?printf("X&quotn2==2)?printf("XX&quotn2==3)?printf("XXX&quotn2==4)?printf("XL&quotn2==5)?printf("L&quotn2==6)?printf("LX&quotn2==7)?printf("LXX&quotn2==8)?printf("LXXX&quotrintf("XC&quot;
(n1==0)?n1==1)?printf("I&quotn1==2)?printf("II&quotn1==3)?printf("III&quotn1==4)?printf("IV&quotn1==5)?printf("V&quotn1==6)?printf("VI&quotn1==7)?printf("VII&quotn1==8)?printf("VIII&quotrintf("IX&quot;
}
else
printf("ERRO! Numero(s) maiore(s) que 1000 ou inferiore(s) a 1, digite novamente&quot;
}


mas a conversão do rom1 e rom2 para num1 num2, não
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#4 Por esquiloesper...
25/03/2018 - 14:34
Então explique melhor o que precisa ser feito, porque no início do tópico nada foi dito sobre "soma" ou sobre (pares de) números romanos e arábicos.
Essa mudança só trouxe dúvidas para mim, e acredito que para outros leitores também.

Para facilitar a pesquisa do fórum, edite o título e o conteúdo da primeira postagem se o que na verdade precisa tiver relação com o código da segunda mensagem.

A atuação dos algarismos romanos funciona exatamente igual à arábica, ou seja, elas são uma cadeia numéria de somas sucessivas. O texto foi grifado a fim de servir como um alerta para que você procure aplicar a lógica ao invés do uso frenético de comparações "If/Else". A lógica produz códigos muito mais eficientes e rotineiramente menores.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
eclipse29
eclipse29 Novo Membro Registrado
4 Mensagens 0 Curtidas
#5 Por eclipse29
25/03/2018 - 15:45
a minha dúvida não é com a soma eu realmente só quero saber como passar numeros romanos de uma cadeia de carateres para uma variavel numerica int. Todo o resto que eu puz ali na minha resposta eu sei me virar e foi especificado pelo meu professor para ser uma transformação char->int->char. Eu sou iniciante em c++ isso é para um trabalho de colégio e o meu professor não avançou em lógica. O objetivo desse trabalho, segundo ele, é ter várias linhas de ifs e elses mesmo. Não peço que ninguem faça um trabalho maçante desses, já que esse é meu trabalho, só quero entender a lógica por trás.
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#6 Por esquiloesper...
25/03/2018 - 16:36
Ok. Entendido.

Antes de começar revise o "tamanho" das suas 'strings'. Afinal, um número com 1000 casas decimais nem é contemplado pela arquitetura por ser enorme.
Já que utilizou "int", saiba que o maior número possível nesta faixa ocupa apenas 10 casas decimais. E ainda assim, ele jamais deverá ser maior que 2.147.483.647 (com sinal) ou maior que 4.294.967.295 (sem sinal): Saber mais.

Além do que, o maior número 'literal' em algarismos romanos ocupa apenas 9 casas: MMMCMXCIX ou 3999.
Valores maiores recebem uma barra superior, que é utilizada para a representação de milhares, milhares de milhares, e etc... Saber mais.

Isto posto, vou lhe mostrar o "caminho das pedras", que é bem curto. Tente evoluir aplicando nele o seu melhor. Combinado?
  1. Crie dois vetores  {rom1} e {num1} que fazem correspondência entre romano->arábico (vide tabela + regras)
  2. Entre com o numeral em algarismos romanos {rom1}
  3. Percorra o numeral {rom1}, inserindo o valor arábico correspondente na mesma posição de {num1}
  4. Por fim, percorra {num1}, observando:

   SE:  'final da string': somar o último item de {num1}
   SENÃO:
     SEnum1[x] <= num1[x+1] :somar num1[x]
     SENÃO  :subtrair num1[x][/li]

Pronto.Neste momento a "soma" em arábico corresponde ao valor em romanos de {rom1}.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal