Ir ao conteúdo

C++


tei17

Posts recomendados

Postado

Eu sou um estudante de engenharia e como vocês sabem engenheiros não sabem muito de c++.

Por isso peço a ajuda de vocês para me ajudarem a fazer este progrma.

Para evitar erros de digitação de seqüências de números de importância fundamental, como a matrícula de um aluno, o CPF do Imposto de Renda, o número de conta bancária, geralmente se adiciona ao número um dígito verificador. Por exemplo, o número de matrícula 811057 é usado como 8110573, onde 3 é o dígito verificador, calculado da seguinte maneira:

a) cada algarismo do número é multiplicado por um peso começando de 2 e crescendo de 1, da direita para a esquerda:

8 x 7, 1 x 6, 1 x 5, 0 x 4, 5 x 3, 7 x 2

somam-se as parcelas obtidas:

56 + 6 + 5 + 0 + 15 + 14 = 96

c) calcula-se o resto da divisão desta soma por 11:

96 dividido por 11 dá resto 8 (96 = 8 x 11 + 8)

d) subtrai-se de 11 o resto obtido:

11 - 8 = 3

e) se o valor encontrado for 10 ou 11, o dígito verificador será 0; nos outros casos, o dígito verificador é o próprio valor encontrado.

Trabalho

--------

Escrever um programa em C++ capaz de:

* Ler de um arquivo um conjunto de registros contendo, cada um, o número de uma conta bancária, o dígito verificador deste número, o saldo da conta e o nome do cliente.

* Utilizando o esquema de verificação acima, imprimir duas listas de clientes distintas no seguinte formato de saída:

CONTAS DE NUMERO CORRETO

413599-7 987,30 Débora Neuenschander

111118-6 121,99 Juliana Berg

. . .

CONTAS DE NUMERO ERRADO

765432-1 335,66 Júnia Faria

. . .

eu já conseguir fazer isso.

#include<conio.h>

#include<stdio.h>

#include<math.h>

#include<fstream.h>

#include<iostream.h>

void main ()

{

FILE*fp ;

int conta;

int digito;

float saldo;

char nome[80];

clrscr();

cout<<" conta saldo nome \n";

fp = fopen ("a:\\1\\teste.txt", "r");

if (!fp)

cout <<" Erro ao abrir arquivo ...";

while( !feof(fp))

{

fscanf(fp,"%i",&conta);

fscanf(fp,"%i",&digito);

fscanf(fp,"%f",&saldo);

fscanf(fp,"%s",&nome);

}

fclose(fp);

getch();

}

POR FAVOR. ME AJUDEM.

Postado

O código está ai, mas provavelmente eu poderia ter feito ele ser mais simples

#include <stdio.h>
#include <conio.h>
#include <list>

struct registro_t
{
char szConta[7];
int iDigito;
float flSaldo;
char szNome[128];
};

void main ( void )
{
FILE* pArquivo;
int iConta;
registro_t reg;

std::list<registro_t> ListaCorreto;
std::list<registro_t> ListaIncorreto;

pArquivo = fopen( "C:\\teste.txt", "r" );

if( pArquivo == NULL )
 printf( " Erro ao abrir arquivo ..." );

while( fscanf( pArquivo, "%i-%i %f %[^\n]", &iConta, &reg.iDigito, &reg.flSaldo, reg.szNome ) == 4 )
{
 itoa( iConta, reg.szConta, 10 );
 int iVerificador = 0.0f;

 for( int i = 0; i < 6; ++i )
  iVerificador += (7 - i) * (reg.szConta[i] - '0');

 iVerificador /= 11;

 int num = 11 - iVerificador;

 if( num >= 10 )
  num = 0;

 if( num == reg.iDigito )
  ListaCorreto.push_back( reg );
 else
  ListaIncorreto.push_back( reg );
}

fclose( pArquivo );
printf( "CONTAS DE NUMERO CORRETO:\n" );

std::list<registro_t>::iterator it = ListaCorreto.begin();
std::list<registro_t>::iterator end = ListaCorreto.end();

while( it != end )
{
 printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );
 ++it;
}

printf( "\nCONTAS DE NUMERO INCORRETO:\n" );

it = ListaIncorreto.begin();
end = ListaIncorreto.end();

while( it != end )
{
 printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );
 ++it;
}

getch();
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...