C/C++

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

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

Прашањето ми е..како да проверам дали точно ми е решено? има некој онлајн калкулатор нешто да пресмета?
Внеси 4 види дали ќе добиеш 2.
Внеси 9, види дали ќе добиеш 3.
Внеси 16, види дали ќе добиеш 4.
Башка и проста е задачата.
 
Код:
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
итн
 
Па не ја најдов од интернет туку тоа го бара.
Се зема бројот 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);
}
 
Врска неам дали ти е тоа грешката, али приметив дека во кодот ти фали 16 на крајот од константата :)
 
Знаев дека не е тоа :D Шо знам, да пробаш i како long да ја претставиш.. не знам што треба за даден влез, каков излез да се добие...
 
Да се напише програма коjа за два знаци внесени од тастатура (цифриод 0 - 9) `ке го отпечати на екран производот на нивните вредности.Пример: За внесени знаци ’8’ ’3’ се печати 24Помош: Соодветните знаци за цифрите треба да се претворат во соодвтенитецелоброjни вредности. :) ?
 
Да се напише програма ко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;
}

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

ЗАБЕЛЕШКА: Дозволено е да се користи најмногу една дополнителна променлива !!
HELP :)
 
Да се напише програма со која во променливите 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 после бројот. :)
 
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.
 
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;
}

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

Kajgana Shop

Back
На врв Bottom