Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Program za zbrajanje preko varijabli tiipa char
Author Message
danielvast Offline
Forumaš
***

Posts: 435
Joined: Dec 2009
Reputation: 22
Post: #1
Program za zbrajanje preko varijabli tiipa char
Ej pozdrav ljudi evo vec nekoliko dana pokusavam izvest zadatak koji će zbrajati dva broja ali tako da varijable koje koristimo budu tipa char ili string. Ako itko ima bilo kakvu ideju bio bih mu zahvalan pozz

"When all else fails, read the manual."
19-12-2009 08:43 PM
Find all posts by this user Quote this message in a reply
tutorial Offline
Redoviti posjetitelj
**

Posts: 181
Joined: Jan 2007
Reputation: 6
Post: #2
RE: Program za zbrajanje preko varijabli tiipa char
Što te točno muči? Jednostavno varijablama tipa char pridodaj numeričke vrijednosti, samo pazi da brojevi uvijek budu i intervalu [-128,127] jer će inače doći do preljeva i dobit ćeš nešto što ne očekuješ.

Ne znam koji jezik trebaš, ali evo banalnih primjera u C-u i C++-u.

Kôd za primjeru u C-u:

Code:
#include <stdio.h>

int main(){

    char a=3,b=5;
    
    printf("%d",a+b);
    
    return 0;
}

C++ primjer:

Code:
#include <stdio.h>
#include <iostream>
using namespace std;

int main (){

  char a=5,b=3;

  cout << a+b;
  
  return 0;
}
(This post was last modified: 19-12-2009 10:58 PM by tutorial.)
19-12-2009 10:56 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 435
Joined: Dec 2009
Reputation: 22
Post: #3
RE: Program za zbrajanje preko varijabli tiipa char
Ej hvala na odgovoru naravno nije bitno koji je jezik moze i paskal e ovako trekam napraviti program koji ce racunati fibbonaciev niz 1,1,2,3,5,8,13,21......
Ukoliko budem koristio varijable tipa int mogu ispisati 46 fibbonaciev broj ako koristim double ja mislim 72 ali ukoliko koristim varijable tipa char mogu puno vise.
Znaci treba ispisati broj a ne slovo.
Znači islo bi nekako ovako:
Code:
#include <iostream>
using namespace std;

int main(){
    char a,b,rez;
    cout << "Unesite a ";
    cin >> a;
    cout << "Unesite b ";
    cin >> b;
    rez=a+b-48;
    cout << "Rezultat je " << rez << endl;
    system("Pause");
    return 0;
}
Znači ovaj program radi u suštini ono sto mi treba ali javlja se problem kad zbrajam brojevo kao sto su 8 i 2 ili 4 i 6 znači radi ispod 10 ali meni treba vise npr ako zrlim zbrojiti 150 i 28 npr e tu mi je najveći problem u svakom slucaju hvala na pomoći!:-)

"When all else fails, read the manual."
19-12-2009 11:21 PM
Find all posts by this user Quote this message in a reply
tutorial Offline
Redoviti posjetitelj
**

Posts: 181
Joined: Jan 2007
Reputation: 6
Post: #4
RE: Program za zbrajanje preko varijabli tiipa char
Čini mi se da ili nisi pročitao ono što sam ti napisao o preljevu ili me nisi razumio. Najveći broj koji možeš koristiti u radu s varijablama tipa char jest 127, odnosno 255 ako se radi o tipu unsigned char. To bi značilo da ako brojeve spremaš u varijablu tipa char, možeš spremiti puno manji Fibbonacijev broj nego što bi mogao da koristiš int ili double. U konkretnome slučaju, najveći Fibbonacijev broj bio bi 89 (za slučaj da se radi o tipu signed char), odnosno 233 (za slučaj da se radi o tipu unsigned char).

Eh sad, zašto ti "ne radi" zbrajanje 150 + 28? Zato što tip podatka char može sadržavati samo 8 bitova. Znajući da se bit najveće težine koristi za predznak (0 - poz. broj, 1 - neg. broj), imaš samo 7 bitova na raspolaganju i najveći broj je 127. Možda će ti biti lakše vidjeti što se događa ako se brojevi pretvore u binarni zapis:

150 10010110 *
28 00011100
-------------
+ 10110010 **

*Broj 150 u ovome slučaju računalo doživljava kao negativan, pa to više nije 150, nego broj -106.
**Zbrajanjem se dobije negativan broj i to je -78.
20-12-2009 12:38 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 435
Joined: Dec 2009
Reputation: 22
Post: #5
Wink RE: Program za zbrajanje preko varijabli tiipa char
Razumjem sta si mi htio reći ali broj zapisujemo u obliku stringa znači brojevi moraju biti u intervalu od 48-57 evo da ne naklapam bezveze radio sam neki zadatak koji zbraja 2 broja preko polja pa vidi sta sam htio reći:
sorry na kod-u malo je izmješano c-a i c++-a
Code:
#include <iostream>
#include<string.h>
using namespace std;

int main(){
    char a[100],b[100],rez[100],uvj[100];
    int k=0,ost=0,l;
    printf("Unesite a ");
    gets(a);
    printf("Unesite b ");
    gets(b);
    int n=strlen(a);
    int m=strlen(b);
    while(n!=0)
    {
            n--;
            m--;
            if(m<0)
            {
                   b[m]='0';
            }
            if((a[n]+b[m]-48)>57)
            {
                                 rez[k]=(a[n]+b[m]-58+ost);
                                 ost=1;
            }
            else if(a[n]+b[m]-48>=48 && a[n]+b[m]-48<=57)
            {
                                 rez[k]=(a[n]+b[m]-48+ost);
                                 ost=0;
            }
            k++;
    }
    printf("Rezultat je ");
    while (k!=0)
    {
            k--;
            printf("%c",rez[k]);
    }
    printf("\n");
    system("Pause");
    return 0;
}
Ja sam nesto pokusavao preko polja mozda sam ja to zakomplicirao.
Naime zadatak nam je zadao profesor pa da ne ispane da sam ovdije dosao da mi uradite zadaću ovo nije zadaća nego nesto sto je on zadao pa da uradimo ako nas zanima. BTW velika hvala na pomoći!Palac-gore

"When all else fails, read the manual."
(This post was last modified: 20-12-2009 01:26 PM by danielvast.)
20-12-2009 12:55 PM
Find all posts by this user Quote this message in a reply
r0tring Offline
Redoviti posjetitelj
**

Posts: 230
Joined: Apr 2009
Reputation: 10
Post: #6
RE: Program za zbrajanje preko varijabli tiipa char
Ma imaš atoi naredbu.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main ()
{
  int x, y;
  char a [256], b [256];
  cout<<"Unesi prvi broj: ";
  fgets ( a, 256, stdin );
  cout<<"Unesi drugi broj: ";
  fgets ( b, 256, stdin );
  
  x = atoi (a);
  y = atoi (b);
  
  cout<<"\nZbir: "<<x+y<<endl;
  cout<<"Razlika: "<<x-y<<endl;
  cout<<"Proizvod: "<<x*y<<endl;
  cout<<"Kvadrat prvog: "<<x*x<<endl;
  cout<<"Kvadrat drugog: "<<y*y<<endl<<endl;
  
  system("pause");
  return 0;
}

Nadam se da je to to Palac-gore
20-12-2009 01:24 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 435
Joined: Dec 2009
Reputation: 22
Post: #7
RE: Program za zbrajanje preko varijabli tiipa char
scroler Wrote:Ma imaš atoi naredbu.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main ()
{
  int x, y;
  char a [256], b [256];
  cout<<"Unesi prvi broj: ";
  fgets ( a, 256, stdin );
  cout<<"Unesi drugi broj: ";
  fgets ( b, 256, stdin );
  
  x = atoi (a);
  y = atoi (b);
  
  cout<<"\nZbir: "<<x+y<<endl;
  cout<<"Razlika: "<<x-y<<endl;
  cout<<"Proizvod: "<<x*y<<endl;
  cout<<"Kvadrat prvog: "<<x*x<<endl;
  cout<<"Kvadrat drugog: "<<y*y<<endl<<endl;
  
  system("pause");
  return 0;
}

Nadam se da je to to Palac-gore

Hvala velika !!!!!!!!!!!
Ali ima jedan mali problem ta naredba pretvara u tip int koji mi opet ograničava fibbonaciev niz na 46!
Mozda je vrijeme da odustanem od ovog zadatka

"When all else fails, read the manual."
(This post was last modified: 20-12-2009 01:43 PM by danielvast.)
20-12-2009 01:36 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 435
Joined: Dec 2009
Reputation: 22
Post: #8
RE: Program za zbrajanje preko varijabli tiipa char
Evo zadatka koji sam uradio zahvaljujući scroler-u ali opet isti problem kao i sa int varijablama iz očitih razloga
Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main ()
{
  int x, y, n, rez;
  char a[256], b[256],c[256];
  cout<<"Unesi broj: ";
  cin >> n;
  a[0]='1';
  b[0]='1';
  c[0]='0';
  x = atoi (a);
  y = atoi (b);
  rez= atoi (c);
  if(n<=2)
          rez=1;
  else
  {
      for(int i=3;i<=n;i++)
      {
           rez=x+y;
           x=y;
           y=rez;
      }
  }
  cout << n << ". clan n niza je "<<rez <<endl;
  system("pause");
  return 0;
}
Hvala na pomoci

"When all else fails, read the manual."
(This post was last modified: 20-12-2009 03:11 PM by danielvast.)
20-12-2009 01:56 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)