Soma de números através de strings

Publicado por Perfil removido 20/06/2007

[ Hits: 9.682 ]

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

Linguagem C estruturada, parte 3 - Sistema Numérico Hexadecimal

Calculadora em C

Jogo da Velha (corrigido)

Introdução ao ncurses

Histograma - C++


  

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