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

Ответить
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

14 фев 2009, 12:59

Albor Причём тут оптимизация. Это не оптимизация, просто не надо сразу писать корявый код. Вы же не считате оптимизацией то, что вы, наверное, не пишете сортировку пузырьком, а пишете, наверно, Algorithm::sort().
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

14 фев 2009, 13:44

Вы меня не совсем поняли. Я это сказал к тому, что в данном случае не имеет значения какой оператор применяется, код от этого хуже не будет и не стоит забивать голову студентам-школьникам красиво-непонятными словами, им сейчас главное, чтобы программа вообще заработала. Согласен, что в случае, когда всё равно каким оператором пользоваться, предпочтение лучше отдать префиксному, но, кому надо, тот дойдёт до этого со временем, а кому не надо - тому по-барабану плохо он сразу пишет код или нет.
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

16 фев 2009, 04:33

&quot писал(а):PS Один авторитетный программист в нашем городе как-то сказал, что с точки зрения заказчика дешевле добавить памяти себе в комп, чем платить программисту за оптимизацию кода (это было сказано в контексте экономии памяти).
Бред. Альтернативой оптимизации является увеличение кэша, тактовой частоты и частоты глобальной шины. А если встаёт вопрос о наращивании оперативки, то программа всё равно вообще не сможет быть выполнена.
&quot писал(а):говорить о том, что одно хуже (конечно, если я правильно понял слово пессимизация) другого в контексте представленных задач, где операторы используются для типа в 4 байта считаю нестоящим акцентирования на этом внимания.
Ещё больший бред. Даже если временный объект занимает 1 байт, это может быть важно, так как выделение памяти под такой объект и освобождение её при уничтожении объекта - дополнительные операции. Если они будут выполняться часто (даже в одном и том же физическом адресе), то это приведёт к снижению скорости счёта (не путать с быстродеёйтвием, быстродействие - это чило элементарных операций выполняемых в единицу времени, а скорость счёта - число пользвовательских задач, решаемых в единицу времени). Тогда лучше один раз создать временный объект размером гигабайта полтора. В цикле же с постфиксной формой временные объекты будут создаваться и уничтожаться столько раз, сколько раз выполняется тело цикла.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

16 фев 2009, 04:37

&quot писал(а):Вы меня не совсем поняли. Я это сказал к тому, что в данном случае не имеет значения какой оператор применяется, код от этого хуже не будет и не стоит забивать голову студентам-школьникам красиво-непонятными словами, им сейчас главное, чтобы программа вообще заработала. Согласен, что в случае, когда всё равно каким оператором пользоваться, предпочтение лучше отдать префиксному, но, кому надо, тот дойдёт до этого со временем, а кому не надо - тому по-барабану плохо он сразу пишет код или нет.
Лучше сразу правильно научиться, чтобы когда дойдёшь до понимания, не переучиваться.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
vaniok
Сообщения: 1
Зарегистрирован: 16 фев 2009, 19:15

16 фев 2009, 19:51

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;
}
//---------------------------------------------------------------------------
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

16 фев 2009, 20:14

Если в начале строки идёт слово из 2х букв, то счётчик не увеличивается, поэтому не всегда работает правильно. Все вызовы strtok нужно внести в тело цикла. Условием цикла можно сделать просто true, всё равно внутри указатель проверяется - цикл закончится по break. Как организовать работу strtok с 0 в первом параметре додумай сам.
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

17 фев 2009, 07:46

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

Ну, да. Сначала научился, а может быть потом пойму. Это, батенька, не научился, научился - это на всю жизнь.
Zazeek
Сообщения: 4
Зарегистрирован: 17 фев 2009, 22:31

17 фев 2009, 23:46

Прошу о помощи
Задание: " вычислить максимальный элемент и поменять его местами с последним"
Ниже код. Нужна такая же, только с использованием функции. (массив из 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));
}

Заранее спасибо!
Zazeek
Сообщения: 4
Зарегистрирован: 17 фев 2009, 22:31

17 фев 2009, 23:56

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

Код:

#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));
}

Заранее спасибо!
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

18 фев 2009, 10:12

&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
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответить