Soma de números através de strings

Publicado por Perfil removido 20/06/2007

[ Hits: 9.581 ]

Download questao9.c




Este programa lê duas sequências de números de 0 a 9, e executa uma soma destas sequências, possibilitando a impressão de um resultado maior do que o máximo suportado por um tipo de variável.

Por exemplo, o tipo de dados short int suporta números até 32767, e o tipo de dados long int suporta números até 214783647.

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#define max 10000
main()
{
     char opcao;
     int n, m, var, vet1[max], vet2[max], vet_resultado[max], sobra, cont;

     /*Artificio para repetir o programa quando desejado pelo usuario.*/         
     while(opcao!='x')     
     { 
          /*Cabecalho do programa*/               
          printf("      %c------------------------------------------------------------------%c\n",218,191);
          printf("      |Programa que l%c duas sequ%cncias com n%cmeros de 0 e 9, e calcula   |\n",136,136,163);
          printf("      |uma outra sequ%cncia que representa a soma das outras duas.        |\n",136);
          printf("      %c------------------------------------------------------------------%c\n\n",192,217);
      
          /*Menu de opcoes*/ 
          printf("                                  %c--------%c\n",201,187);
          printf("                                  |  MENU  |\n");
          printf("                             %c----%c--------%c----%c\n",218,200,188,191);
          printf("                             |    (C)alcular    |\n");
          printf("                             %c------------------%c\n",204,185);
          printf("                             |      Fechar   (x)|\n");       
          printf("                             %c------------------%c\n",192,217);
          
          /*Lendo a opcao do menu*/   
          printf("\n\n    Escolha uma opcao: ");
          scanf("%c", &opcao);    
          
          /*Menu de opcoes*/
          switch(opcao)
          {
             case 'C':
             case 'c': 
          
                 /*Lendo o numero de elementos da primeira sequencia.*/
                 n=0;
                 while(n<=0){
                    printf("\n    Digite o numero de elementos da primeira sequencia: ");
                    scanf("%d",&n);
                    if(n<=0)
                        printf("\n    Numero invalido.\n");
                 }   
             
                 /*Lendo o numero de elementos da segunda sequencia.*/
                 m=0;
                 while(m<=0){
                    printf("    Digite o numero de elementos da segunda sequencia: ");
                    scanf("%d",&m);
                    if(m<=0)
                        printf("\nNumero invalido.\n");
                 }
          
                 if(n>=m)
                 {                          
                        /*Lendo os elementos da primeira sequencia.*/
                        printf("\n    Digite os valores da primeira sequencia.\n\n");
                        for(var=1; var<=n; var++){
                           vet1[var]=-1;
                           while(vet1[var]<0 || vet1[var]>9){
                                printf("    Digite o %d valor da primeira sequencia: ", var);
                                scanf("%d",&vet1[var]);
                                if(vet1[var]<0 || vet1[var]>9)
                                     printf("    Valor invalido.\n");
                           }
                        }
             
                        /*Lendo os elementos da segunda sequencia.*/
                        printf("\n    Digite os valores da segunda sequencia.\n\n");
                        cont=1;
                        for(var=n-m+1; var<=n; var++){
                           vet2[var]=-1;
                           while(vet2[var]<0 || vet2[var]>9){
                                printf("    Digite o %d valor da segunda sequencia: ", cont++);
                                scanf("%d",&vet2[var]);
                                if(vet2[var]<0 || vet2[var]>9){
                                     printf("    Valor invalido.\n");
                                     cont--;
                                }     
                           }
                       }
             
                       /*Completando os espaços vagos com zero para facilitar a soma.*/
                       for(var=0; var<=n-m; var++)
                           vet2[var]=0;
            
                 }
                 else if(m>n)
                 {      
                      /*Lendo os elementos da primeira sequencia.*/
                      printf("\n    Digite os valores da primeira sequencia.\n\n");
                      cont=1;
                      for(var=m-n+1; var<=m; var++){
                           vet2[var]=-1;                 
                           while(vet2[var]<0 || vet2[var]>9){
                                printf("    Digite o %d valor da primeira sequencia: ", cont++);
                                scanf("%d",&vet2[var]);
                                if(vet2[var]<0 || vet2[var]>9){
                                      printf("    Valor invalido.\n");
                                      cont--;
                                } 
                           }
                      }
             
                      /*Lendo os elementos da segunda sequencia.*/
                      printf("\n    Digite os valores da segunda sequencia.\n\n");
                      for(var=1; var<=m; var++){
                           vet1[var]=-1;
                           while(vet1[var]<0 || vet1[var]>9){
                                printf("    Digite o %d valor da segunda sequencia: ", var);
                                scanf("%d",&vet1[var]);
                                if(vet1[var]<0 || vet1[var]>9)
                                      printf("    Valor invalido.\n");
                           }
                      }
             
                      /*Completando os espaços vagos com zero para facilitar a soma.*/
                      for(var=0; var<=m-n; var++)
                           vet2[var]=0;
                 }
          
                 /*Artificio para ter um valor limite para o tamanho do vetor.*/
                 if(m>n)
                 n=m;   
         
                 /*Somando as sequencias.*/
                 sobra=0;
                 for(var=n; var>=0; var--){
                      vet_resultado[var]= vet1[var]+ vet2[var]+sobra; 
                      if(vet_resultado[var]>9){
                           sobra= vet_resultado[var]/10;     
                           vet_resultado[var]=vet_resultado[var]-10;
                      }else
                           sobra=0;
                 }
             
                 /*Imprimindo a soma das sequencias*/
                 printf("\n    A soma das sequencias e:\n    ");
                 if(vet_resultado[0]==0){
                    for(var=1; var<=n; var++)
                       printf("%d ", vet_resultado[var]);     
                 }else{
                    for(var=0; var<=n; var++)
                       printf("%d ", vet_resultado[var]);            
                 } 
             
             printf("\n\n    Concluido.");     
             printf("\n    Pressione qualquer tecla para voltar ao menu...");
             getch();
             system("cls");
             break;                   
             
             case 'X':
             case 'x': 
                 opcao='x';
             
             default:
                 system("cls");        
          }    
     }                     
}

Scripts recomendados

O comando SWITCH

Algoritmo de ordenação: Selection Sort

Crivo de Eratóstenes

De quantas maneiras pode-se preencher um tabuleiro de xadrez com dominós

Calculando Baskara


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts