Перейти к публикации
пикап.Форум

Qbasic -кто-то владеет?


Cansel

Рекомендованные сообщения

Опубликовано:

Здравствуйте! Есть ли на форуме люди, владеющие Qbasicom?

Задали сделать задачу с циклом While - WEnd.

Я ее тупо не понимаю.

Вот: вычислите сумму 1+(1/2)+(1/3)+(1/4)+..... Суммирование прекратить, когда слагаемое станет меньше 0,001.

Опубликовано:

Непонятно, почему слагаемое должно стать меньше 0.001? Или непонятно как код написать?

Слагаемое станет меньше 0.001, когда оно будет (1/1001). Делаешь цикл от 1 до 1001 где в каждой итерации прибавляется следующая дробь. И все собственно.

p.s: там еще надо будет разобраться как находить НОК для этих "прибавлений"

http://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%B5_%D0%BE%D0%B1%D1%89%D0%B5%D0%B5_%D0%BA%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B5

Опубликовано:

что-то вроде

qbasicом не владею, поэтому синтаксис немного другой будет!

s=0
i=1
while 1/i > .001
s=s+1/i
i=i+1
wend

в переменной s будет твоя сумма

Опубликовано:

Это тебе на C# (вдруг пригодится) :)

double div = 2;

double res = 1;

double a = 1 / 2;

while(a >= 0.001)

{

res += a;

div++;

a = 1 / div;

}

(Narrenspiel правильно заметила про условие. Хотя может быть так, что разницы нет. Это проверять надо).

Опубликовано:

The Sentinel - если я тебя правильно поняла, ты предложил цикл for использовать. Не лучшая мысль, вдруг надо будет изменить приближение, придется лезть в код и что-то там мозговать.

Могу на Паскале накропать

var eps,s:real;

i:integer;

begin

i:=0;

s:=0;

eps:=0,001;

while (1/i)>eps do

begin

i:=i+1;

s:=s+(1/i);

end;

end;

приписала знак > вместо >= потому что i увеличиваем раньше, чем вычисляем очередную сумму.

Опубликовано:

Ваш алгоритм будет работать почти в 2 раза медленнее моего, потому что вы делаете 2 деления за цикл (а это тормозная операция) вместо одного.

Опубликовано:

что мешает мне ввести дополнительную переменную?

Заодно убрала вылезший косяк - на ноль разделила по невнимательности.

var eps,s,x:real;

i:integer;

begin

i:=1;

s:=0;

x:=1;

eps:=0,001;

while (x)>eps do

begin

s:=s+(1/i);

i:=i+1;

x:=1/i;

end;

end;

Опубликовано:

var eps,s,x:real;

i:integer;

begin

i:=1;

s:=0;

x:=1;

eps:=0,001;

while (x)>eps do

begin

s:=s+(1/i);

i:=i+1;

x:=1/i;

end;

end;

Скорее я тору прочитаю в оригинале, чем пойму это :D :D :D

Опубликовано:

Кстати, алгоритм ничо так для микробенчмарка.

На Delphi:

procedure TForm1.Button1Click(Sender: TObject);
var dv, res, a, we: Double;
i, t: Integer;
begin
t := GetTickCount;
we := 0;
for i := 0 to 100000-1 do
begin
dv := 2;
res := 1;
a := 1 / 2;
while a > 0.001 do
begin
res := res + a;
dv := dv + 1;
a := 1 / dv;
end;
we := we + res;
end;
t := GetTickCount - t;
Memo1.Lines.Add(FloatToStr(we)+' time='+IntToStr(t));

end;

На C#:

        private void button9_Click(object sender, EventArgs e)
{
int t = Environment.TickCount;

double we = 0;
for (int i = 0; i < 100000; i++)
{
double div = 2;
double res = 1;
double a = 1 / 2.0;
while (a >= 0.001)
{
res += a;
div++;
a = 1 / div;
}
we += res;
}
t = Environment.TickCount - t;
richTextBox1.AppendText(we.ToString() + " time=" + t.ToString());
}

На C++:

int _tmain(int argc, _TCHAR* argv[])
{

int st = GetTickCount();
double we = 0;
for (int i=0; i<100000; i++)
{
double dv = 2;
double res = 1;
double a = 1 / 2.0;
while(a >= 0.001)
{
res += a;
dv++;
a = 1 / dv;
}
we += res;
}
st = GetTickCount() - st;
std::cout << "ESize=" << we << "\n";
std::cout << st;
std::cin >> st;
return 0;
}

Время выполнения:

Delphi - 3750 мс

C# - 1156 мс

C++ - 907 мс

C++ по скорости рулит. Делфи тормоз. Правда у меня другие приложения висят, но я много раз гонял, резалты почти не меняются.

  • Советник
Опубликовано:

Насколь я помню 7-й класс, должно быть как-то так:

cls

n=1

s=1

q=1

Print "Start"

while q>0.001

n=n+1

q=1/n

s=s+q

wend

Print "Sum=";s

end

Опубликовано:

А кому не слабо на ассемблере?))

За пару WMZ могу скопипастить из дизасма.

За пару WMZ я и сам могу скопипастить;)

Для любителей..

printf("%d", (int*)1+3); // C++

Что выведет?

Опубликовано:

Насколь я помню 7-й класс, должно быть как-то так:

cls

n=1

s=1

q=1

Print "Start"

while q>0.001

n=n+1

q=1/n

s=s+q

wend

Print "Sum=";s

end

Это зачот однозначно. Я аж детство вспомнил. :) В принте после точки с запятой печатается число. Ну супер. А если запятую поставить, то будет с табуляцией. А от cls прослезился. :)

Для любителей..

printf("%d", (int*)1+3); // C++

Что выведет?

Муть какую-то выводит. Я по C++ вообще не рублю.

Опубликовано:

Насколь я помню 7-й класс, должно быть как-то так:

cls

n=1

s=1

q=1

Print "Start"

while q>0.001

n=n+1

q=1/n

s=s+q

wend

Print "Sum=";s

end

что-то не то получается... кажется, должна идти(при запуске) табуляция т.е. цифарки должны побежать

Опубликовано:

бежать ничего вроде не должно, в цикле то нет print. По идее просто на экране появится искомая сумма.

Помнится, в паскале был такой глюк - чтобы успеть глянуть результуты проги при запуске надо было обязательно в конце написать read, типа, читай следующую переменную, в противном случае окошко пропадало сразу после выполнения программы, то есть раньше, чем человеческий глаз успеет его ухватить. В Бейскике тоже такая фигня может быть, но я уже не помню...

Опубликовано:

бежать ничего вроде не должно, в цикле то нет print. По идее просто на экране появится искомая сумма.

Помнится, в паскале был такой глюк - чтобы успеть глянуть результуты проги при запуске надо было обязательно в конце написать read, типа, читай следующую переменную, в противном случае окошко пропадало сразу после выполнения программы, то есть раньше, чем человеческий глаз успеет его ухватить. В Бейскике тоже такая фигня может быть, но я уже не помню...

тогда я не пойму, что значит

n=1

s=1

q=1

Опубликовано:

ААА, ребята, выручайте, срочно)Надо:(на qbasice)

Найти сумму кубов неотрицательных значений протабулировав. y=-5x+6 на отрезке [-1;4]. с изменением знач. аргумента на 0.1

  • Советник
Опубликовано:

Насколь я помню 7-й класс, должно быть как-то так:

cls

n=1

s=1

q=1

Print "Start"

while q>0.001

n=n+1

q=1/n

s=s+q

wend

Print "Sum=";s

end

что-то не то получается... кажется, должна идти(при запуске) табуляция т.е. цифарки должны побежать

При запуске оно должно написать Start, а потому сумму, если хочешь, чтобы бежали цифры, надо так:

cls

n=1

s=1

q=1

Print "Start"

while q>0.001

n=n+1

q=1/n

s=s+q

Print s

wend

Print "Sum=";s

end

Опубликовано:

Помнится, в паскале был такой глюк - чтобы успеть глянуть результуты проги при запуске надо было обязательно в конце написать read, типа, читай следующую переменную, в противном случае окошко пропадало сразу после выполнения программы, то есть раньше, чем человеческий глаз успеет его ухватить.

ctrl+o ^_^

  • 2 недели спустя...
Опубликовано:

Появилась следующая задачка:Используя цикл Do-Loop решить:

В водоеме 100т. рыбы. Каждый год вылавливают 15 тонн. Воспроизводят рыбы 5% в год(от начала года) Через сколько лет останется менее 5 тонн рыбы и должен быть прекращаен лов?

Я подсчитал, что через 8 лет рыба уйдет в минус, через 7 лет ее будет 12 тонн. А как это сделать в qbasice?

Опубликовано:

Появилась следующая задачка:Используя цикл Do-Loop решить:

В водоеме 100т. рыбы. Каждый год вылавливают 15 тонн. Воспроизводят рыбы 5% в год(от начала года) Через сколько лет останется менее 5 тонн рыбы и должен быть прекращаен лов?

Я подсчитал, что через 8 лет рыба уйдет в минус, через 7 лет ее будет 12 тонн. А как это сделать в qbasice?

Если я правильно понял басик, будет примерно так:

DIM vol#, count&
vol = 100
count = 0
DO
vol = vol * 1.05
vol = vol - 15
count = count + 1
LOOP WHILE vol >= 5
CLS
PRINT "Count=";count

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
  • Новое

    1. 274

      Прошу оценить внешность по шкале от 1 до 10

    2. 12

      Построение отношений с замужней

    3. 274

      Прошу оценить внешность по шкале от 1 до 10

    4. 127

      Уровень девушек

    5. 274

      Прошу оценить внешность по шкале от 1 до 10

×
×
  • Создать...