Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2007, 20:28   #1
Clubber
 
Регистрация: 14.11.2007
Сообщений: 3
По умолчанию Программа в С++

Привет! Я новичок в языке С++. Не успеваю с лабработами в универе. Помогите!
У меня есть прога. Но она почему-то не идёт. Посмотрите пожалуйста что можно сделать с ней.
Вот условие: сформировать одномерный массив целых чисел, используя датчик случайных чисел. Распечатать полученный массив. Поменять местами минимальный и максимальный элементы массива, удалить из массива все элементы, превышающие его среднее значение более чем на 10%.
Код:
 // Lab 4.cpp : Defines the entry point for the console application.
//
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

char* Rus(const char* text);

void main()
{

int n;
int a[100], i, j, min_pos, max_pos;
cout<<Rus("Введите размерность массива:")<<endl;
cin>>n;
cout<<Rus("Напечатать массив:");

for(i=0; i<n; i++){
	a[i]=rand()%100;
       cout<<a[i]<<"  ";
        }
cout<<"\n";

int max=a[0];
for(int i=1; i<n; i++){
if(a[i]>max) max=a[i];
max_pos=i;
}

int min=a[0];
for(i=1; i<n; i++){
if(a[i]<min)min=a[i];
min_pos=i;
}

int b=a[max_pos];
a[max_pos]=a[min_pos];
a[min_pos]=b;
//for(int i=1; i<n; i++)

double p;
for(i=0; i<n; i++){
p+=a[j];
j++;
}
p=p/n;

if((a[i]-p)/p>0.1)
   for (int p=i;p<n;p++)
    {
    a[i]=a[i+1];
     // i=i-1;
        }
          cout<<Rus("Выведите массив с преобразованиями:")<<endl;
        for(i=0;i<n;i++)

     cout<<a[i]<<" ";
     getch ();
}

     char bufRus[256];
     char* Rus(const char* text)
     {
       CharToOem(text, bufRus);
       return bufRus;
         }

Последний раз редактировалось AlDelta; 16.11.2007 в 02:21.
Clubber вне форума Ответить с цитированием
Старый 16.11.2007, 00:24   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Код:
#include<iostream>
#include<windows.h>
#include<Ctime>

using namespace std;

int* delMas(int mas[], int &n, int ud_el);

void main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  srand(time(0));
  int n;
  cout<<"Введите размерность массива ";
  cin>>n;
  int *mas = new int [n];
  for(int i=0;i<n;i++)
  {
	  mas[i]=rand()%100;
  }
  cout<<"Массив "<<endl;
  for(int i=0;i<n;i++)
  {
	  cout<<mas[i]<<" ";
  }
  cout<<endl;
  //поиск максимального элемента
  int max_el=mas[0];
  int max_num=0;
  for(int i=0;i<n;i++)
  {
	  if(mas[i]>max_el)
	  {
		  max_el=mas[i];
		  max_num=i;
	  }
  }
  //поиск минимального элемента
  int min_el=mas[0];
  int min_num=0;
  for(int i=0;i<n;i++)
  {
	  if(mas[i]<min_el)
	  {
		  min_el=mas[i];
		  min_num=i;
	  }
  }
  //обмен местами
  int temp_el=mas[max_num];
  mas[max_num]=mas[min_num];
  mas[min_num]=temp_el;

  cout<<"Массив с измененными местами мин и макс элементов "<<endl;
  for(int i=0;i<n;i++)
  {
	  cout<<mas[i]<<" ";
  }
  cout<<endl;

  //поиск среднего значения
  int sum=0;
  double sr_arifm;
  for(int i=0;i<n;i++)
  {
	 	  sum+=mas[i];
  }
  sr_arifm=(double)(sum/n);
  cout<<"Среднее арифметическое "<<sr_arifm<<endl;
  //удаление элементов
  for(int j=0;j<n;)
  {
	  bool pr=false;
	  if((mas[j]-sr_arifm)>(sr_arifm*0.1))
	  {
		  pr=true;
		  mas=delMas(mas, n, j);
	  }
	  if (!pr) j++;
  }

  cout<<"Массив без элементов, значение которых больше, чем на 10%, ср. арифм. "<<endl;
  for(int i=0;i<n;i++)
  {
	  cout<<mas[i]<<" ";
  }
  cout<<endl;
 delete [] mas;
}


int* delMas(int mas[], int &n, int ud_el)
 {

	int *temp=new int[n-1];
	for(int i=0;i<ud_el;i++)
	{
		temp[i]=mas[i];
	}
	for(int i=ud_el;i<n-1;i++)
	{
		temp[i]=mas[i+1];
	}
	delete [] mas;
	n--;
	return temp;
}
Будут вопросы, пиши, объясню
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 16.11.2007, 17:46   #3
Clubber
 
Регистрация: 14.11.2007
Сообщений: 3
По умолчанию

Спасибо большое! Вы мне очень помогли. Только поясните, пожалуйста, следующие моменты:
using namespace std;

SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(0));

Эти элементы мы не проходили.
Clubber вне форума Ответить с цитированием
Старый 16.11.2007, 17:48   #4
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

using namespace std;-используем пространство имен
I like WPF
kommunist вне форума Ответить с цитированием
Старый 17.11.2007, 00:07   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

using namespace std; - используем стандартное пространство имен. Не буду распространятся в понятие "пространство имен", но в данной программе #include<iostream> не будет работать без этой записи.

SetConsoleCP(1251); - позволяет программе "понимать" вводимые русские символы

SetConsoleOutputCP(1251); - позволяет выводить русские символы.
В общем, по-умному, подключает кодовую страницу 1251, которая отвечает за русский язык.

srand(time(0)); - Используется для того, чтобы при команде rand генерировались разные числа.
Ну как бы объяснить... Случайные числа - вовсе не случайные. Они генерируются по определенной очень запутанной формуле. Если не писать данную команду, то компьютер ПОСТОЯННО берет одно какое-то число и, исходя из него генерирует числа. Например, если в проге не писать эту команду, то в массив будут заноситься числа 41 67 34 0 69 24 и т.д. Так вот, в команде srand в скобках указывается то число, которое берется за основу в генерации чисел. Но опять же при каждом запуске программы числа будут генерироваться одни и те же. Для устранения этого необходимо, чтобы бралось число, которое при каждом запуске программы изменяется. У меня в примере за основу взято системное время(time(0)). Оно будет изменяться при каждом запуске программы, и сгенерированные числа будут всегда разными
В идеале команда пишется:
srand((unsigned int) time(NULL));
это чтоб не было всяких warning'ов
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 17.11.2007 в 00:09.
ACE Valery вне форума Ответить с цитированием
Старый 18.11.2007, 11:53   #6
Clubber
 
Регистрация: 14.11.2007
Сообщений: 3
Радость

Спасибо большое за ясное пояснение! Я всё понял.
Clubber вне форума Ответить с цитированием
Старый 26.05.2010, 17:07   #7
Alice_spoon
Новичок
Джуниор
 
Регистрация: 26.05.2010
Сообщений: 1
По умолчанию

Помогите пожалуйста с программой!
Строка таблицы содержит следующую информацию о первокурсниках: фамилия, имя, отчество, группа, количество баллов
Требуется найти перечень студентов, набравших максимальное количество баллов

+реализация в виде меню и сортировка по фамилии и баллам и сохранение в бинарный файл
Alice_spoon вне форума Ответить с цитированием
Старый 14.05.2011, 04:15   #8
5niza
Новичок
Джуниор
 
Регистрация: 14.05.2011
Сообщений: 1
Печаль

ребят, плз хелп, прогулял много пар) курсач задали "часы ходики" подскажите с чего начать, ну или если есть подкиньте исходник.
5niza вне форума Ответить с цитированием
Старый 14.05.2011, 15:12   #9
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
Помогите пожалуйста с программой!
Строка таблицы содержит следующую информацию о первокурсниках: фамилия, имя, отчество, группа, количество баллов
Требуется найти перечень студентов, набравших максимальное количество баллов

+реализация в виде меню и сортировка по фамилии и баллам и сохранение в бинарный файл
Писал нечто похожее возможно поможет

Код:
#include <fstream>
#include <iostream>
#include <locale.h>
#include<string>

using namespace std;

const int MAX_SIZE=100;
int n=0;

struct client
{
	int height;
	int weight;
	string name;
} *list[MAX_SIZE];

template<class T>
void bubble_sort(client *arr[], int size, T client::*mem)
{
	client *tmp;
	for(int i=0; i < size; ++i)
		for(int j = size-1; j > i; --j)
			if ( arr[j-1]->*mem > arr[j]->*mem )
			{
				tmp=arr[j-1]; 
				arr[j-1]=arr[j]; 
				arr[j]=tmp;
			}
}

void view(client *list[], int size)
{
	for(int i=0;i<size;++i)
		cout<<list[i]->height
			<<' '<<list[i]->weight
			<<' '<<list[i]->name<<endl;
}

void show_menu()
{
cout<<"0 - выход"<<endl;
cout<<"1 - сортировать по росту"<<endl;
cout<<"2 - сортировать по весу"<<endl;
cout<<"3 - сортировать по имени"<<endl;
}

int main()
{
	ifstream in("in.txt");
	if(in)
	{
		int height;
		int weight;
		string name;
		setlocale(LC_ALL, "rus");
		while (!in.eof() && n<MAX_SIZE)
        {
			in>>height>>weight>>name;
			list[n]=new client;
			list[n]->height=height;
			list[n]->weight=weight;
			list[n]->name=name;
			++n;
        }
        in.close();
		while(true)
		{
			show_menu();
			int key;
			cout<<"->"<<endl; cin>>key;
			switch(key)
			{
			case 0:
				exit(0);
				break;
			case 1:
				bubble_sort(list, n, &client::height);
				break;
			case 2:
				bubble_sort(list, n, &client::weight);
				break;
			case 3:
				bubble_sort(list, n, &client::name);
				break;
			}
			view(list, n);
		}
	}
	else
	{
		cout<<"не удалось прочитать файл"<<endl;
	}
return 0;
}
ololo-schoolboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа. Asentian Фриланс 14 25.04.2010 17:30
программа (не код!) simple Помощь студентам 8 14.01.2008 23:36
Программа ben95 Общие вопросы Delphi 1 04.01.2008 20:52