Страница 6 из 7

Re: Решить задачу на C++

Добавлено: 14 фев 2009, 12:59
Airhand
Albor Причём тут оптимизация. Это не оптимизация, просто не надо сразу писать корявый код. Вы же не считате оптимизацией то, что вы, наверное, не пишете сортировку пузырьком, а пишете, наверно, Algorithm::sort().

Re: Решить задачу на C++

Добавлено: 14 фев 2009, 13:44
Albor
Вы меня не совсем поняли. Я это сказал к тому, что в данном случае не имеет значения какой оператор применяется, код от этого хуже не будет и не стоит забивать голову студентам-школьникам красиво-непонятными словами, им сейчас главное, чтобы программа вообще заработала. Согласен, что в случае, когда всё равно каким оператором пользоваться, предпочтение лучше отдать префиксному, но, кому надо, тот дойдёт до этого со временем, а кому не надо - тому по-барабану плохо он сразу пишет код или нет.

Re: Решить задачу на C++

Добавлено: 16 фев 2009, 04:33
atavin-ta
&quot писал(а):PS Один авторитетный программист в нашем городе как-то сказал, что с точки зрения заказчика дешевле добавить памяти себе в комп, чем платить программисту за оптимизацию кода (это было сказано в контексте экономии памяти).
Бред. Альтернативой оптимизации является увеличение кэша, тактовой частоты и частоты глобальной шины. А если встаёт вопрос о наращивании оперативки, то программа всё равно вообще не сможет быть выполнена.
&quot писал(а):говорить о том, что одно хуже (конечно, если я правильно понял слово пессимизация) другого в контексте представленных задач, где операторы используются для типа в 4 байта считаю нестоящим акцентирования на этом внимания.
Ещё больший бред. Даже если временный объект занимает 1 байт, это может быть важно, так как выделение памяти под такой объект и освобождение её при уничтожении объекта - дополнительные операции. Если они будут выполняться часто (даже в одном и том же физическом адресе), то это приведёт к снижению скорости счёта (не путать с быстродеёйтвием, быстродействие - это чило элементарных операций выполняемых в единицу времени, а скорость счёта - число пользвовательских задач, решаемых в единицу времени). Тогда лучше один раз создать временный объект размером гигабайта полтора. В цикле же с постфиксной формой временные объекты будут создаваться и уничтожаться столько раз, сколько раз выполняется тело цикла.

Re: Решить задачу на C++

Добавлено: 16 фев 2009, 04:37
atavin-ta
&quot писал(а):Вы меня не совсем поняли. Я это сказал к тому, что в данном случае не имеет значения какой оператор применяется, код от этого хуже не будет и не стоит забивать голову студентам-школьникам красиво-непонятными словами, им сейчас главное, чтобы программа вообще заработала. Согласен, что в случае, когда всё равно каким оператором пользоваться, предпочтение лучше отдать префиксному, но, кому надо, тот дойдёт до этого со временем, а кому не надо - тому по-барабану плохо он сразу пишет код или нет.
Лучше сразу правильно научиться, чтобы когда дойдёшь до понимания, не переучиваться.

Re: Решить задачу на C++

Добавлено: 16 фев 2009, 19:51
vaniok
Vsem privet.
Ja tut reshyl zadacku, pravda nevsegda poluciaju pravelnyj otvet i vsio nikak nemogu najti oshybku :( Mozet mogliby pomoc? Budu ocen' blagodaren.
Zadacka: Skolka slov v simvolnoj stroke sostoit iz dvuh simvolov(bukv)?

vot cto ja nareshal:

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include<string.h>
#include<stdio.h>
#include<iostream.h>
int main(int argc, char* argv[])
{
char sak[100];
gets(sak);
char *sep=" ,:;?!.";
char *zodis=strtok(sak,sep);
int n=strlen(zodis);
int i=0;
while(zodis!=NULL)
{
zodis=strtok(NULL,sep);
if(zodis==NULL) break;
n=strlen(zodis);
if(n==2)
{
i++ ;
}
}
cout<<"Siimboliu eilutei yra: "
<<i
<<" zodziu is 2eju skaitmenu.\n";
gets(sak);
return 0;
}
//---------------------------------------------------------------------------

Re: Решить задачу на C++

Добавлено: 16 фев 2009, 20:14
Albor
Если в начале строки идёт слово из 2х букв, то счётчик не увеличивается, поэтому не всегда работает правильно. Все вызовы strtok нужно внести в тело цикла. Условием цикла можно сделать просто true, всё равно внутри указатель проверяется - цикл закончится по break. Как организовать работу strtok с 0 в первом параметре додумай сам.

Re: Решить задачу на C++

Добавлено: 17 фев 2009, 07:46
Albor
atavin-ta писал(а):Лучше сразу правильно научиться, чтобы когда дойдёшь до понимания, не переучиваться.

Ну, да. Сначала научился, а может быть потом пойму. Это, батенька, не научился, научился - это на всю жизнь.

Re: Решить задачу на C++

Добавлено: 17 фев 2009, 23:46
Zazeek
Прошу о помощи
Задание: " вычислить максимальный элемент и поменять его местами с последним"
Ниже код. Нужна такая же, только с использованием функции. (массив из 18 вещественных чисел)

Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a[18];int i,max=0,imax;
for(i=0;i<18;i++)a=StrToFloat(Memo1->Lines->Strings);
max=a[0];imax=0;
for(i=1;i<18;i++)
if(a>max){max=a;imax=i;}
a[imax]=a[17];
a[17]=max;
Memo2->Clear();
for(i=0;i<18;i++)Memo2->Lines->Add(FloatToStr(a));
}

Заранее спасибо!

Re: Решить задачу на C++

Добавлено: 17 фев 2009, 23:56
Zazeek
Нужна небольшая помощь по одномерному массиву. С++
Задание: " вычислить максимальный элемент и поменять его местами с последним"
Ниже код. Нужна такая же, только с использованием функции.

Код:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a[18];int i,max=0,imax;
for(i=0;i<18;i++)a=StrToFloat(Memo1->Lines->Strings);
max=a[0];imax=0;
for(i=1;i<18;i++)
if(a>max){max=a;imax=i;}
a[imax]=a[17];
a[17]=max;
Memo2->Clear();
for(i=0;i<18;i++)Memo2->Lines->Add(FloatToStr(a));
}

Заранее спасибо!

Re: Решить задачу на C++

Добавлено: 18 фев 2009, 10:12
atavin-ta
&quot писал(а):Прошу о помощи
Задание: " вычислить максимальный элемент и поменять его местами с последним"
Ниже код. Нужна такая же, только с использованием функции. (массив из 18 вещественных чисел)

Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a[18];int i,max=0,imax;
for(i=0;i<18;i++)a=StrToFloat(Memo1->Lines->Strings);
max=a[0];imax=0;
for(i=1;i<18;i++)
if(a>max){max=a;imax=i;}
a[imax]=a[17];
a[17]=max;
Memo2->Clear();
for(i=0;i<18;i++)Memo2->Lines->Add(FloatToStr(a));
}

Заранее спасибо!

Ответ на этот пост я дал в http://forum.developing.ru/showthread.php?t=16718