LINUX.ORG.RU

Интересная книга по C++


0

0

Имеется проблема: при чтении книг по C++ клонит в сон.
Может не те книги читаю? Посоветуйте что-нибудь по-интереснее. Хотелось бы чтобы было поменьше «воды».
С программированием знаком, хотелось бы изучать именно C++, а не основы программирования.

Ответ на: комментарий от baverman

Ты так горд своим постом, что даже в talks запостил. Внимания что-ли не хватает?

Засовываешь все 10 чисел в массив - одна строка. Ну и дальше ищешь два наибольших - еще 2-3 строки. Какие проблемы?

anonymous
()
Ответ на: комментарий от vertexua

и главное, вся эта умственная маструбация не имеет никакого отношения к промышленному программированию

Reset ★★★★★
()
Ответ на: комментарий от anonymous

> Засовываешь все 10 чисел в массив - одна строка. Ну и дальше ищешь два наибольших - еще 2-3 строки. Какие проблемы?

Ну он сейчас поди будет заливать, что массивы и циклы нельзя использовать ))

kamre ★★★
()
Ответ на: комментарий от vertexua

Пахнет нашим первым курсом

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

baverman ★★★
()
Ответ на: комментарий от Reset

числа функция из астрала будет получать или их таки надо в список затолкать?

Какая часть в «Определите функцию, которая принимает 10 аргументов-чисел» нуждается в дополнительной расшифровке?

baverman ★★★
()
Ответ на: комментарий от baverman

Ты давай полностью все условия, каким образом функция получает 10 аргументов, что она может с ними делать и как им образом. Как, например, получить 7й аргумент? Пока всё звучит очень туманно и похоже на то «сделайте мне в С++ также как и в схеме». А ума хватает понять, что в С++ принято делать не так?

Reset ★★★★★
()
Ответ на: комментарий от baverman

Все, решил. До 10 аргументов расширишь сам, main напишешь тоже сам, не всю же лабу я за тебя делать буду.

template<int n>
int sort(int a1, int a2, int a3, int a4, int a5)
{
    int a[] = {a1, a2, a3, a4, a5};
    int m[n];
    for (int i = 0; i < n; i++)
        m[i] = a[i];

    for (int i = n; i < 5; i++) {   
        for (int j = 0; j < n; j++) {
            if (a[i] > m[j]) {
                m[j] = a[i]; 
                break;
            }
        }
    }
    int s = 0;
    for (int i = 0; i < n; i++) {
        s += (m[i] * m[i]);
    }
    return s;
}

anonymous
()
Ответ на: комментарий от baverman

>> Ну он сейчас поди будет заливать, что массивы и циклы нельзя использовать ))

Собственно уже.

И в чем тогда ценность решения этой задачи с такими ограничениями на C? Показать, что С это не scheme? Но это и так очевидно.

kamre ★★★
()
Ответ на: комментарий от anonymous

сейчас тебе скажут, что нет циклов, массивов и тем более операции взятия элемента по индексу.

Reset ★★★★★
()
Ответ на: комментарий от anonymous

примерно так.

float trollolo(float f,...){
    float *p = &f;
    float sum=0, count=0;
    float m1 = (p*);
    float m2 = 0;
    p++;
    while( *p)
    {
        if ( m1 < p* ) {
            m2 = m1;
            m1 = p*;
        }
        p++;
    }
    return m1*m1+m2*m2;
}
qnikst ★★★★★
()
Ответ на: комментарий от anonymous

Все, решил. До 10 аргументов расширишь сам, main напишешь тоже сам, не всю же лабу я за тебя делать буду.

Reset уже проникся и дело говорит

сейчас тебе скажут, что нет циклов, массивов и тем более операции взятия элемента по индексу.

baverman ★★★
()
Ответ на: комментарий от qnikst

если не устраивает while его можно переписать через if/goto или рекурсивную функцию.

qnikst ★★★★★
()
Ответ на: комментарий от baverman

Капча "debility"

>Reset уже проникся и дело говорит

сейчас тебе скажут, что нет циклов, массивов и тем более операции взятия элемента по индексу.

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

anonymous
()
Ответ на: комментарий от qnikst

примерно так.

Отличная попытка. Как образчик возможностей си. За ней прячется тот еще хардкорщик. Я даже закрою глаза на цикл, его в любом случае можно заменить на рекурсию, но указатели... Боюсь читатель не знает про указатели и соответственно арифметику указателей.

baverman ★★★
()
Ответ на: комментарий от baverman

>Боюсь убогий лиспер не знает про указатели и соответственно арифметику указателей.
Пофикшено. Но всем насрать на то, что лисперы не знают. Пусть не знают дальше.

anotheranonymous
()
Ответ на: комментарий от baverman

ты открой наконец тот недостающий элемент, который не указан в условии и который надо использовать

Reset ★★★★★
()
Ответ на: комментарий от Reset

Ну разве не понятно, что baverman просто толсто троллит? Прям читается: напишите мне решение задачи на c++, не используя никаких возможностей языка (часть потому что слишком хардкорно, часть - сильно удобно, часть - просто не нравится троллю). И вообще он подразумевал написание интерпретатора лиспа и нужной программы на лиспе. :)

gizzka ★★
()
Ответ на: комментарий от anonymous

live hack:

float trollolo64(float f1,float f2,float f3,float f4,float f,...){
    
    float * p = &f;
    while( *p){
        printf("%f\n",*p);
        //put your code here
        p++;
    }
}

если честно я не шарю, как делать правильно и никогда бы не стал так делать=)

qnikst ★★★★★
()
Ответ на: комментарий от baverman

Ну так можно бесконечно говорить: «не хватает условий», «в условии не указано использовать CUDA или OpenMP». По настоящему можно написать код, который будет полностью подходить под условие, кого не устраивает, пусть тогда сам условие дополняет. Задача ясна вполне.

vertexua ★★★★★
()
Ответ на: комментарий от Reset

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

vertexua ★★★★★
()

Если будут по условию все запрещать, то я просто перейду на STL algorithms, чем не С++?

vertexua ★★★★★
()
Ответ на: комментарий от baverman
public class LORTask {
    public static int task(int... list) {
        Integer m1 = null;
        Integer m2 = null;
        for (int i : list) {
            if (m1 == null || m1 < i) {
                m2 = m1;
                m1 = i;
            } else if (m2 == null || m2 < i) {
                m2 = i;
            }
        }
        return (m2 != null) ? m1 * m1 + m2 * m2 :
               (m1 != null) ? m1 * m1 : 0;
    }

    public static void main(String[] args) {
        System.out.println(task(10));
        System.out.println(task(10, 5));
        System.out.println(task(1, 2, 5, 3, 4));
        System.out.println(task(1, 2, 5, 3, 4, 9, 6, 8, 7, 10));
    }
}
kamre ★★★
()
Ответ на: комментарий от kamre

for и итератор :) и передача данных в функцию массивом.

qnikst ★★★★★
()
Ответ на: комментарий от gizzka

Ну разве не понятно, что baverman просто толсто троллит?

Успокою всех. У меня наконец готова реализация на С, удовлетворяющая условиям задачи. Пришлось, конечно применить совсем другой подход к решению, нежели на схеме или питоне. Но тем не менее я Д'Артаньян.

baverman ★★★
()
Ответ на: комментарий от anotheranonymous

Пофикшено. Но всем насрать на то, что лисперы не знают. Пусть не знают дальше.

Я питонист. На лиспе до сегодняшнего дня не писал.

baverman ★★★
()
Ответ на: комментарий от baverman

> У меня наконец готова реализация на С, удовлетворяющая условиям задачи. Пришлось, конечно применить совсем другой подход к решению, нежели на схеме или питоне. Но тем не менее я Д'Артаньян.

Опубликуй, и посмотрим, какой ты д'Артаньян.

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

итак, набор условий: a). мы не можем использовать указатели

б). мы не можем передать в функицию массив

вывод у нас должна быть функция trollolo(float f0, float f1,.. и т.д. 10 раз);

в). нельзя использовать for while и т.п.

отсюда пишем функцию sort3(float a1,float a2, float a3) который выстраивает элементы a1\leq a2\leq a3 с if вполне можно.

потом пишем

m1=f0; m2=f1;
sort3(m1,m2,f3);sort3(m1,m2,f4);//и т.д. до f9

отстаётся написать return m1*m1+m2*m2;

но нафига???

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

быстрый fix

а sort возврящает m1>=m2>=m3 sort(&m1,&m2,&f3) везде;

qnikst ★★★★★
()
Ответ на: комментарий от tailgunner

Опубликуй, и посмотрим, какой ты д'Артаньян.

Я думаю еще рановато. Не все люди пришли с работы. Я сейчас скину сниппет на какой нибудь кодохостинг. А завтра поделюсь ссылочкой. Оке?

baverman ★★★
()
Ответ на: комментарий от qnikst

эээ так не честно, а что ты сишникам не разрешал передавать в параметры массив?

Не волнуйтесь. Шепотом: «У него все равно ничего не выйдет».

Да. Сишный код с легкостью, один в один, переписывается практически на любой язык. Никаких выкрутасов не делалось.

baverman ★★★
()
Ответ на: комментарий от const86

Имеется проблема: при чтении книг по C++ клонит в сон.

У меня такая проблема со всеми книгами, даже интересными.

Аналогично. Лучшая книга по технической проблематике - хороший справочник, к которому обращаешься по мере необходимости.

mv ★★★★★
()
Ответ на: комментарий от baverman

Да, самый простой способ - сортируем массив, берем два последних элемента. Сложность - в лучшем случае n*log(n) вместо n*2. Зато удовлетворены дебильные условия задачи.

Bwglb3
()
Ответ на: комментарий от Bwglb3

Да, самый простой способ - сортируем массив, берем два последних элемента.

Нафиг вообще сортировать? Два наибольших числа ищутся за один проход.

mv ★★★★★
()
Ответ на: комментарий от baverman

>> Опубликуй, и посмотрим, какой ты д'Артаньян.

Я думаю еще рановато.

После слов «я д'Артаньян» - уже в самый раз.

Не все люди пришли с работы

Сегодня выходной.

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

Также мы умеем использовать массивы, переменные и циклы. Решение приведено выше. Все остальное - задротство.

Bwglb3
()
Ответ на: комментарий от tailgunner

Сегодня выходной.

А ведь и правда.

Хорошо. Дадим же пол-часика товарищам mv и Bwglb3. Может быт сишники еще разродятся.

baverman ★★★
()
Ответ на: комментарий от baverman

Your paste can be seen here: http://dpaste.com/192450/

будет проще пиши.. ( с условием всех ограничений которые ты понаписал)

P.S. я не тестировал, так что может быть куча мелких опечаток.

P.P.S. я пхпбыдлокодер - мне можно ^_^

qnikst ★★★★★
()
Ответ на: комментарий от baverman

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

int& max(int& a, int& b) {
    return (a < b)? b : a;
}

void swap(int& a, int& b)   {
    a ^= b;
    b ^= a;
    a ^= b;
}

int fun(int a, int b, int c, int d, int e, int f, int g,
        int h, int i, int j)  {
    swap(a, 
        max(a, 
        max(b, 
        max(c, 
        max(d, 
        max(e, 
        max(f, 
        max(g, 
        max(h, 
        max(i, j) )))))))) 
    );
    swap(b, 
        max(b, 
        max(c, 
        max(d, 
        max(e, 
        max(f, 
        max(g, 
        max(h, 
        max(i, j) )))))))
    );
    return a*a + b*b;
}
metar ★★★
()
Ответ на: комментарий от Bwglb3

Также мы умеем использовать массивы, переменные и циклы. Решение приведено выше. Все остальное - задротство.

Кстати здесь кроется фундаментальная проблема нашего образования. У нас совершенно не могут давать материал постепенно. Почему-то считается что без всего этого нельзя писать программы.

baverman ★★★
()
Ответ на: комментарий от baverman

Все у нас могут, нам как раз давали материал постепенно, это хорошо, но всему должна быть мера.

Почему-то считается что без всего этого нельзя писать программы.

Программы можно писать вообще на ассемблере, а ЯП придумали для того чтобы писать программы было проще.

Bwglb3
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.