Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


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

Да, объявление и определение шаблонного класса и его методов должны находиться в одном и том же файле, есть такое ограничение.

Ссылка на комментарий
Поделиться на другие сайты

Тролль

Сейчас изучаю материал по красоте кода и на одном сайте столкнулась с такой конструкцией:

for (Dish dish : dirtyDishStack){   foo(dish); //это какая-то функция}

Очень напоминает foreach в php, но этот код написан на C/C++. Как он работает, что делает и когда применяется? Впервые вижу такое условие в for-е.

Ссылка на комментарий
Поделиться на другие сайты

Иазяв

C++, как и другие языки, со временем изменяется, кое-что добавляется, кое что удаляется. Так было и раньше, например, многие спотыкаются на том, что в старых учебниках был iostrеam.h, который теперь не поддерживается, а вместо него теперь iostream. Сейчас вводится новый стандарт, C++ 11, и в нем тоже кое-что удалено, а кое-что добавлено, в частности, есть новая форма оператора цикла, range-based for, подробнее о ней, например, в обзоре новшеств C++ ru.wikipedia.org/wiki/C++11

Больше сведений о внесенных в язык изменениях есть в англоязычном варианте этой статьи.

Оффтоп
"Неужели я должен вызубрить все очертания этой реки с их бесконечными изменениями? ... Ладно, я попробую; но по крайней мере, когда я их выучу, смогу я положиться на них или нет? Останутся ли они всегда такими, без всяких фокусов?

Прежде чем мистер Б. смог ответить, мистер У. пришел сменить его и сказал: - Б., ты будь повнимательней у Президентова острова и вообще выше района "Старой наседки с цыплятами". Берега размываются совершенно. Не узнать уже реки выше мыса на Сороковой миле! Сейчас там можно провести судно между берегом и старой корягой.

Тем самым я получил ответ на свой вопрос: бесконечные берега все время меняли свои очертания. Я снова повержен был во прах. Две вещи стали мне абсолютно ясны; во-первых, что, для того чтобы стать лоцманом, надо усвоить больше, чем дано любому человеку; и во-вторых, что все усвоенное надо переучивать по-новому каждые двадцать четыре часа." :)

(Марк Твен, "Жизнь на Миссисипи")

Ссылка на комментарий
Поделиться на другие сайты

Всем привет.Помогите решить задачу на с++:

Дано натуральное число а (a<100). Напишите программу, выводящую на экран количество цифр в этом числе и сумму этих цифр

Ссылка на комментарий
Поделиться на другие сайты

Hidan

#include<iostream>using namespace std;int main(){unsigned a; cin>>a;cout<<"digits: "<<(a>9)+1<<",  sum: "<<a/10+a%10<<endl;cin.get(); cin.get();}
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Всем привет.Дана задача:

Разработать программу, которая выводит на экран горизонтальную линию из символов. Число символов, какой использовать символ, и какая будет линия - вертикальная, или горизонтальная - указывает пользователь.

Если не трудно помогите упростить код если это возможно

#include "stdafx.h"

#include <iostream>

#include <Windows.h>

using namespace std;

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int count;

cout<<"Введите длину линии:";

cin>>count;

int i=0;

int symvol;

cout<<"Выберите символ из которого будет состоять линия"<<endl;

cout<<"1 - линия будет состоять из знака !"<<endl;

cout<<"2 - линия будет состоять из знака @"<<endl;

cout<<"3 - линия будет состоять из знака #"<<endl;

cout<<"4 - линия будет состоять из знака $"<<endl;

cin>>symvol;

int choise;

cout<<"Выберите положение вашей линии"<<endl;

cout<<"1 - нажмите 1 для того что бы линия была горизонтальной."<<endl;

cout<<"2 - нажмите 2 для того что бы линия была вертикальной."<<endl;

cin>>choise;

switch(choise)

{

case 1:

switch(symvol)

{

case 1:

while(i<count)

{

cout<<"!";

i++;

}

break;

case 2:

while(i<count)

{

cout<<"@";

i++;

}

break;

case 3:

while(i<count)

{

cout<<"#";

i++;

}

break;

case 4:

while(i<count)

{

cout<<"$";

i++;

}

break;

default:

cout<<"Введен некорретный символ"<<endl;

break;

}

break;

case 2:

switch(symvol)

{

case 1:

while(i<count)

{

cout<<"!\n";

i++;

}

break;

case 2:

while(i<count)

{

cout<<"@\n";

i++;

}

break;

case 3:

while(i<count)

{

cout<<"#\n";

i++;

}

break;

case 4:

while(i<count)

{

cout<<"$\n";

i++;

}

break;

default:

cout<<"Введен некорретный символ"<<endl;

break;

}

break;

default:

cout<<"Введен некорректный символ!"<<endl;

break;

}

getchar();

return 0;

}

Ссылка на комментарий
Поделиться на другие сайты

Hidan

Не знаю, зачем в этой программе цифровое меню с выбором пунктов. Гораздо проще и универсальнее прямо вводить нужный символ. По условию никаких цифровых меню не требуется. Впрочем, условие то еще... Вывести на экран горизонтальную линию, которая во втором предложении условия вдруг оказывается еще и вертикальной ;)

#include "stdafx.h"#include <iostream>#include <Windows.h>using namespace std;int main(){SetConsoleCP(1251); SetConsoleOutputCP(1251);char c,ch; int count;cout<<"Symbol: "; cin>>c;cout<<"Length: "; cin>>count;do cout<<"Direction (-,+): ",cin>>ch; while(ch!='-'&&ch!='+');for(int i=0;i<count;i++){cout<<c; if(ch=='+')cout<<endl;}cout<<endl; cin.get(); cin.get();}
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Спасибо Тролль.

В моем варианте я просто делал по образцу из книги, до цикла for только дошел

Ссылка на комментарий
Поделиться на другие сайты

Тролль

Спасибо огромное за ответ! Странно, что нам даже не рассказывали о новых возможностях С++ и о С++11. Спросила ребят из группы, никто не слышал ни о С++11, ни о такой конструкции for-а.

Ссылка на комментарий
Поделиться на другие сайты

Иазяв

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

Например, для интереса сейчас попробовал на последней версии Dev-C++ (v 5.4.0) такую программку:

#include<iostream>int main(){int s=0; for(int x:{1,2,3})std::cout<<x*x<<' '; std::cin.get();}

Работает, средства C++11 в компилятор Dev-C++ уже включены :)

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль

Уже давно не садилась за С++. Работала на PHP. На днях пришлось написать программку на С++, еле смогла собраться/переключиться с языка на язык. Завтра выложу, если вместе с диском не полетела.

А что Вы думаете о паттернах проектирования/программирования? Насколько они помогают? И хотела спросить об одной своей особенности - в инете существуют cookbook-и, но я не понимаю их возможностей. Читаю и не вижу никаких интересностей, прелестей. Это ИМХО или я не туда гляжу?

Ссылка на комментарий
Поделиться на другие сайты

А что Вы думаете о паттернах проектирования/программирования? Насколько они помогают? И хотела спросить об одной своей особенности - в инете существуют cookbook-и, но я не понимаю их возможностей. Читаю и не вижу никаких интересностей, прелестей. Это ИМХО или я не туда гляжу?

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

А "поваренные книги" - это сборники примеров с решениями. Полезно просмотреть несколько штук, посмотреть, как программируют другие люди. Не надо вариться только в собственном соку, часто можно подхватить что-то полезное, сравнить, как решал бы ты и как решают другие. Бывают, конечно, и такие "поваренные книги", что о рецептах в них только и думаешь - я бы сделал куда лучше, а бывают и написанные хорошими программистами, где они раскрывают свои приемы, свой опыт, удачные решения - это часто может в будущем пригодиться. На одних учебниках многому не научишься, нужны задачники с решениями, эти самые cookbooks. Так что в основном я к ним отношусь хорошо, и даже очень :)

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

Ссылка на комментарий
Поделиться на другие сайты

Тролль

Завтра наступило 13-го...

Вот такую задачу я решала. Честно говоря, с помощью-подсказкой, потому что ничего не знала про указатель типа void. Так я с ним и познакомилась.

Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех

типов: "целое число", "вещественное число", "строка". В разных узлах одного списка может быть любой объект

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

У списка должен быть метод, выводящий все элементы.

Класс списка реализовать с "нуля" (не используя темплейты, std::list или аналоги)

При реализации класса "строка" можно использовать std::string.

А это код. Только мне что-то подсказывает, что это не окончательный вариант. Приходится работать на нескольких компьютерах, и иногда я забываю переносить завершенную программу на домашний компьютер. Функцию удаления узла списка так и не реализовала. Не заладилось с удалением с самого начала, и я его честно отбросила. :)

#include <string>#include <iostream>using namespace std;class TListNode{private:void* uniVar;char varId;public:TListNode *next, *prev;TListNode (){ varId = ' '; uniVar = NULL; }TListNode (int data){ varId = 'i'; uniVar = new int(data);}TListNode (double data){ varId = 'd'; uniVar = new double(data);}TListNode (string data){ uniVar = new string(data); varId = 's';}~TListNode (){ switch (varId) { case 'i':  {   delete (int *)uniVar;   break;  } case 'd':  {   delete (double *)uniVar;   break;  } case 's':  {   delete (string *)uniVar;   break;  } }}int operator + (int value){ return *((int *)uniVar) + value;}double operator + (double value){ return *((double *)uniVar) + value;}int operator = (int value){ varId = 'i'; delete uniVar; uniVar = new int (value); return *((int *)uniVar);}double operator = (double value){ varId = 'd'; delete uniVar; uniVar = new double (value); return *((double *)uniVar);}string operator = (string value){ varId = 's'; delete uniVar; uniVar = new string (value); return *((string *)uniVar);}void Show(){ switch (varId) {  case 'i':   { cout << "int\t" << *((int *)uniVar) << endl; break;   }  case 'd':   { cout << "double\t" << *((double *)uniVar) << endl; break;   }  case 's':   { cout << *((string*)uniVar) << endl; break;   } }}};class TList{TListNode *head, *tail;public:TList () : head(NULL), tail(NULL) {}~TList (){ while (head) {  tail = head->next;  delete head;  head = tail; }}void Add (int value){ TListNode *temp = new TListNode(); temp->next = NULL; *temp = value; Insertion(temp);}void Add (double value){ TListNode *temp = new TListNode(); temp->next = NULL; *temp = value; Insertion(temp);}void Add (string value){ TListNode *temp = new TListNode(); temp->next = NULL; *temp = value; Insertion(temp);}void Insertion (TListNode *temp){ if ( head != NULL ) {  temp->prev = tail;  tail->next = temp;  tail = temp; } else {  temp->prev = NULL;  head = tail = temp; }}void Show (){ TListNode *temp = tail; while ( temp != NULL ) {  temp->Show();  temp = temp->prev; }}};

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

Ссылка на комментарий
Поделиться на другие сайты

Сейчас, прощупывая сферу работы программистом, столкнулась с тем, что работодатели, которым нужны Web-программеры (стандартный набор - PHP, JavaScript, MySQL), дают одно и тоже тестовое задание. Ту задачу, что описана была выше, дали для устройства на работу С/С++-программистом. (Кстати, ответ почему-то так и не прислали. Или если их что-то не устраивает, то они даже ответом не балуют?)

А какие еще дают задачи на С/С++ для устройства на работу? Может, где-то есть тема или ресурс, посвященные этому вопросу? Хочу попробовать свои силы дома, чтоб не позорится в случае чего. Потому что чем больше изучаю, тем больше вопросов появляется и хочется чего-то большого. Наверное, реального задания...

Ссылка на комментарий
Поделиться на другие сайты

Иазяв

По программе - вроде бы почти все нормально, за исключением того, что я не понимаю, как можно по delete uniVar; уничтожить то, на что ссылается указатель, который ни на какой тип данных не ссылается. Какой-то случайный адрес он и без инициализации, конечно, содержит (а при инициализации содержит NULL, то есть обычно нуль) - но компилятор понятия не имеет, что там по этому адресу и сколько байтов освобождать.

Относительно собеседования при приеме на работу - трудно сказать, что хотят, то и спрашивают, могут дать что-то написать, могут что-то теоретическое спросить. Лучше принести с собой какие-то свои программки и показать, тогда могут ограничиться тем, что попросят объяснить что-то в них. Потому что основной вопрос - что ты уже делал и умеешь?

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

To Иазяв

Не вредно заглядывать на Хабр - случаются весьма познавательные посты.

Ссылка на комментарий
Поделиться на другие сайты

Тролль

Надо было delete делать без указания типа или вообще его не делать? До собеседования еще далеко - я не настолько сильна. А вот по email-у получить и выполнить задание - да. Они хоть не увидят, как я краснею и бледнею после того, как мне выскажут все, что думают о моей программе и о моих знаниях. Я не уверена, что тяну хотя бы на junior-уровень.

Yezhishe

Именно на Хабре я нашла статью о красоте кода по CSS, что перевернуло мое представление о Web-программах. А познавательные посты по поводу задач от работодателей или в общем познавательные?

Ссылка на комментарий
Поделиться на другие сайты

Надо было delete делать без указания типа или вообще его не делать?
Вообще не делать. Уничтожать тут нечего. Уничтожением занимается деструктор.
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте. Помогите, пожалуйста, с WinApi. Дана задача: на месте щелчка левой клавишей мыши появляется окружность. Обеспечить отображение всех окружностей при сворачивании/разворачивании окна (хранить координаты щелчков мыши).

Не получается сделать перерисовку окна при сворачивании/разворачивании.

Вот код:

#include <tchar.h>#include<iostream>#include <windows.h>#include<vector>using namespace std;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdParam,int nCmdShow){  setlocale(LC_ALL,".1251");  wchar_t szClassName[]=L"MainWindow";  wchar_t szTitle[]=L"KSR3-#2";  MSG msg;  WNDCLASS wc;  ZeroMemory(&wc,sizeof(wc));  wc.style=CS_HREDRAW|CS_VREDRAW;  wc.lpfnWndProc=WndProc;  wc.hInstance=hInstance;  wc.hIcon=LoadIcon(hInstance,IDI_APPLICATION);  wc.hCursor=LoadCursor(NULL,IDC_ARROW);//  wc.hbrBackground=CreateSolidBrush(RGB(230,230,250 ));  wc.lpszClassName=szClassName;  if(!RegisterClass(&wc)) return FALSE;  HWND hwnd=CreateWindow(szClassName,szTitle,   WS_OVERLAPPEDWINDOW,20,20,800,600,   HWND_DESKTOP,NULL,hInstance,NULL);  ShowWindow(hwnd,SW_SHOWNORMAL);  UpdateWindow(hwnd);  while(GetMessage(&msg, NULL, 0, 0))  { TranslateMessage(&msg); DispatchMessage(&msg);  }  return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT msg, WPARAM wParam,LPARAM lParam){HDC hdc;vector<POINT> points;int i=0;  switch(msg)  {  case WM_DESTROY:   PostQuitMessage(0);   break;  case WM_LBUTTONDOWN:   hdc=GetDC(hwnd);   POINT pt;   pt.x=LOWORD(lParam);   pt.y=HIWORD(lParam);   points.push_back(pt);   Ellipse(hdc,points[i].x-15,points[i].y-15,points[i].x+15,points[i].y+15);   ++i;   ReleaseDC(hwnd,hdc);   break;default:   return(DefWindowProc(hwnd,msg,wParam,lParam));  }}
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте. Помогите, пожалуйста, с WinApi. Дана задача: на месте щелчка левой клавишей мыши появляется окружность. Обеспечить отображение всех окружностей при сворачивании/разворачивании окна (хранить координаты щелчков мыши). Не получается сделать перерисовку окна при сворачивании/разворачивании.

Перерисовывайте всё на событии WM_PAINT. И используйте лучше message crackers.

P.S. Забавно :) Ещё кто-то пишет GUI чистом WinAPI.

Ссылка на комментарий
Поделиться на другие сайты

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

Какой смысл использовать "классы", если фигачить интроспекцию руками? Используйте наследовние для элементов списка. Например, так:

struct value_t {virtual void print() const = 0;};class int_t: value_t {int value;public:int_t(int value) {	this->value = value;}void print() const {	std::cout << value << std::endl;}};class double_t: value_t {double value;public:double_t(double value) {	this->value = value;}void print() const {	std::cout << value << std::endl;}};class string_t: value_t {std::string value;public:string_t(std::string value) {	this->value = value;}void print() const {	std::cout << value << std::endl;}};
Ссылка на комментарий
Поделиться на другие сайты

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

Сравните, например, описание алгебраического типа в любом ФЯП относительно некого подобия в C++:

type node_t = NTInt of int | NTFloat of float | NTString of string
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



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