| Автор | Цикл в С# |
Как правильно задать "квадратность"?
a = sqrt(a)*sqrt(a)
являются целыми квадратами если sqrt(a) целое число, не являются если рациональное. это проверяется if(Sqrt(p[i])=int(Sqrt(p[i])) вот так...должно так, но видимо что то не так (: щас поищу на компе компилятор, попробую варьировать всякую ерунду (: |
у меня проблема с преобразованиями int/float
я проверяю так: беру корень из числа и вычитаю из него модуль корня из числа. если получается ноль, то это нужный номер
объявление и инициализацию массива опустила, вот для статического:
void ololo(int m[100], int a) {
for (int i = 0; i < a; i++) {
m[i] = i ;
}
cout<<"\n ishodniy massiv: \n";
for (int i = 0; i < a; i++) {
cout << m[i] << '\t' ;
}
//проверка
for (int i = 0; i < a; i++) {
if ((sqrt((float)m[i])-abs(sqrt((float)m[i])))>0){
cout << i " - целочисленный квадрат от " sqrt(m[i]) << endl;
}
}
} |
void ololo(int m[100], int a)
a - используемый размер массива |
для мдяша:
Всё равно, при проверке не выводит нужное количество |
беру корень из числа и вычитаю из него модуль корня из числа. если получается ноль, то это нужный номер
т.е. типо sqrt(a)-abs(sqrt(a)) так?
корень 10=3.16227766016838
модуль корня из 10=3.16227766016838
3.16227766016838-3.16227766016838=0
это нужный номер? |
модуль корня из 10=3.16227766016838
чёрт. не та операция
там была как abs, только... |
| можно ли преобразовать флоат в инт без ошибки потери данных? |
для мдяша:
а, ты хочешь в лоб т.е. через ошибку пойти?)
была такая мысль, но я хочу математически |
при переводе в инт разряды после запятой стираются и тогда можно сравнивать с целочисленными значениями
у меня ещё и ошибка при взятии корня - перегрузка и ещё какая-то хрень |
for(i=1;i<n;i++)
{
if (p[i]=j*j)
{g=g+1;}
}
проблема явно здесь, ща подумаю
посоны да там же двойное равно! иначе операция присваивания |
if (d==sqrt(d) - modf(sqrt(d), &t))
{g=g+1;}
Попытался сделать так, всё равно ошибка какая-то |
скинь название ошибки плз
с переводом инт/флоат? |
| не, при запуске, после введения элементов массива, ничего не происходит |
я думаю нужно проверять так:
если остаток от деления на 10 произведения числа на 10 равно 0, то число целое
но как реализовать хз |
| есть продвижения. думаю, доделаю |
типо
9.123*10=91.23
91.23%10=123
и
9*10=90
90%10=0 |
if (d==sqrt(d) - modf(sqrt(d), &t))
...
4 = 2-0
3 = 1.4 - 0.4 и т.д.
Если хочешь так тогда уж d==d - modf(sqrt(d), &t) |
| лол. единицу и ноль распознает, а дальше не видит |
if (sqrt(d) - modf(sqrt(d), &t)==0)
Вот так. Всё равно в проге не выводится значение g |
работает!
вот весь код.вся соль в последней функции.только у меня массив, насколько я понимаю, нединамический.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
void ololo(int m[100], int a);
int main () {
int mas[100]; // статический массив, можно выбирать размер, но не больше сотни элементов
int raz = 0;
int quit = 0;
while(quit!=27){
cout << "\n\nrazmer massiva? " ;
cin>>raz;
cout << "\n\n\n" << endl;
ololo(mas, raz);
cout << "\n\nnazhmite Esc dlya vyhoda";
quit=_getch();
}
return 0;
}
void ololo(int m[100], int a) {
for (int i = 0; i < a; i++) {
m[i]=i;
}
cout<<"\n\n ishodniy massiv: \n\n";
for (int i = 0; i < a; i++) {
cout << m[i] << '\t' ;
}
cout << "\n\n";
for (int i = 0; i < a; i++) {
int h = m[i];
if ( sqrt( (float)h ) * sqrt( (float)h ) == (float)h ) {
cout << h <<" - kvadrat ot "<< sqrt( (float)h ) << endl;
}
}
} |