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

Помогите с C++


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

daff_9000:

Ох, учил бы ты сначала Pascal... C и C++ - это нечто вроде стенографии, по ним учиться - то же, что учиться письму сразу стенографией...

Конкретно по вопросу: вот пример.

#include <iostream.h>#include <conio.h> main(){cout<<"1. root"<<endl; cout<<"2. square"<<endl; cout<<"3. volume"<<endl; switch(_getch()){case '1': cout<<"program 1"<<endl; break; case '2': cout<<"program 2"<<endl; break; case '3': cout<<"program 3"<<endl; break; default : cout<<"no such program!"<<endl; }_getch();}

Тут при нажатии, после появления меню, клавиши с цифрой 1, 2 или 3 выдается соответствующая строка. Вместо выдачи строки можно включить любую последовательность операторов или вызов какой-нибудь отдельно описанной подпрограммы (по терминологии C++ - функции)

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

  • Ответов 169
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

daff_9000:

Ох, учил бы ты сначала Pascal... C и C++ - это нечто вроде стенографии, по ним учиться - то же, что учиться письму сразу стенографией...

Конкретно по вопросу: вот пример.

#include <iostream.h>#include <conio.h> main(){cout<<"1. root"<<endl; cout<<"2. square"<<endl; cout<<"3. volume"<<endl; switch(_getch()){case '1': cout<<"program 1"<<endl; break; case '2': cout<<"program 2"<<endl; break; case '3': cout<<"program 3"<<endl; break; default : cout<<"no such program!"<<endl; }_getch();}

Тут при нажатии, после появления меню, клавиши с цифрой 1, 2 или 3 выдается соответствующая строка. Вместо выдачи строки можно включить любую последовательность операторов или вызов какой-нибудь отдельно описанной подпрограммы (по терминологии C++ - функции)

Да я бы рад, но у универе требуют си ++ (

case '1': cout<<"program 1"<<endl; break;

case '2': cout<<"program 2"<<endl; break;

case '3': cout<<"program 3"<<endl; break;

здесь, 1,2 и 3 это что, имя срр файлов ?

Если не сложно, праспишите пожалуйста анализ кода.

Мне нужно что бы был один срр файл, собственно выбор номера программы. При выбори, происходило обращение к другим срр.

Извените, если не корректно объясняюсь. :)

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

Дело не в корректности...

Мне нужно что бы был один срр файл, собственно выбор номера программы. При выбори, происходило обращение к другим срр.
При выборе не бывает обращения ни к каким cpp. В cpp файле хранится исходный код программы, записанный на языке C++. Cpp файл читается компилятором и его текст переводится в запись машинных команд, которая помещается в exe файл. Никакого выполнения при этом нет. Если хочется, чтобы было обращение к "другим cpp", их текст нужно включать в текст этого cpp. Конечно, скомпилированная программа может обращаться к другим приложениям, но файлы исходных текстов программ (cpp) тут ни при чем.
здесь, 1,2 и 3 это что, имя срр файлов ?
1, 2 и 3 в примере - это символы на клавиатуре, клавиши с которыми будут нажиматься пользователем при выборе им выполняемого варианта.

Сначала в программе выводятся строки с пояснениями, что будет означать нажатие клавиш с этими символами. Затем выполняется оператор выбора вариантов switch, внутри которого вызывается функция _getch(), ждущая нажатия клавиши на клавиатуре и передающая полученный код для анализа оператору switch, который сравнивает этот код с кодами символов, заданными в строках со словами case. При совпадении кодов выполняется последовательность операторов, следующая за соответствующим case, там у нас для примера просто записаны выводы сообщений о выборе данного пункта меню. На самом деле, конечно, выбирать будет не оператор, на этапе выполнения программы его уже не существует, а машинные команды в exe файле, которые будут получены после преобразования cpp файла с этим оператором в exe файл.

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

Спасибо огромное.

Я вот делал так с функцие отображения кирилицы: записал ее в отдельный файл .h, задал подключение #include "rus.h"...

А можно как нибудь сделать, что бы каждая моя программка была отдельным файлом, и подключалась при определенном выборе 1, 2 или 3... ?

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

daff_9000:

Я вот делал так с функцие отображения кирилицы: записал ее в отдельный файл .h, задал подключение #include "rus.h"...
Да, выражение #include включает текст любого файла вместо себя туда, где оно находится. Можно даже сделать выбор, включать тот или другой файл, вот только этот выбор будет происходить при компиляции исходного кода программы (то есть в начале исходного кода ты уже должен будешь указать или 1, или 2, или 3, а не во время выполнения программы), то есть в зависимости от этого выбора просто будет создан тот или другой exe-файл, во время его выполнения уже никакого выбора не будет.

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

а) просто вызов из одной программы другой. Новая программа откроется в новом окне.

б) вызываемые программы компилируются в виде не exe-файлов, а dll-файлов (Dynamic Link Library) - подключаемых, при потребности, в ходе выполнения основной программы заранее скомпилированных кусков кода. Самостоятельно такие куски кода выполняться не могут.

в) использование технологии OLE (Object Linking and Embedding ), тогда дополнительная программа объединяется с основной так, что окно объединенной программы содержит элементы и той и другой программы, например, можно в Word вставить объект графического редактора Paint, при этом вид WORD станет гибридом видов Word и Paint, большая часть пунктов меню и кнопок обеих программ уйдет, часть объединится и останется. Программирование таких вещей сложно.

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

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

Спсибо за разъяснение. А можешь конкретней объяснить как осуществить пункт А. или направь на литературу.

Т.е. я могу создать файл .h назвать его, скажем, qwerty.h, подключить к проекту и в любое место программы вставить название файла qwert, тогда он якобы добавиться в код ?

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

daff_9000:

Т.е. я могу создать файл .h назвать его, скажем, qwerty.h, подключить к проекту и в любое место программы вставить название файла qwert, тогда он якобы добавиться в код ?
Нет, не добавится. Надо вставить в программу не просто название файла, а строку

#include "qwerty.h"

Тогда - без всяких якобы. Смотри мой пример в 22-м посте этой темы.

можешь конкретней объяснить как осуществить пункт А.
В том же примере замени

cout<<"program 2"<<endl

на

system("calc.exe")

При нажатии клавиши с цифрой 2 будет вызываться калькулятор Windows.

Если понравилось, сделай еще замену

cout<<"program 3"<<endl

на

system("mspaint.exe")

Теперь при нажатии клавиши с цифрой 3 будет вызываться графический редактор Windows :bye1:

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

daff_9000: Нет, не добавится. Надо вставить в программу не просто название файла, а строку

#include "qwerty.h"

Тогда - без всяких якобы. Смотри мой пример в 22-м посте этой темы.

А как указать, в каком месте он должен добавться ? :bye1:

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

error C2601: 'function' : local function definitions are illegal

Error executing cl.exe.

из-за чего может возникать данная ошибка еомпилятора ?

Microsoft Visual C++ 6.0

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

А как указать, в каком месте он должен добавться ?
Где будет строка с #include, там и лдобавится. На этом самом месте, вместо этой строки. И не обязательно файл .h, любой указанный текстовый файл.
error C2601: 'function' : local function definitions are illegal

из-за чего может возникать данная ошибка еомпилятора ?

Он же пишет - неверное описание функции. Например, бывает, когда одна функция описана внутри другой функции.
Ссылка на комментарий
Поделиться на другие сайты

Подскажите пожалуйста, как сделать пароль к програмке.

Я это реализовал след. образом, возможно и не рационально... =)

...

int x;

cin >> x;

if (x = 6667)

здесь код саймой программы

else

cout >> Пароль неверный

...

Два вопроса =) :

1) Как можно сделать иначе ? =)

2) Как можно сделать, что бы пароль мог содержать текст...

ну что то типо

if ( x = pass) и т.д. =)

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

1) Зачем же код программы помещать внутри if ? Лишний уровень вложенности запутывает программу. Лучше просто ввести проверку, если она прошла - иднм дальше, не прошла - застреваем на этом месте (это, конечно, вариант для дилетантов, хорошая программа не должна обижать взломщика - должно запуститься что-нибудь безобидное, пусть думает, что пароль подошел :) ).

#include <cstring>

...

string p,password="mypass";

for(;:) {cin>>p; if(p!=password)cout<<"Error password!"<<endl; else break;}

...

2) Использовать для хранения и ввода пароля строки, как в примере по п.1 (строка с паролем в варианте по примеру должна быть без пробелов).

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

Спасибо!!!

Если не трудно, можно на конкретном примере.

#include <iostream>float main(float){float a,b;cout << "Vvedite znachenie a:" << endl; cin >> a;cout << "Vvedite znachenie b:" << endl; cin >> b;cout << "a=\t" << b << endl;cout << "b=\t" << a << endl;return 0;}

Как модернизировать данный код...?

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

#include <iostream.h>

#include <string.h>

float main(float)

{

float a,b;

char p[30],password[30]="mypass";

while(true){cin>>p; if(strcmp(p,password))cout<<"Error password!"<<endl; else break;}

cout << "Vvedite znachenie a:" << endl;

cin >> a;

cout << "Vvedite znachenie b:" << endl;

cin >> b;

cout << "a=\t" << b << endl;

cout << "b=\t" << a << endl;

return 0;

}

Свой пример перевел в стиль C, без использования <cstring>

P.S. Строку с оператором while можно сделать немного красивее:

while(cin>>p,strcmp(p,password))cout<<"Error password!"<<endl;

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

Можете вкратце объяснить основной элемент теории про функции, возвращающие более одного результата.

Или четкие ссылки укажите плз, на инфу.

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

Теории чего? Математики или C++? Если речь о C++, то у него нет никакой теории - только описание. И его функции всегда возвращают только один результат, возможно, пустой. Конечно, результат может иметь составные части, как и число 123 можно рассматривать как состоящее из трех результатов - 1, 2 и 3 :bye1:

P.S. Функция может также изменять свои аргументы. Это называется побочным эффектом. В принципе этого следует избегать, так как это запутывает программу, вроде использования оператора goto, но довольно часто это используется.

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

(Википедия)

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

#include <math.h>

...

double s=0,p=0; int n=4; for(int i=1;i<=n;i++){p+=sin(i); s+=1/p;}

Естественно, n равно тут 4 только для примера.

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

#include <math.h>

...

double s=0,p=0; int n=4; for(int i=1;i<=n;i++){p+=sin(i); s+=1/p;}

Естественно, n равно тут 4 только для примера.

Спаибо !

А что здесь означает s+ и p+ ?

А да, и зачем тут начальное нулевое значение присваивается ? для s и p

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

daff_9000

p+=sin(i); s+=1/p;

А что здесь означает s+ и p+ ?

Если я не ошибаюсь, то это упращенная запись для :

p=p+sin(i);s=s+1\p;

А нулевое значение присвоено для того, чтобы первый расчет при проходе цикла получился корректным.

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

  • 1 месяц спустя...

Помогите плиз с лабой, расскажите алгоритм написания, и что означает инвертирование одномер. массива ? (((

Написать программу, выполняющую инвертирование трех одномерных массивов: A(20),B(10) C(15). Напишите функции :

1. Заполнения массива случайными числами в диапазоне от –50 до +50.

2. Вывода одномерного массива.

3. Инвертирования одномерного массива.

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

  • 3 месяца спустя...

Подскажите как осуществить простенькую программу, скажем,

введите число 1 или 2.

если один - открыть Paint

если 2 - запустить колькулятор

?)

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

daff9000:

Пост.

Извеняюсь за невнимательность...

Как я понял, эта функция открывает приложения системы, а как таким же образом открыть любой файл, или запустить программу, скажем World ?

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

daff9000:

Эта функция просто выполняет роль обычной командной строки, то есть вызывает командный интерпретатор (командную строку) Windows и передает ему свой аргумент.

calc.exe или mspaint.exe запускаются так просто потому, что эти программы лежат в папках, которые командный интерпретатор автоматически просматривает при поиске указанного файла, эти папки можно задать в настройках Windows, исходно это несколько системных папок вроде папки WINDOWS. Если надо запустить произвольную программу, то надо дать в параметре функции system полный путь к выполняемому файлу, чтобы командный интерпретатор его нашел. Например, если Word (это только пример, на самом деле адрес, скорее всего, будет отличаться) имеет полный адрес C:\Office\winword.exe, то вызывать его надо командой system("C:\\Office\\winword.exe"). Знаки \ тут удваиваются из-за правил записи строковых констант в C и C++, потому что знак \ относится к специальным знакам. Если в пути есть папки с пробелами в именах, то еще немного сложнее. Тогда надо указывать либо короткие имена папок (в них нет пробелов), либо использовать, как обычно, длинные имена с пробелами, но передаваемую командному интерпретатору строку заключать в кавычки (и не забыть при этом, что знак кавычек для строковых констант C и C++ также является специальным знаком). Поэтому, если бы тот же Word находился в папке C:\My Office, то есть в имени папки имелся пробел, то вызов Word'а выглядел бы так: system("\"C:\\My Office\\winword.exe\"")

C и C++ - очень мощные, но "нечеловеческие" языки, созданные профессионалами для профессионалов и заполненные всякими исключениями и фокусами, в их синтаксисе легко запутаться.

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

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

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

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

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

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

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

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

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

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

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



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