C/C++

M

Mr.InF3ction

Гостин
Значи имам една задача која гласи вака :
Ваша задача е да го имплементирате алгоритмот за добивање на инверзен квадратен
корен.

Прашањето ми е..како да проверам дали точно ми е решено? има некој онлајн калкулатор нешто да пресмета?
 

statusQuO

Модератор
Член од
18 јуни 2008
Мислења
13.038
Поени од реакции
7.617
Значи имам една задача која гласи вака :
Ваша задача е да го имплементирате алгоритмот за добивање на инверзен квадратен
корен.

Прашањето ми е..како да проверам дали точно ми е решено? има некој онлајн калкулатор нешто да пресмета?
Внеси 4 види дали ќе добиеш 2.
Внеси 9, види дали ќе добиеш 3.
Внеси 16, види дали ќе добиеш 4.
Башка и проста е задачата.
 

statusQuO

Модератор
Член од
18 јуни 2008
Мислења
13.038
Поени од реакции
7.617
Код:
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
Зборуваш за нешто како ова ? или ?
--- надополнето: Oct 16, 2011 10:29 PM ---

m?
ја иам решавано на лаб. многу оддамна, и овој начин ти е премногу конфузен човече, не се бара од тебе да биде оптимален кодот, не е поентата да најдеш решение од интернет, поентата е сам да најдеш решение, оптимизација ќе учите у втора-трета...ај ако ми текне која беше финтата за имплементирање на sqr root ќе ја пишам
--- надополнето: Oct 16, 2011 10:40 PM ---
Него сеа најдов , и ние така сме ја решавале
“Квадратниот корен претставува комплексна операција, и иако е најчесто имплементирана
на хардверско ниво, постојат останати начини за добивање на соодветната вредност. Во
програмирањето на игри се користи следниот метод (базиран на Њутновиот) за добивање
на инверзен квадратен корен (1/sqrt(x)):
• Се зема бројот x како променлива во децимален запис (float)
• Бројот y се добива со множење на x со 0.5F
• Co integer репрезентација на x (која ќе ја добиете со употреба на cast операторот)
треба да ја поместите едно место на десно, и да ја одземете од магичната
константата 5f375a8616
• Променетата integer репрезентација на x треба да ја конвертирате повторно во float
• Резултатот го добивате преку изразот (1.5F – (y*x*x))
Ваша задача е да го имплементирате алгоритмот за добивање на инверзен квадратен
корен.“

така да, проверка си праиш со цели корени и гледаш дали е точно
за 4 - 2
за 9 - 3
за 16 - 4
итн
 
M

Mr.InF3ction

Гостин
Па не ја најдов од интернет туку тоа го бара.
Се зема бројот x како променлива во децимален запис (float)
· Бројот y се добива со множење на x со 0.5F
· Co integer репрезентација на x (која ќе ја добиете со употреба на cast операторот)
треба да ја поместите едно место на десно, и да ја одземете од магичната
константата 5f375a8616
· Променетата integer репрезентација на x треба да ја конвертирате повторно во float
· Резултатот го добивате преку изразот (1.5F – (y*x*x))

Истото го направив и јас но ако внесам 4 ми печати 1.033205..и не бара sqr root туку Inverse sqr root...затоа прашав дали има некој калкулатор ли било што....пошто не ми изгледа како квадратен корен па да очекувам резултати како што ти кажа.
--- надополнето: Oct 16, 2011 10:46 PM ---
Сепак не ми дава резултати.. ај да ставам кодот па види каде грешам..ме нервира веќе 2 саати се мачам -.-

int main ()
{
float x,y;
int i;
printf("vnesete vrednost za x\n");
scanf("%f",&x);
y=0.5F*x;
i=*(int*)&x;
i=0x5f375a86-(i>>1);
x=*(float*)&i;
x=(1.5F-(y*x*x));
printf(" konecen rezultat=%f",x);
}
 
A

apidrone

Гостин
Врска неам дали ти е тоа грешката, али приметив дека во кодот ти фали 16 на крајот од константата :)
 
A

apidrone

Гостин
Знаев дека не е тоа :D Шо знам, да пробаш i како long да ја претставиш.. не знам што треба за даден влез, каков излез да се добие...
 

DJVoio

Deejay
Член од
9 ноември 2010
Мислења
177
Поени од реакции
42
Да се напише програма коjа за два знаци внесени од тастатура (цифриод 0 - 9) `ке го отпечати на екран производот на нивните вредности.Пример: За внесени знаци ’8’ ’3’ се печати 24Помош: Соодветните знаци за цифрите треба да се претворат во соодвтенитецелоброjни вредности. :) ?
 
Член од
21 ноември 2009
Мислења
29
Поени од реакции
11
Да се напише програма коjа за два знаци внесени од тастатура (цифриод 0 - 9) `ке го отпечати на екран производот на нивните вредности.Пример: За внесени знаци ’8’ ’3’ се печати 24Помош: Соодветните знаци за цифрите треба да се претворат во соодвтенитецелоброjни вредности. :) ?
Код:
#include <iostream>

using namespace std;

int main(void)
{
    char numb1, numb2;
    cout << "Vnesete go prviot znak > ";
    cin >> numb1;
    cout << "Vnesete go vtoriot znak > ";
    cin >> numb2;
    cout << "Proizvodot e : " << ((int)numb1 - (int)('0')) * ((int)numb2 - (int)('0')) << endl;
    char c;
    cin >> c;
    return 0;
}
Ова решение е направено само за едноцифрени броеви и не прави валидација дали е внесениот знак е број.
Доколку е потребно и тоа мислам дека и сам ке се снајдеш ...
 

StarScr3am

Ѓавол
Член од
22 септември 2009
Мислења
798
Поени од реакции
219
Да се напише програма со која во променливите a и b од тастатура ќе се вчитаат два цели броја.
Програмата треба да провери дали навистина се внесени две целобројни вредност, во спротивно да испечати соовдетна порака за грешка.
Ако броевите се цели, поголемиот од нив да се смести во променливата a,а квадратот од помалиот број во променливата b.
Ако новите броеви a и b имаат иста вредност, на екран да се испечати порака "Promenlivite imaat ista vrednost", во спротивно на екран да се испечатат новите вредности на промелнивите a и b, како и резултатот од целобројното делење на a и b.

ЗАБЕЛЕШКА: Дозволено е да се користи најмногу една дополнителна променлива !!
HELP :)
 

Mind In Motion

Smirking Revenge
Член од
29 мај 2007
Мислења
816
Поени од реакции
46
Да се напише програма со која во променливите a и b од тастатура ќе се вчитаат два цели броја.
Програмата треба да провери дали навистина се внесени две целобројни вредност, во спротивно да испечати соовдетна порака за грешка.
Ако броевите се цели, поголемиот од нив да се смести во променливата a,а квадратот од помалиот број во променливата b.
Ако новите броеви a и b имаат иста вредност, на екран да се испечати порака "Promenlivite imaat ista vrednost", во спротивно на екран да се испечатат новите вредности на промелнивите a и b, како и резултатот од целобројното делење на a и b.

ЗАБЕЛЕШКА: Дозволено е да се користи најмногу една дополнителна променлива !!
HELP :)
Код:
int main(int argc, char** argv) {

float a=0.0f;
float b = 0.0f;
cout<<"Vnesi a:"<<endl;
cin>>a;
cout<<"Vnesi b:"<<endl;
cin>>b;
if(((int)a==a) && ((int)b==b))
{

      if(a<b)
      {
              int temp = a;
              a=b;
              b=temp;
              b=b*b;
              if(a==b)
                    cout<<"Promenlivite imaat isti vrednost"<<endl;
              else
                    cout<<"A:"<<a<<" B:"<<b<<" Kolichnik: "<<a/b;

      }
      else{
              cout<<"A e pogolemo od B";
              }

}else{ cout<<"Broevite ne se celosni";}
return 0;
}
Сигурно не ти било јасно делот кај што се проверува дали се интеџери. Како се прави проверката? Го кастираш бројот (променливата) во интегер и ако вредноста на кастираната променлива е еднаква со таа што е внесена тогаш се целосни, безразлика тоа што се декларирани како float, вредноста што ја чуваат е цел број, повторно без разлика на .000000 после бројот. :)
 
Член од
23 септември 2011
Мислења
5
Поени од реакции
0
S.O.S !!
1.Napisi program koj opredeluva kolku ralicni cifri ima vo zapisot na prirodniot broj "n" vnesen preku tastatura.

2.Napisi program koj ke gi ispecati site broevi pomali od N,broj vnesen preku tastaturara,koi se sostaveni samo od parni cifri i ke najde kolku takvi broevi ima.
 

Mind In Motion

Smirking Revenge
Член од
29 мај 2007
Мислења
816
Поени од реакции
46
S.O.S !!
1.Napisi program koj opredeluva kolku ralicni cifri ima vo zapisot na prirodniot broj "n" vnesen preku tastatura.

2.Napisi program koj ke gi ispecati site broevi pomali od N,broj vnesen preku tastaturara,koi se sostaveni samo od parni cifri i ke najde kolku takvi broevi ima.
Решението на 2рата задача:

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

/*
*
*/

int main(int argc, char** argv) {

    int n = 0;
    cin >> n;
    int paren_brojach=0;// brojach vo koj kje bide zachuvan brojot na parni cifri
    int globalen_brojach=0; // brojach koi kje go koristime za da gi izbroime na broevite sostaveni od parni cifri
    int brojach =0; // brojach na chekori za sekoj broj
    while(n)
    {
        int temp=n;
        while(temp)
        {

            brojach++;
            if((temp%10)%2==0)
                paren_brojach++; // ako najde paren, inkrementirame, ovaj brojach ne smee da e pogolem od brojachot so koj gi broime cifrite, no smee da e pomal.
            else
                paren_brojach--; // ako najde neparen, dekrementirame

            temp/=10;
        }
        if(paren_brojach==brojach)// uslovov ni kazuva deka brojot na parni cifri mora da e ednakov so brojot na chekori napraveni (1 chekor  e edna cifra)
        {
            cout<<n<<"  "<<endl;
            globalen_brojach++;
        }
        paren_brojach=0; brojach=0; // gi resetirame brojachite
        n--; // dekrementirame n
    }
    cout<<"Broj na broevi koi sodrzat parni cifri :"<<globalen_brojach;
    return 0;
}
Првата ќе ја решам подоцна.
 
D

detence007

Гостин
Програма која ке бара некој збор во текст(txt) документ, а потоа линијата во која е зборот да се испечати.:)
 

Kajgana Shop

На врв Bottom