C/C++

Член од
14 јануари 2008
Мислења
4.251
Поени од реакции
909
0.О Неможи за индекс на низа да ти биде негативен број.
Среди го методот decimalenVoBinaren, а и погоре во маин имаш негативни индекси.

----
Ми текна што му била финтата со негативните индекси.
Еден број со децимали ќе го обележиме abc,kmn каде a, b, c, k, m, n се декадни цифри.
abc,kmn = a*10^2 + b*10^1 + c*10^0 + k*10^-1 + m*10^-2 + n*10^-3


Е сега истото, само со множител 2 на степен. И со позитивни и негативни.
Е сега ја преправив програмата со две низи, кај децималниот дел индексите се позитивни а означуваат негативен степен. (минус индекс)

Код:
#include <iostream>
#include <cmath>
using namespace std;

void celVoBinaren(int ,int [], int & );
void decimalenVoBinaren(float , int [] , int & );

int main(){

    float broj,decimalendel;
    int celdel, celDelBin[100], decDelBin[100], celDelBinLenght, decDelBinLenght, k;

    cout << "Vnesete proizvolen realen dekaden broj od tastatura: ";
    cin >> broj;
    celdel = (int)floor(broj);
    decimalendel=broj-(float)celdel;
    celVoBinaren(celdel, celDelBin, celDelBinLenght);
    decimalenVoBinaren(decimalendel,decDelBin, decDelBinLenght);

    cout<<"Vo binarna forma brojot e: ";
    for (k=celDelBinLenght-1; k>=0; k--)
        cout <<celDelBin[k];

    cout << '.';

    for(k=1; k < decDelBinLenght; k++)
        cout << decDelBin[k];

    cout << endl;
    return 0;

}

void celVoBinaren(int cel, int a[], int & len){

    len=0;
    do {
        a[len]=cel%2;
        cel=cel/2;
        len++;
    }
    while (cel>0);
}

void decimalenVoBinaren(float decimalen, int a[], int & len){
    
    len=1;
    if (decimalen > 1.0F)
        return;
    do{
        decimalen = 2 * decimalen;
        a[len]=(int)floor(decimalen);
        decimalen =decimalen-(float)a[len];
        len++;
    }
    while(decimalen>0.000001F); //preciznost do 6 decimalni cifri
        
}
Фала уште еднаш ! :cuc:
 

sickjoce

Ненормален
Член од
30 јуни 2007
Мислења
1.231
Поени од реакции
337
Ајде некој ако има некоја идеа за задачава..any help will be good
Конверзија од произволен броен систем во декаден (цел и децимален дел) /C++
 

sickjoce

Ненормален
Член од
30 јуни 2007
Мислења
1.231
Поени од реакции
337
Или пак од Бинарен во Декаден систем со децимали..
 

Limbo

maybe an alien
Член од
26 декември 2007
Мислења
835
Поени од реакции
1.471
Или пак од Бинарен во Декаден систем со децимали..
Код:
#include <iostream>
#include <cmath>
using namespace std;

int main(){
while(1==1){
    float bin,dek=0;
    long int cel_br;
    bool neg=false;
    
    cout<<"Vnesi binaren broj: ";
    cin>>bin;
    
    if(bin<0){
    bin*=-1;
    neg=true;}
    
    cel_br=bin;
    
    int n=0;
    while(cel_br!=bin){
    bin*=10;
    cel_br=bin;
    n++;
    }
    
    int i=0;
    while(cel_br>0){
    dek+=(cel_br%10)*pow(2.0,i-n);              
    cel_br=cel_br/10;
    i++;
    }
    
    if(neg==true)
    dek*=-1;
    
    cout<<"Dekadnata vrednost mu e: "<<dek<<endl<<endl;
} 
    cin.get(); cin.get();
    return 0;
}
еве види ова дал ќе ти помогне... го напраев целиот код у main(), ти моеш да го средиш у ф-ја ако ти треба како таков..
првиот while(1==1) ми е стаен само за да врти нон-стоп програмата, полесно ми беше за тестирање. малце ме измучи споредуањето кај while(cel_br!=bin) со double, правеше проблеми за некои вредности и создаваше бесконечен циклус, ама после го декларирав како float и сега работи добро.

значи накратко концептов е го внесуеш „бинарниот“ број, всушност го рачуна како декаден програмата но само со 1 и 0 цифри, го множиш со 10 се додека не се ослободиш од запирката, па после почнуваш исто како нормален број да го претвораш со таа разлика наместо да му дадеш вредност 2^0 на последната цифра, ќе му дадеш 2^0-(колку пати си го зголемил претходно бројот со 10)...

истиов код лесно можеш да го модифицираш за да работи за конверзија на друг броен систем помеѓу бинарен и декаден, во декаден..
pow(2.0,i-n) ќе ја смениш само двојката во друга цифра, на пр. 8 ако сакаш за октален броен систем..за бројни системи со поголема база не може да раб, т.е. ќе работи само за цифри од 0-9.. но не можеме да внесеме цифра што ќе има вредност поголема од 9, па затоа не може на овој принцип да работи за други бројни системи.. ќе треба да направиш на поинаков начин да оди внесувањето на вредностите..

уште да напоменам дека не се врши проверка дали внесениот број бинарен или не, т.е. дали е само составен од 1 и 0, ако ти треба такво нешто можеш да си направиш сам не е тешко..

поздрав :helou:
 
Член од
21 април 2010
Мислења
100
Поени од реакции
33
Може да ми препорачате некој GUI ( Graphics User Interface) Editor за Dev C++... ?
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Може да ми препорачате некој GUI ( Graphics User Interface) Editor за Dev C++... ?
За Dev C++ само WIN API ти врши работи, иначе како друга опција ти сe MFC Dialog Based или пак Qt C++ (Cross-Platform) кој овозможува GUI базиран на CSS или пак C++.NET со кој би поминал најлесно, али не би ти го препорачал него. Како и да е, C++ != VB за да можеш туку така да склепаш GUI апликација. :)
 
Член од
13 јуни 2008
Мислења
92
Поени од реакции
0
вака.. ќе може ли некој да ми ја објасни задачава чекот по чекор.. станува збор за функции во С++

Код:
//***********************************************************
// Activity program
// Ovаа programа ja prikazuva soodvetnata aktivnost za dadena temperatura
//***********************************************************
#include <iostream>
using namespace std;
void GetTemp( int& );            // funkciski prototipovi
void PrintActivity ( int );
int main ( )
{
    int temperature;            // nadvoresna temperaturа
    GetTemp (temperature);        // povik na funkcija
    PrintActivity (temperature);        // povik na funkcija
    return 0;
}
//***********************************************************
void GetTemp ( int& temp )            // referencen parameter
// Ovaa funkcija promptira (prasuva) za vnos na temperature,
// cita vnos vo temperature i echo prints temperature
{
    cout << “Vnesi nadvoresna temperature:” << endl;
    cin >> temp;
    cout << “Momentalnata temperature e “ << temp << endl;
}
//***********************************************************
void PrintActivity ( int temp )            // vrednosen parameter
// Za dadena vrednosta na temp, ovaa funkcija pecati poraka koja indicira soodvetna aktivnost
cout << “Preporacana aktivnost e “;
{
if (temp > 30)
    cout << “plivanje.” << endl;
else if (temp > 0)
    cout << “golf.” << endl;    
}
 

Toneh

is a turtle
Член од
21 август 2005
Мислења
5.510
Поени од реакции
907
Код:
#include <iostream>     /* Приклучување библиотека. */ 
using namespace std;
void GetTemp( int& );           /* Декларирање 
void PrintActivity ( int );                   функции            */
int main ( )
{
    int temperature;           // Декларирање променлива од типот integer, т.е. цел број, со име 'temperature'.
    GetTemp (temperature);       // Повикување на функција која е подоле дефинирана.

    PrintActivity (temperature);        // Повикување на функција која е подоле дефинирана.

    return 0;
}
//***********************************************************
void GetTemp ( int& temp )           // Дефинирање на функција со име GetTemp, која не враќа ништо, а како влезен аргумент и` се проследува референца кон цел број, со име temp.

{
    cout << “Vnesi nadvoresna temperature:” << endl; // Принтање. 
    cin >> temp; // // Внесување на вредност преку тастатура, вредност која ќе и` биде проследена на референцата.

    cout << “Momentalnata temperature e “ << temp << endl; // Принтање на таа вредност.
}
//***********************************************************
void PrintActivity ( int temp )            // Дефинирање функција која прима цел број со име 'temp'.

cout << “Preporacana aktivnost e “;  // Принтање.
{
if (temp > 30)                                  /* Ако вредноста на temp е помала од 30, тогаш принтај "пливање".
    cout << “plivanje.” << endl;            
else if (temp > 0)                 // Ако е поголема од нула, да испринта "голф". 
    cout << “golf.” << endl;    
}
Последната функција нема баш смисла, од проста причина што вредноста 31, пример, ги исполнува и двата услови, што значи дека треба да се додаде кај вториот if услов: (temp > 0 && temp < 30). И фали уште еден if кој ќе биде извршен ако ниеден од условите погоре не е исполнет.
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.153
Поени од реакции
5.921
Код:
void PrintActivity ( int temp )            // Дефинирање функција која прима цел број со име 'temp'.

cout << “Preporacana aktivnost e “;  // Принтање.
{
[B]if (temp > 30)                                  /* Ако вредноста на temp е помала од 30, тогаш принтај "пливање".[/B]
    cout << “plivanje.” << endl;            
else if (temp > 0)                 // Ако е поголема од нула, да испринта "голф". 
    cout << “golf.” << endl;    
}
Последната функција нема баш смисла, од проста причина што вредноста 31, пример, ги исполнува и двата услови, што значи дека треба да се додаде кај вториот if услов: (temp > 0 && temp < 30). И фали уште еден if кој ќе биде извршен ако ниеден од условите погоре не е исполнет.
Баш напротив... Има некоја смисла, бидејќи ако температурата е 31 (како ти што кажуваш), ќе се исполни само првиот услов. Во вториот нема воопшто да бара. А ако не е над 30, а е повеќе од 0, ќе иде во вториот и ќе го печати тоа. За под 0 му фали печатење, ама и немора да стои.

PS: ти имаш згрешено кај тоа болдираното. Треба да биде "ако вредноста е НАД 30... (така е оригиналниот код)"
 

Toneh

is a turtle
Член од
21 август 2005
Мислења
5.510
Поени од реакции
907
Баш напротив... Има некоја смисла, бидејќи ако температурата е 31 (како ти што кажуваш), ќе се исполни само првиот услов. Во вториот нема воопшто да бара. А ако не е над 30, а е повеќе од 0, ќе иде во вториот и ќе го печати тоа. За под 0 му фали печатење, ама и немора да стои.

PS: ти имаш згрешено кај тоа болдираното. Треба да биде "ако вредноста е НАД 30... (така е оригиналниот код)"

Не знам, мене не ми делува логично тоа, ако биде дополнет вториот услов сигурно ќе биде елиминирана и најмалата можност за да грешка некоја се појави.
Инаку да, таму треба поголема, не помала...


Едит: Само што ја искомпајлирав програмава преку DevC++:
Код:
Vnesi nadvoresna temperature:
31
Momentalnata temperature e 31
Preporacana aktivnost e plivanje
Press any key to continue . . .
Ама сепак паранојата си го прави своето. Јас би го дополнил вториот услов и да не постои ризик од грешки, од естетски причини, и читливост, меѓу другото.
 
Член од
6 јуни 2009
Мислења
3.094
Поени од реакции
445
Ама сепак паранојата си го прави своето. Јас би го дополнил вториот услов и да не постои ризик од грешки, од естетски причини, и читливост, меѓу другото.
Можиш да ставиш вакви проверки плус

Код:
if (temp < NEKOJA_NAJGORNA_GRANICA) //евентуално ова можи да се додаде
{
if (temp > 100) //и ова
    cout << “крај на светот, сонцето станува џин ѕвезда” << endl;
else if (temp > 50)
    cout << “глобално затоплување” << endl;
else if (temp > 30)
    cout << “plivanje.” << endl;            
else if (temp > 0)
    cout << “golf.” << endl;
}
А да ставаш else if (temp > 0 && temp <= 30) нема потреба, еден циклус повеќе за џабе. Оти тоа temp <= 30 е веќе проверено погоре кога бараш temp > 30.

Ако не се ставаа else if туку само if, е тогаш ќе требаше два услови. Два услови ќе бидат потребни ако имаш скокови меѓу интервалите (1-10, 20-40, 50-100).
 
Член од
27 април 2010
Мислења
1
Поени од реакции
0
1. da se napise programa koja so funkcija presmetuva i vrakaostatok pri delenje na dva broja vneseni od tastatura, kako argumenti na funkcija
2. pismeno da se resat slednive izrazi ako na pocetokot x=2, y=z=1 i da se napise programa koja ja presmetuva i pecati vrednosta na sekoja promenliva
a) x*=x*3
b) z+=y-2*x
 

Кент

Професионалец
Член од
16 февруари 2010
Мислења
255
Поени од реакции
15
1. da se napise programa koja so funkcija presmetuva i vrakaostatok pri delenje na dva broja vneseni od tastatura, kako argumenti na funkcija
2. pismeno da se resat slednive izrazi ako na pocetokot x=2, y=z=1 i da se napise programa koja ja presmetuva i pecati vrednosta na sekoja promenliva
a) x*=x*3
b) z+=y-2*x
Другар отвори ги материјалите и прочитај ги. Не чекај на готово. Барем овие работи ги имаш во првите страни (каде што ти се опишуваат податочните типови и типот на оператори).
 

Kajgana Shop

На врв Bottom