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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2011, 01:34   #1
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию Сортировка, массив, среднеарифметическое

Здравствуйте!
Хотела бы у вас спросить, как написать данную программу:

Написать программу, запрашивающая у пользователя целое число бесконечное число раз, пока он не введёт подряд три одинаковых числа.

Отсортировать введённые данные по возрастанию, записать данные в массив- в первую строчку исходные данные, во второй отсортированные, подсчитать количество введённых значений и их среднее арифметическое.

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

У меня пока получился такой кандибобер:
Код:
#include <iostream.h>
#include <windows.h>
#include <math.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

using namespace std;

cout<<"Vvedite chislo:"<< endl; 

main(){
       long long int chislo;
       cout << "Vvedite chislo: " << endl;
       cin >> chislo;
       int kolvo=0, mass[10];
       while (chislo!=0){
             mass[kolvo]=chislo%10; 
             chislo/=10;
             kolvo++;
       }
       cout << kolvo << endl << endl; 
       }

main() {
       float a,b,c, sra; 
       cout<<"Vvedite pervoe chislo:"<< endl; 
       cin>>a; 
       cout<<"Vvedite vtoroe chislo:"<< endl; 
       cin>>b ; 
       cout<<"Vvedite tret'e chislo:"<< endl; 
       cin>>c ; 
       sra=(a+b+c)/2; 
       cout<<"Srednee arifmeticheskoe 3x chisel= "<< endl; <
       return 0; 
}<<


if (sra<0) {
                       cout << sra<<" Slishkom mnogo otritsatel'nykh znacheni' ";
           }
       }
       cout << endl << endl;
       getch();
       return 0;
}
Начала-нет, конец тоже отсутствует.
На этом я пока зависла, если не сможете подсказать, как остальное написать, то хотя бы написанное проверьте.
Спасибо.
LiPa_Sky вне форума Ответить с цитированием
Старый 21.12.2011, 03:51   #2
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию

В натуре кандибобер. main это название функции, main должен быть один!!!
у каждой функции должен быть тип(int, char, double, void). Да для полной красоты напиши very long long)).
Короче Тебе нужен массив максимально длинный. В массив вводятся данные каждый раз в следующую ячейку и после ввода проверка последних трёх.
Хотя бы начни это, так как у Тебя именно кандибобер, расказывать Тебе программирование заново навряд ли кто то будет, сделать задачу тратить время, ладно если бы Тебе нада было просто подсказать
Trust_357 вне форума Ответить с цитированием
Старый 21.12.2011, 04:40   #3
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Trust_357 Посмотреть сообщение
В натуре кандибобер. main это название функции, main должен быть один!!!
на счёт main, я знаю что должен быть один, это куски которые я смогла выдать.
Цитата:
Короче Тебе нужен массив максимально длинный. В массив вводятся данные каждый раз в следующую ячейку и после ввода проверка последних трёх.
А тут если можно поподробнее.
На сколько я поняла, мне нужно\ лучше использовать сортировку методом прямого включения- это на счёт массива.

Ещё мне не понятна фраза "бесконечное число раз", что тут делать: цикл как заворачивать, функцию вводить, паузу? Оо

Последний раз редактировалось LiPa_Sky; 21.12.2011 в 04:46.
LiPa_Sky вне форума Ответить с цитированием
Старый 21.12.2011, 04:43   #4
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Trust_357 Посмотреть сообщение
В натуре кандибобер. main это название функции, main должен быть один!!!
на счёт main, я знаю что должен быть один, это куски которые я смогла выдать.
Цитата:
Короче Тебе нужен массив максимально длинный. В массив вводятся данные каждый раз в следующую ячейку и после ввода проверка последних трёх.
А тут если можно поподробнее.
На сколько я поняла, мне нужно\ лучше использовать сортировку методом прямого включения- это на счёт массива.

Ещё мне не понятна фраза "бесконечное число раз", что тут делать: цикл как заворачивать, функцию вводить, паузу? Оо
LiPa_Sky вне форума Ответить с цитированием
Старый 21.12.2011, 06:14   #5
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от LiPa_Sky Посмотреть сообщение
На сколько я поняла, мне нужно\ лучше использовать сортировку методом прямого включения- это на счёт массива.
Используйте алгоритм быстрой сортировки Хоара: ссылка Это один из самых простых методов.
Код:
#include <stdio.h>
#include <locale.h>

#define ARRSIZE 6

void qsort(int v[], int left, int right);
void print_arr(int v[], int size);

int main () {
    int v[ARRSIZE] = {1, 2, 4, 8, 7, 6};
    setlocale(LC_ALL, "Russian");
    printf("Демонстрация функции qsort.\n\n");

    printf("Массив до сортировки:\n");
    print_arr(v, ARRSIZE);
    printf("\n");

    qsort(v, 0, 5);

    printf("Массив после сортировки:\n");
    print_arr(v, ARRSIZE);
    printf("\n");
    return 0;
}

void qsort(int v[], int left, int right) {
    int i, last;
    void swap(int v[], int i, int j);

    if (left >= right) {
        return;
    }
    swap(v, left, (left+right)/2);
    last = left;
    for(i = left+1; i <= right; i++) {
        if (v[i] < v[left]) {
            swap(v, ++last, i);
        }
    }
    swap(v, left, last);
    qsort(v, last+1, right);
}

// swap: обмен местами v[i] и v[j]
void swap(int v[], int i, int j) {
    int temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}

//print_arr: печать массива
void print_arr(int v[], int size) {
    int i;
    for(i = 0; i < size; i++) {
        printf("v[%d] = %d\n", i, v[i]);
    }
}
8Observer8 вне форума Ответить с цитированием
Старый 21.12.2011, 15:57   #6
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Используйте алгоритм быстрой сортировки Хоара: ссылка Это один из самых простых методов.
Этот метод мне не понятен, т.е. не вижу смысла в этой тусавне, тем более он достаточно громоздкий в сравнении с прямым включением.
LiPa_Sky вне форума Ответить с цитированием
Старый 21.12.2011, 17:55   #7
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

подсчитать количество введённых значений и их среднее арифметическое.

Если среднее арифметическое будет отрицательным, вернуться к вводу исходных данных значений и предупредить пользователя о том, что слишком много отрицательных значений.
Код:
int main(){
        int a;
        cin>>a;
        char d[25]={'\0'};
        
        int f=0,s=a;
        for(int i=0;c>i;i++)
{
        if(s%2==0){f++;}
        s/=10;
}
        int s=a;f=0;
        for(int i=0;c>i;i++)
{
        if(s%2==1){f+=s%10;}
        s/=10;
}
cout<<"kol-vo znachenii="<<f<<endl;
{
       float a,b,c, sra; 
       cout<<"Vvedite pervoe chislo:"<< endl; 
       cin>>a; 
       cout<<"Vvedite vtoroe chislo:"<< endl; 
       cin>>b ; 
       cout<<"Vvedite tret'e chislo:"<< endl; 
       cin>>c ; 
       sra=(a+b+c)/2; 
       cout<<"Srednee arifmeticheskoe 3x chisel= "<< endl; <
       return 0; 
}


if (sra<0) {
                       cout << sra<<" Slishkom mnogo otritsatel'nykh znacheni' ";
           }
       }
       cout << endl << endl;
       getch();
       return 0;
}
эта часть правильная?
LiPa_Sky вне форума Ответить с цитированием
Старый 21.12.2011, 20:59   #8
LiPa_Sky
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

Попробовала немного другим способом написать:
Код:
#include <iostream>
#include <windows.h>
#include <math.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int i,n,NUM,l,j,k,m,TEMP;
float a[99],b[3],q,sum,x[5],f[3][5],kr,fs[5],c[3],d[5],amax,iamax,BIG,y[5];
void main()
{

	x=1;
	i=0;
	nazad:;
	
	while(x==1)
	{

		cin >> a[i] ;
		if(i>1)
		{
			if(a[i]==a[i-1])
			{
				if(a[i-2]==a[i])
				{
					break;
				}
				
			}
		}
		i=i+1;

	}

	if(a[i]<a[i-2])
	{
		if(a[i]<a[i-1])
		{
			b[1]=a[i];
			if(a[i-1]<a[i-2])
			{
				b[2]=a[i-1];
				b[3]=a[i-2];
			}
			else
			{
				b[3]=a[i-1];
				b[2]=a[i-2];
			}

		}

		else
		{
			b[1]=a[i-1];
			if(a[i]<a[i-2])
			{
				b[2]=a[i];
				b[3]=a[i-2];
			}
			else
			{
				b[3]=a[i];
				b[2]=a[i-2];
			}
		}
	}
	else
	{
		if(a[i-2]<a[i-1])
		{
			b[1]=a[i-2];
			if(a[i]<a[i-1])
			{
				b[2]=a[i];
				b[3]=a[i-1];
			}
			else
			{
				b[3]=a[i];
				b[2]=a[i-1];
			}
		}
		else
		{
			b[1]=a[i-1];
			if(a[i]<a[i-2])
			{
				b[2]=a[i];
				b[3]=a[i-2];
			}
			else
			{
				b[3]=a[i];
				b[2]=a[i-2];
			}
		}
	}

	s4et4ik=i;

	for(i=0;i<=s4et4ik;i++)
	{
		sum+=a[i];
	}

	sum=sum/3;

	if(sum<0)
	{
		cout << "srednee <0";
		goto nazad;
	}

	 
	system("pause");

}
Но он явно косой, что тут не так?
LiPa_Sky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Среднеарифметическое в Delphi cryoffire Помощь студентам 9 11.04.2011 10:04
Среднеарифметическое каждой восьмерки SkyL1ne Помощь студентам 12 23.04.2010 22:36
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
как найти среднеарифметическое значение Lesj Общие вопросы C/C++ 1 05.06.2009 13:58
задачи на массив среднеарифметическое и min,max Stinging Паскаль, Turbo Pascal, PascalABC.NET 4 17.12.2008 17:14