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

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


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

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

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

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

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

  • 3 недели спустя...

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

минимального элемента запурхался, сам понять не могу почему...

#include <cstdlib>#include <iostream>using namespace std;void write_matrix(int ** matrix, int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++)matrix[i][j]=rand()%201-100;}void print_matrix(int ** matrix, int n){for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {cout<<matrix[i][j]<<"\t"; }cout << endl; }}int main(){srand(time(NULL));int n;cout << "Enter n: "; cin >> n;int **matrix = new int *[n];for(int i=0; i<n; i++)matrix[i]=new int[n];write_matrix(matrix,n);print_matrix(matrix,n);  //Далее пытаюсь подсчитать минимальный элемент (m)  побочной диагонали...int m=0;int i=0, j=n-1;for(;i<n-1; i++,j--)	{	if(matrix[i][j]<matrix[i++][j--]) m=matrix[i][j];	if(matrix[i][j]>matrix[i++][j--]) m=matrix[i++][j--];}cout << endl << m << endl; system("PAUSE");return EXIT_SUCCESS;}

Не хотит работать, скорее всего, функцию по-другому задумать надо, но ничто другое в голову не приходит... :bye1:

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

Архимаг:

for(;i<n-1; i++,j--)	{	if(matrix[i][j]<matrix[i++][j--]) m=matrix[i][j];	if(matrix[i][j]>matrix[i++][j--]) m=matrix[i++][j--];}

Что-то очень замысловато было задумано... :bye1:

#include<iostream.h>#include<time.h>main(){int i,j,m,n,a[20][20]; cout<<"N? "; cin>>n;  srand(time(NULL)); for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=rand()%201-100;for(i=0;i<n;i++){cout<<endl; for(j=0;j<n;j++){cout.width(8);cout<<a[i][j];}};cout<<endl<<endl; m=a[0][n-1]; for(i=0;i<n;i++)if(a[i][n-i-1]<m)m=a[i][n-i-1]; cout<<"min in the antidiagonal = "<<m<<endl; cout<<endl; getchar(); getchar(); }
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Архимаг:

for(;i<n-1; i++,j--)	{	if(matrix[i][j]<matrix[i++][j--]) m=matrix[i][j];	if(matrix[i][j]>matrix[i++][j--]) m=matrix[i++][j--];}

Что-то очень замысловато было задумано... ;)

#include<iostream.h>#include<time.h>main(){int i,j,m,n,a[20][20]; cout<<"N? "; cin>>n;  srand(time(NULL)); for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=rand()%201-100;for(i=0;i<n;i++){cout<<endl; for(j=0;j<n;j++){cout.width(8);cout<<a[i][j];}};cout<<endl<<endl; m=a[0][n-1]; for(i=0;i<n;i++)if(a[i][n-i-1]<m)m=a[i][n-i-1]; cout<<"min in the antidiagonal = "<<m<<endl; cout<<endl; getchar(); getchar(); }

Так стыдно :bye1:

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

  • 2 недели спустя...

Стыдно просить, но ситуация патовая. Учусь дистанционно (об общении с преподавателями вживую - мечта)

сам военнослужащий, времени катастрофически нехватает. Получил вот такое задание ( в сроки не улажусь)

Если кто сможет, помогите.

Создание программы для работы с файлом произвольного доступа в среде объектно-ориентированного визуального программирования С++ Builder

Создать программу “Собаки“ для работы с файлом произвольного доступа. Файл должен содержать информацию о собаках 5-ти пород.

Структура записи в файл:

кличка,

порода (‘о’ ― овчарка, ‘д’ ― дог, ‘п’ ― пудель, ‘б’ ― борзая, ‘г’ ― гончая),

возраст.

Программа должна выдавать следующую информацию:

о собаках возраста Х, Х вводится с клавиатуры,

о собаках, клички которых начинается на букву W, W вводится с клавиатуры,

о собаках породы Z, Z вводится с клавиатуры.

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

voin:

Программа собственно по заданию - для вывода по запросу данных из файла с информацией о собаках:

#include <iostream.h> #include <fstream.h> int main(void){ struct dog{char breed; char age[3]; char name[20];}w; char q[3],i; bool a;char dogs[][15]={"ovcharka	  ","dog		   ","pudel		 ",  "borzaja	   ","gonchaja	  "}; ifstream dogi_file("dogs.txt",ios::binary); if (dogi_file.fail()){cerr<<"Error of opening of the file"<<endl; getchar(); return 0;}while(true){ cout<<"\nVvedite pervuju bukvu klichki ili pervuju bukvu porodi ili vozrast"  <<endl<<"   ili \".\" dlja vihoda"<<endl; cin>>q; if(q[0]=='.')break; a=true;   ifstream dogi_file("dogs.txt",ios::binary);  while (true){dogi_file.read((char *)&w,sizeof(dog)); if(dogi_file.eof())break;if(q[0]==w.name[0]||q[0]==w.breed||q[0]==w.age[0]&&q[1]==w.age[1])   {for(i=0;i<sizeof(dogs)/sizeof(dogs[0]);i++)	  if(dogs[i][0]==w.breed)cout<<dogs[i]; 	cout.width(2); cout<<w.age<<"   "<<w.name<<endl; a=false;}} if(a)cout<<"nichego ne najdeno"<<endl;}dogi_file.close(); }

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

#include <iostream.h> #include <fstream.h> int main(void){ struct dog{char breed; char age[3]; char name[20];}w; ofstream dog_file("dogs.txt",ios::binary); while(true){ cout<<"\nPervaja bukva porodi (\".\" - vihod) ? ";  cin>>w.breed; fflush(stdin); if(w.breed=='.')break;  cout<<"Vozrast ? "; cin>>w.age; fflush(stdin); cout<<"Klichka ? "; cin.getline(w.name,20); fflush(stdin); dog_file.write((char *)&w,sizeof(dog));}dog_file.close();}

C++ Builder у меня не установлен, запускал на Dev-C++, это не должно влиять на результат. Кроме того, для устранения проблем с русскоязычными шрифтами под DOS вместо кириллицы я использовал транслит - так часто делают в учебных заданиях с консольным вводом-выводом.

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

  • 3 недели спустя...

C++ Builder у меня не установлен, запускал на Dev-C++, это не должно влиять на результат.

Какраз это влияет на результат. Я Хотел создать топик с этим вопростом, но поскольку она немного затронута тут...

В топике приводиться пример из книги "С++ для чяйников" я её тоже начал читать, там есть такой код:

#include <stdio.h>#include <iostream.h>#include <conio.h>int main (int nNumberoofArgs, char* pszArgs[]){int nNCelsius;cout << "Celsia:";cin >> nNCelsius;int nNFactor;nNFactor = 212 - 32;int Result;Result = nNFactor * nNCelsius/100 + 32;cout << "faringeit:";cout << Result << endl;return 0;}

При этом в DevC++ он компилится и отрабатывает, а вот в borland c++ builder 6.0 он не компилится, пишет:

[C++ Error] Project1.cpp(9): E2451 Undefined symbol 'cout'[C++ Error] Project1.cpp(10): E2451 Undefined symbol 'cin'[C++ Error] Project1.cpp(16): E2451 Undefined symbol 'endl'[C++ Warning] Project1.cpp(18): W8004 'Result' is assigned a value that is never used 

Как же людям учить С++ если, у разных копиляторов при присоединени одних и тех же библиотек(#include <stdio.h>, #include <iostream.h>, #include <conio.h>), разные названия функций? Кпримеру: функция "cout" в borland c++ builder 6.0 заменина на "printf" я так понял, при этом синтаксис у неё совсем другой. Или я что-то недопонял? Но всётаки факт есть факт в DevC++ компилиться, а в c++ builder нет, какже учить С++ если в разных средах всё своё? Только прошу помидорами не закидывать. Ибо молодой я ещё, не опытный, если ляпнул какуюто глупость мне простительно :doh:

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

svGhost:

Цитата(Тролль @ 22.11.2009, 02:33)

C++ Builder у меня не установлен, запускал на Dev-C++, это не должно влиять на результат.

Я имел в виду - именно для данной программы. В остальных случаях - процитирую собственный давний пост:
При изучении C++ очень часто жалуются, что вот кто-то взял учебник, а примеры из него не работают - значит, человек использует другую версию языка, точнее, библиотек. Поэтому надо брать учебник или справочник по конкретной версии C++ - там будет описан именно тот вариант библиотек и заголовочных файлов, который есть в этой версии.

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

По-моему, я ответил тут и на вопрос "Как же людям учить С++, если, у разных компиляторов при присоединении одних и тех же библиотек, разные названия функций?".

Учат не вообще C++, а конкретную реализацию. В разных реализациях обычно довольно много общего, поэтому перейти с одной реализации на другую на порядок легче, чем разобраться с первой. Но учить "вообще" C++ примерно то же, что учить "вообще" управление самолетом. Летчик может легко переучиться с одного самолета на другой, но я не доверил бы возить пассажиров на АНе летчику с ТУ. Хотя у меня нет сомнений, что хороший летчик быстро освоится и в кабине АНа. Но не сразу.

Если взять автобиографию Михаила Девятаева "Полет к солнцу" - ему даже в Германии поставлен памятник, этот попавший в плен летчик оказался в лагере в немецком ракетном центре и смог совершить побег на захваченном им с аэродрома ракетного центра самолете "Хейнкель" (его книга доходит только до этого момента), потом в Союзе попал в лагерь, был вытащен из него Королевым и на основе опыта, вынесенного из работы заключенным в ракетном центре, оказал большую помощь в копировании Фау-2, названной Р-1 и впоследствии превратившейся в Р-7, вынесшую на орбиту Гагарина, - то прочитаешь, что он не смог бы лететь на Хейнкеле, если бы ему не удалось проследить действия тренировавшегося на земле немецкого пилота одного из "Хейнкелей".

В отношении ошибки компиляции в C++ Builder - у меня он не установлен, как я писал, так что проверить "в реале" я не могу, а это единственный критерий, но честно говоря, мне кажется, что и эта программа должна была бы компилироваться и в C++ Builder без проблем. Если нет, то скорее всего что-то с твоим C++ Builder. Я бы полез в iostream.h и проверил наличие там cout и cin.

Кпримеру: функция "cout" в borland c++ builder 6.0 заменина на "printf" я так понял, при этом синтаксис у неё совсем другой. Или я что-то недопонял?
Это как раз совсем другое. Это параллельные наборы средств ввода-вывода, и в любом C++ есть оба этих набора. В C использовались функции printf и scanf (и другие подобные), для совместимости они перешли и в C++, но параллельно к ним был разработан набор функций более высокого уровня (cout, cin), основанных на потоках и модели классов. Они работают в несколько раз медленнее, но часто более удобны в применении. Но, не говоря уже о быстродействии, есть возможности, которые были в старой библиотеке и не попали в новую, так что полезно знать обе системы ввода-вывода. Хотя, как обычно, в разных реализациях C++ функции cout и cin имеют несколько отличающиеся возможности, и то, что выводится с их помощью в одной реализации, может привести к ошибке компиляции в другой. Поэтому сначала надо учить одну конкретную реализацию C++, а когда и если понадобится перейти к другой - что ж, большинство приемов останутся прежними, а для тех, о которых компилятор вежливо сообщит, что они с ним не проходят, надо будет искать обходные пути. Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

но честно говоря, мне кажется, что и эта программа должна была бы компилироваться и в C++ Builder без проблем.

Именно это меня и возмутило что в однй из наиболее распространённых сред разработки С++, сразу несколько одних из наиболее стандартных функций ни сработали.

Как вы и посоветовали я полез в iostream они оказались совершенно разными в Dev-C++ дествительно оказались описания функций:

// Copyright © 1997-1999, 2000 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library.  This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING.  If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.#ifndef _BACKWARD_IOSTREAM_H#define _BACKWARD_IOSTREAM_H 1#include "backward_warning.h"#include <iostream>using std::iostream;using std::ostream;using std::istream;using std::ios;using std::streambuf;using std::cout;using std::cin;using std::cerr;using std::clog;#ifdef _GLIBCXX_USE_WCHAR_Tusing std::wcout;using std::wcin;using std::wcerr;using std::wclog;#endifusing std::ws;using std::endl;using std::ends;using std::flush;#endif// Local Variables:// mode:C++// End:

а в C++ Builder я так понимаю просто присоединятся какието другие библиотеки:

/***************************************************************************  Wrapper header file used to select STL via defines.*  Default is STLport.**************************************************************************//**	  C/C++ Run Time Library - Version 11.0**	  Copyright © 2002 by Borland Software Corporation*	  All Rights Reserved.**/#ifdef _USE_OLD_RW_STL# include <oldstl\iostream.h>#else# include <stlport\iostream>/* Define __STD_IOSTREAM__ here to cause sysclass.h to define  VCL_IOSTREAM which causes certian iostream operators to get defined*/#define __STD_IOSTREAM__#endif#if !defined(__USING_STD_NAMES__) && defined(__cplusplus)using namespace std;#endif /* __USING_STD_NAMES__ */

Почем так? Для меня остаётся загадкой. Это очень запутывает изучение языка, особенно если он первый за который вообще взялся, но я его уже для себя выбрал и посараюсь домучать до конца.

Чтож благодарю за подробный ответ. Думаю по мере моего изучения этого языка мне нираз прийдёться обращаться к вам за помощью, надеюсь вам не трудно буде помогать советами и посказками.

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

Все же эти функции в таком простом варианте их использования обязаны работать и в Borland C++ Builder. У меня появилось одно предположение: не компилировался ли исходный текст как C, а не C++, файл, с расширением c, а не cpp? В C функций cin и cout нет, и даже при подключенных заголовочных файлах C их использовать не сможет. Очень похоже на случившуюся ситуацию.

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

Все же эти функции в таком простом варианте их использования обязаны работать и в Borland C++ Builder. У меня появилось одно предположение: не компилировался ли исходный текст как C, а не C++, файл, с расширением c, а не cpp? В C функций cin и cout нет, и даже при подключенных заголовочных файлах C их использовать не сможет. Очень похоже на случившуюся ситуацию.

Нет он компилился как С++ и вы верно сказали дествительно они должны работать так как в статье "Алгоритмы в С++. Часть 1. Сортировки"приводиться следующий тест:

Все программы протестированы на Borland C++ Builder 6, но должны

идти и на других.

Какраз та версия что и у меня, ниже в это статье приводиться пример исходного кода:

#include <iostream>using namespace std;//========================================================int array[100];							   // наш массив//========================================================void Sort(int col)					// сортировка{int trash=0;							  // временная переменная для								  // хранения промежуточного								// результатаfor (int i=1;  i<=col ;  i++)			// пока не равно количеству								// елементов	  {	 for (int j=1;  j<=col-i;  j++)	 // пока не равно col-i		{		   if (array [j]>array [j+1])	 // если левый элемент больше			 {				trash=array[j];		   // правого, то меняем				array [j]=array [j+1];	// их местами				array [j+1]=trash;			 }		}  }}//========================================================void Out(int col)							// вывод на экран нашего{  for (int i=1;  i<=col;  i++)		  // массива после сортировки cout << array [i] <<" ";  cout << endl;  }//========================================================int main(){  int col_el;  cout << "  Enter length of array"<< endl;  cin >> col_el;							 // считываем количество элементов   for (int n=1; n<=col_el; n++)		 // считываем элементы массива	 cin >> array[n];  Sort(col_el);	  cout << "Result is :"<<endl;		   // сортируем их...	  Out(col_el);						 // и выводим	  cin >> col_el;							 // ждем нажатия клавиши     return 0;}

Как вы видите тут в Borland "C++ Builder 6" использовали теже библиотеки и теже функции, значит у меня что то с библиотеками, тобиш с файлами содержащимися в папке "Include". Теперь у меня появилась задача найти эти библитеки для "C++ Builder 6" отдельно, потому что живу в одалённой части России и трафик очень дорогой, качать заново весь "C++ Builder 6" накладно обойдёться. Или погуглю может кто и сталкивался с подобной проблемой.

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

а в C++ Builder я так понимаю просто присоединятся какието другие библиотеки:

#ifdef _USE_OLD_RW_STL# include <oldstl\iostream.h>#else# include <stlport\iostream>

В параметрах проекта не задано _USE_OLD_RW_STL - следовательно вместо библиотеки iostream.h подключается iostream.

А в iostream выше перечисленные функции объявлены в пространстве имён std

Есть 3 варианта решения:

1 - задайте в параметрах проекта _USE_OLD_RW_STL

2 - после подключения библиотек напишыте using namespace std;

3 - или перед каждой функцыей добавте std::cout <<...

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

В параметрах проекта не задано _USE_OLD_RW_STL - следовательно вместо библиотеки iostream.h подключается iostream.

Именно так и делал. А вот:

2 - после подключения библиотек напишыте using namespace std;

Помогло! + Надобыло добавить

#include <vcl>

Спасибо вам огромное что помогли разобраться. И тролю тоже огромное спасибо.

П.С. Наберу 20 постов с меня + :)

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

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

Помогите ПЛИЗ сделать лабу по с++, у самого не получается. А по форуму не нашел решения.

"Напишите иерархию наследования для класса Quadrilateral, Trapezoid, Parallelogram, Rectangle и Square. Используйте Quadrilateral как базовый класс иерархии. Сделайте иерархию настолько глубокой, насколько это возможно. Закрытыми данными класса Quadrilateral должны быть пара координат (x, y) четырех угловых точек Quadrilateral. Напишите программы которая создает и отображает объекты этих классов.

!

Предупреждение:

Не надо постить одно и то же с разрывом в 20 минут.

Лишнего удалил.

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

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

Помогите пожалуйста найти C++ для Windows (программа где происходит само програмирование).

Оболочек вроде несколько? Какая лучше?

Спасибо.

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

Vitali85:

Обычно используются три варианта:

а) Visual C++ 2010 Express

Это бесплатный учебный вариант наиболее распространенной профессиональной среды программирования от Microsoft на C++ для Windows. Впрочем, достаточно мощный и для написания многих профессиональных программ. Можно скачать тут, на странице надо выбрать "All - Offline Install ISO image file", а затем в появившемся окошке язык - Russian.

б) C++ Builder

Более популярен как среда обучения, хотя используется и профессионалами, был разработан компанией Borland, в 2006 году его разработчики отделились от Borland, которая посчитала дальнейшую разработку C++ Builder нерентабельной, в компанию CodeGear, которая в 2008 году вошла в компанию Embarcadero. Это shareware, триальную версию скачать можно тут.

в) Dev-C++

Очень компактная (всего 9 мегабайт) бесплатная среда разработки для начального обучения, разрабатывавшаяся энтузиастами, хорошо подходит для разработки консольных программ и изучения собственно языка, можно скачать тут, в настоящее время развивается дальше для обеспечения лучшей работы с оконным интерфейсом Windows под названием wxDev-C++ , но для обучения основам C++ по-прежнему обычно используют Dev-C++.

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

  • 1 год спустя...
class Counter {public:Counter() {pVal=new int; *pVal=0;};~Counter() {}int GetItsVal(){return *pVal;}void SetItsVal(int x) {*pVal=x;}private:int *pVal;};

Есть такой демонстрационный класс. Как видно, отсутствует стандартный конструктор копирования и не перегружен оператор присваивания.

Таким образом, при выполнении

Counter a1; Counter a2(a1); 

Запускается стандартный конструктор, но что он делает если он не определен ?

При

Counter a1; Counter a2;a1=a2;

Происходит то же самое что и в предыдущем случае ?

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

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

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

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

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

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

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

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

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

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

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



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