Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Anis от Май 13, 2011, 18:09



Название: Преобразование строк
Отправлено: Anis от Май 13, 2011, 18:09
Здраствуйте, подскажите пожалуйста как можно посчитать среднее арифметическое из чисел которые находятся в одномерном массиве из строк?


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:15
Код
C++ (Qt)
QStringList l;
int s = 0;
 
for( int i = 0; i < l.count(); i++ )
   s += l.at( i ).toInt();
s /= l.count();


Название: Re: Преобразование строк
Отправлено: Пантер от Май 13, 2011, 18:20
Код
C++ (Qt)
for (QStringList::const_iterator it = l.constBegin (), end = l.constEnd (); it != end; ++it) {
 s += it->toInt ();
}
 
Я бы так сделал цикл.


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:26
Цитировать
Я бы так сделал цикл.
Я бы тоже, но ты на форум-то посмотри ;)

Вот бы ещё и тролли так же делали, а то
Код
Bash
find ~/qt.stable/src -type f -name '*.[ch]*' | xargs grep 'for.*\.count()' | wc -l
1644


Название: Re: Преобразование строк
Отправлено: Alucard от Май 13, 2011, 18:33
и в чем радикальная разница?


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:37
и в чем радикальная разница?
qlist.h:
Код
C++ (Qt)
inline int size() const { return d->end - d->begin; }
inline int count() const { return p.size(); }
Сам поймёшь? ;)


Название: Re: Преобразование строк
Отправлено: Alucard от Май 13, 2011, 18:39
разжуй


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:40
на каждой итерации цикла выполняется d->end - d->begin.


Название: Re: Преобразование строк
Отправлено: Alucard от Май 13, 2011, 18:42
чушь


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:44
Обосновывай давай


Название: Re: Преобразование строк
Отправлено: Alucard от Май 13, 2011, 18:52
дать ссылку на IDA?


Название: Re: Преобразование строк
Отправлено: Пантер от Май 13, 2011, 18:54
Я бы тоже, но ты на форум-то посмотри ;)
Как раз нужно сразу правильно учить. ;)


Название: Re: Преобразование строк
Отправлено: GreatSnake от Май 13, 2011, 18:55
дать ссылку на IDA?
И чего мне это даст?
Коли назвал чушью, будь любезен обоснуй сам.


Название: Re: Преобразование строк
Отправлено: Пантер от Май 13, 2011, 18:55
дать ссылку на IDA?
Если не видишь разницы, то читай литературу.


Название: Re: Преобразование строк
Отправлено: Anis от Май 15, 2011, 13:19
спасибо!


Название: Re: Преобразование строк
Отправлено: Anis от Май 22, 2011, 13:27
помогите с программой, пожалуйста, не могу понять почему она не работает  ??? должно по введеным строкам (формат - имя и пять оценок через запятую) посчитать среднюю оценку и вывести в новый массив строк

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

int main(int argc, char *argv[])
{

    float x,p; int i,j,n,z; char *p1,s[30][255],r[30][255];
    printf ("Введите количество студентов:\n");
    scanf ("%d",&n);
    fflush (stdin);
    printf ("Введите результаты:\n");
    for (i=0;i<n;i++)
            gets(s);
     for (i=0;i<n;i++)
    {
         x=0;
         j=0;
    while (j<strlen(s))
         {
        if (s[j]>='0' && s[j]<='5') {
            p=atof(&s[j]);
            x=x+p;
            j++;
        }
      i++;
    }
    x=x/5;
    sprintf (r,"%f",x);
    z=p1-s;
    strncpy(r,s,z);
     for (i=0;i<n;i++)
         printf ("%s",r);
     }
  fflush (stdin);
 getch ();
}


Название: Re: Преобразование строк
Отправлено: kambala от Май 22, 2011, 13:36
а Qt тут при чём?


Название: Re: Преобразование строк
Отправлено: Anis от Май 22, 2011, 13:55
дак это ж в Qt написано


Название: Re: Преобразование строк
Отправлено: kambala от Май 22, 2011, 14:01
а по-моему написано на чистом С


Название: Re: Преобразование строк
Отправлено: Anis от Май 22, 2011, 14:03
это консольное приложение Qt


Название: Re: Преобразование строк
Отправлено: Авварон от Май 22, 2011, 14:07
и тем не менее
а по-моему написано на чистом С


Название: Re: Преобразование строк
Отправлено: ufna от Май 22, 2011, 20:17
мне всегда нравилась фраза "в Qt" :)


Название: Re: Преобразование строк
Отправлено: LisandreL от Май 22, 2011, 20:22
Вы s используете как одномерный массив, а объявляете как двумерный.
Ну и с циклами накручено.


Название: Re: Преобразование строк
Отправлено: Alucard от Июнь 21, 2011, 14:11
Цитировать
на каждой итерации цикла выполняется d->end - d->begin.

http://forum.vingrad.ru/index.php?showtopic=332592&view=findpost&p=2365227 (http://forum.vingrad.ru/index.php?showtopic=332592&view=findpost&p=2365227)

GCC 4.5.2 (O2)
(http://clip2net.com/clip/m47996/1308654410-clip-8kb.png)


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 01:17
всем драсКуйте!

Цитировать
мне всегда нравилась фраза
тебе всегда нравилось троллить. жаль этот движет не поддерживает статистику полезных сообщений.

Alucard, а разве могло быть иначе? оО годки-то какие)

зы
"одни с годами взрослеют, другие становятся старше" (с)
благо то, что к компиляторам и их разработчикам это не относится.


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 01:25
на каждой итерации цикла выполняется d->end - d->begin.
и это ты смеешь глумиться над троллями?
обоснование пожалуйста, почему компилятор(будучи глупцом) должен поступать так, как ты предполагаешь?


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 12:35
Господам Alucard и niXman :

если посмотрите внимательно на начало темы, то увидите, что разговор был не про std::vector, а про QList.
Все ваши комменты насчёт крутости оптимайзера для std::vector никоим образом не распространяются на QList.
И теперь обоснуйте мне, что я не прав.


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 15:24
Цитировать
разговор был не про std::vector, а про QList
во первых - насрать про что разговор.
во вторых - я а получил точно такой же ассемблерный код на тесте QList.

Цитировать
насчёт крутости оптимайзера для std::vector
а компилятор оказывается привереда, свои возможности оптимизации не хочет распространять на QList. оО

Цитировать
обоснуйте мне
был тут такой break. тоже однажды обоснований затребовал. получил, по самые нехочу. потом долго отхарькивался, этими, обоснованиями.
скринкаст выложить?


Название: Re: Преобразование строк
Отправлено: Пантер от Июнь 22, 2011, 15:47
niXman, ты вернулся чтобы опять хамить?


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 15:54
Цитировать
разговор был не про std::vector, а про QList
во первых - насрать про что разговор.
во вторых - я а получил точно такой же ассемблерный код на тесте QList.

Цитировать
насчёт крутости оптимайзера для std::vector
а компилятор оказывается привереда, свои возможности оптимизации не хочет распространять на QList. оО

Цитировать
обоснуйте мне
был тут такой break. тоже однажды обоснований затребовал. получил, по самые нехочу. потом долго отхарькивался, этими, обоснованиями.
скринкаст выложить?
Чего-то больно-много трёпа развёл. Недержание что-ли?

Вот из такого кода:
Код
C++ (Qt)
#include <cstdio>
#include <QList>
 
int main()
{
       QList< int > v;
       for( int idx = 0; idx < v.size(); ++idx )
       {
               printf("%d\n", idx);
       }
       return 0;
}
 
на gcc-4.5.1 (-O2) получаем это:
Код
ASM
(gdb) disassemble main
Dump of assembler code for function main:
  0x08048600 <+0>:     push   %ebp
  0x08048601 <+1>:     mov    %esp,%ebp
  0x08048603 <+3>:     and    $0xfffffff0,%esp
  0x08048606 <+6>:     push   %ebx
  0x08048607 <+7>:     sub    $0x2c,%esp
  0x0804860a <+10>:    movl   $0x80499ec,0x1c(%esp)
  0x08048612 <+18>:    lock incl 0x80499ec
  0x08048619 <+25>:    setne  %al
  0x0804861c <+28>:    mov    0x1c(%esp),%edx
  0x08048620 <+32>:    mov    0xc(%edx),%eax
  0x08048623 <+35>:    sub    0x8(%edx),%eax
  0x08048626 <+38>:    test   %eax,%eax
  0x08048628 <+40>:    jle    0x8048651 <main+81>
  0x0804862a <+42>:    xor    %ebx,%ebx
  0x0804862c <+44>:    lea    0x0(%esi,%eiz,1),%esi
  0x08048630 <+48>:    mov    %ebx,0x4(%esp)
  0x08048634 <+52>:    movl   $0x8048784,(%esp)
  0x0804863b <+59>:    call   0x8048508 <printf@plt>
  0x08048640 <+64>:    mov    0x1c(%esp),%edx
  0x08048644 <+68>:    add    $0x1,%ebx
  0x08048647 <+71>:    mov    0xc(%edx),%eax
  0x0804864a <+74>:    sub    0x8(%edx),%eax
  0x0804864d <+77>:    cmp    %eax,%ebx
  0x0804864f <+79>:    jl     0x8048630 <main+48>
  0x08048651 <+81>:    lea    0x1c(%esp),%eax
  0x08048655 <+85>:    mov    %eax,(%esp)
  0x08048658 <+88>:    call   0x8048680 <_ZN5QListIiED2Ev>
  0x0804865d <+93>:    add    $0x2c,%esp
  0x08048660 <+96>:    xor    %eax,%eax
  0x08048662 <+98>:    pop    %ebx
  0x08048663 <+99>:    mov    %ebp,%esp
  0x08048665 <+101>:   pop    %ebp
  0x08048666 <+102>:   ret
  0x08048667 <+103>:   mov    %eax,%ebx
  0x08048669 <+105>:   lea    0x1c(%esp),%eax
  0x0804866d <+109>:   mov    %eax,(%esp)
  0x08048670 <+112>:   call   0x8048680 <_ZN5QListIiED2Ev>
  0x08048675 <+117>:   mov    %ebx,(%esp)
  0x08048678 <+120>:   call   0x8048528 <_Unwind_Resume@plt>
End of assembler dump.
 

Код
ASM
0x08048647 <+71>:    mov    0xc(%edx),%eax
0x0804864a <+74>:    sub    0x8(%edx),%eax
 
Вот это что?


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 16:21
niXman, ты вернулся чтобы опять хамить?
а где ты видишь хамство, кэп?


Название: Re: Преобразование строк
Отправлено: Пантер от Июнь 22, 2011, 16:25
niXman, ты вернулся чтобы опять хамить?
а где ты видишь хамство, кэп?

во первых - насрать про что разговор.

был тут такой break. тоже однажды обоснований затребовал. получил, по самые нехочу. потом долго отхарькивался, этими, обоснованиями.
скринкаст выложить?

Разумный человек должен учиться на своих ошибках, а не повторять их.


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 16:32
Пантер, я не хотел травмировать твою нежную душенку, сорри.
но и хамства я тут все равно не вижу.

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

вот код:
Код
C++ (Qt)
 
#include <cstdio>
#include <QtCore/QList>
 
int main() {
  QList<int> l;
 
  for ( int idx = 0; idx < l.size(); ++idx ) {
     printf("%d\n", idx);
  }
}
 
вот дазасм:
Код
ASM
loc_8048670:
mov     [esp+8], ebx
mov     dword ptr [esp+4], offset unk_80487D0
mov     dword ptr [esp], 1
call    ___printf_chk
mov     edx, [esp+1Ch]
add     ebx, 1
mov     eax, [edx+0Ch]
sub     eax, [edx+8]
cmp     ebx, eax
jl      short loc_8048670
 


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 16:44
niXman, разве это:
Код
ASM
mov     eax, [edx+0Ch]
sub     eax, [edx+8]
не d->end - d->begin ???


Название: Re: Преобразование строк
Отправлено: niXman от Июнь 22, 2011, 17:00
ты мне покажи вызов метода size()


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 17:04
ты мне покажи вызов метода size()
Ты дурачком-то не прикидывайся - size() заинлайнился в эти самые mov & sub.


Название: Re: Преобразование строк
Отправлено: Авварон от Июнь 22, 2011, 17:14
там тогда 2 саба должно быть - sub [size() - i], jnz; [if (size-i < 0) break;] + второй саб внутри size


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 17:23
там тогда 2 саба должно быть - sub [size() - i], jnz; [if (size-i < 0) break;] + второй саб внутри size
зачем  ???


Название: Re: Преобразование строк
Отправлено: Авварон от Июнь 22, 2011, 17:49
что зачем? затем что чтобы выполнить сравнение a < b надо сравнить a-b с нулем


Название: Re: Преобразование строк
Отправлено: Alucard от Июнь 22, 2011, 18:34
как всегда шлак, сопли эмокодеров etc...

давай-те еще жисисю 2.95.3 попробуем... и скажем что таки нет... не оптимизирует...


Название: Re: Преобразование строк
Отправлено: GreatSnake от Июнь 22, 2011, 18:41
как всегда шлак, сопли эмокодеров etc...
давай-те еще жисисю 2.95.3 попробуем... и скажем что таки нет... не оптимизирует...
Ну детский сад прямо.
Если ты лабаешь свисто-перделки на самом-пре-самом последнем gcc, то это не значит, что все должны делать тоже самое.
Тем более на EL (RHEL, Oracle, CentOS). Где это в принципе невозможно.

И к тому же дизассемблер выше я приводил от gcc-4.5.1.


Название: Re: Преобразование строк
Отправлено: niXman от Июль 06, 2011, 18:36
ты мне покажи вызов метода size()
Ты дурачком-то не прикидывайся - size() заинлайнился в эти самые mov & sub.
да. сглупил. признаю ::)