Megválaszolatlan hozzászólások | Aktív témák Pontos idő: kedd okt. 08, 2024 23:26



Hozzászólás a témához  [ 3 hozzászólás ] 
Műveletek nagy decimális számokkal 
Szerző Üzenet
ezüst tag

Csatlakozott: pén. dec. 10, 2004 23:26
Hozzászólások: 17
Tartózkodási hely: Szeged
Hozzászólás 
SZTE TTK? :)


vas. dec. 19, 2004 21:19
Profil Privát üzenet küldése Honlap
ezüst tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 17
Hozzászólás 
hátha ez segít valamennyit:
http://izzo.inf.elte.hu/~iszcs/segedany/infmat.htm


csüt. dec. 16, 2004 10:08
Profil Privát üzenet küldése
vas-tag

Csatlakozott: hétf. dec. 13, 2004 19:02
Hozzászólások: 1
Tartózkodási hely: Szeged
Hozzászólás Műveletek nagy decimális számokkal
Hello! Nekem is a nagy decimális számokkal való műveletvégzés a problémám c-ben!

A program le is fordul Linux alatt GCC-vel, de nem tudom rendesen lefuttatni!

Itt a teljes forráskód is, meg 1-1 példa input, output!
Ha tudtok valami megoldást akkor légyszi segítsetek! nagyon fontos lenne! Még csak most kezdtem programozással foglalkozni és nem nagyon vágom a témát! Előre is köszi!

Péda input:

123456789123456789123456789
-
+123456789123456789123456780
-
-99999999999999999999
+
2
=
példa output:
100000000000000000010

Kód:
#include <string.h>
#include <stdio.h>
#include <math.h>

int main ()
{
char s1[255],s2[255],muv[1],elo[1];
FILE *inp,*out;
int i,c,a,b;

 inp=fopen("be.txt","r"); /*A be.txt file megnyitása olvasásra */
 out=fopen("ki.txt","w"); /*A ki.txt file megnyitása írásra */
  if (inp==NULL)
  {
  fprintf(stderr,"be.txt nem létezik!\n"); getchar(); /*Amennyiben be.txt nem létezik, hibaüzenetet küld a stderr-re (képernyő) */
  }
  else
    {
    fscanf(inp,"%s\n",&s1); /*Első decimális szám beolvasása */
    fscanf(inp,"%s\n",&muv); /*Első műveleti jel beolvasása */
    a=strlen(s1);  /*Első decimális szám hosszának meghatározása */
    /*Előjelek vizsgálata*/
      if ((s1[0] >='0' && s1[0]<='9') || (s1[0]=='+')) /*Amennyiben a szám elő karaktere 0 és 9 közé esik, vagy a + jel, a szám pozitív,
      egyéb esetekben negatív */
      {
      elo[0]='+';
      }
        else
        {
          if (s1[0]=='-')
          {
          elo[0]='-';
  s1[0]='0'; /*Amennyiben az első karakter a - jel volt, azt 0-ra változtatjuk */
          }
        }   
   
    }
   
   
   
    while (muv[0]!='=') /*Addig ismétlődik a ciklus, amíg nem az = jelet kapjuk az inputról */
    {
      fscanf(inp,"%s\n",&s2); /*A következő decimális számjegy beolvasása */
      b=strlen(s2);    /*A decimális számjegy hosszának meghatározása */
    /*Előjelek vizsgálata*/

      if ((s2[0]>='0' && s2[0]<='9') || (s2[0]=='+'))
      {
      elo[0]='+';
      }
        else
        {;
          if (s2[0]=='-')
          {
          elo[0]='-';
  s2[0]='0'; /*Amennyiben az első karakter a - jel volt, azt 0-ra változtatjuk */
          }
        }
         
    /*Összeadási művelet leírása*/
    if ((muv[0]=='+' && elo[0]=='+') || (muv[0]=='-' && elo[0]=='-')) /*Minden olyan esetben összeadást végzünk, amikor az előjel és a
    műveleti jel megegyezik */
      {
      for (i=0; (i=a)||(i=b); i++)
        {
s1[a-i]=s1[a-i]+s2[b-i]+c; /*A számok helyiértékes összeadása, kezdve az egyes helyiértéktől egészen a rövidebb szám legfelső
helyiértékéig. Amenniyben két szám összege nagyobb mint 9, úgy a c változót 1-re állítjuk és hozzadjuk a következő számpárhoz */
if ((s1[a-i]+s2[b-i])+c>9)
  {
  c=1;
  }
  else
  c=0;
        }
      }
      /*kivonási művelet leírása*/
    if ((muv[0]=='+' && elo[0]=='-') || (muv[0]=='-' && elo[0]=='+')) /*Minden olyan esetben kivonást végzünk, amikor az előjel és műveleti
    jel letérnek egymástól */
      {
      for (i=0;(i=a)||(i=b);i++)
        {
        if (s1[i]<s2[i])
          {
  s1[a-i]=s1[a-i]+10-s2[b-i];
  s2[b-i-1]++;
          }
  else
  s1[a-i]=s1[a-i]-s2[b-i];
 
  }
}   
    fscanf(inp,"%s\n",&muv); /*A következő műveleti jel beolvasása */
    }
    for (i=0; i=255; i++) /*Kiírja a karakterekat az outputra egyenként egymás után*/
      {
      fprintf(out,"%c",s1[i]);
      }
    fflush(inp); /*Memória felszabadítása és fájlok lezárása */
    fflush(out);
    fclose(inp);
    fclose(out);
   
}


hétf. dec. 13, 2004 19:08
Profil Privát üzenet küldése
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 3 hozzászólás ] 

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség