Премини към съдържанието
Цветан Стоянов

Проблем с задача на C++ свързана с вектори

Препоръчан отговор


3. Напишете интерактивна програма, която ще манипулира един вектор. Тя трябва да чете от стандартния вход едно число N - броя на елементите на вектора и N на брой числа - елементите на вектора. 
След което започва да чете и изпълнява операции с прочетения вектор. Програмата трябва да изпълнява следните операции:
a) add 2 -4 - добавя числото -4 на позиция 2 във вектора (може да разчитате, че позициите ще бъдат в обсега на вектора)
б) remove 2 - премахва числото на позиция 2 във вектора (може да разчитате, че позициите ще бъдат в обсега на вектора)
в) shift_left - измествате циклично всички елементи с 1 позиция на ляво като използвате функция и подадете вектора по референция. Примерно, ако числата във вектора са "1, 2, 3", след операцията числата във вектора ще бъдат: "2, 3, 1"
г) shift_right - измествате циклично всички елементи с 1 позиция на дясно като използвате функция и подадете вектора по референция. Примерно, ако числата във вектора са "1, 2, 3", след операцията числата във вектора ще бъдат: "3, 1, 2"
д) print - изпечатва текущото състояние на елементите на вектора
е) exit - прекъсва изпълнението на програмата

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

3. Напишете интерактивна програма, която ще манипулира един вектор. Тя трябва да чете от стандартния вход едно число N - броя на елементите на вектора и N на брой числа - елементите на вектора. 

След което започва да чете и изпълнява операции с прочетения вектор. Програмата трябва да изпълнява следните операции:

a) add 2 -4 - добавя числото -4 на позиция 2 във вектора (може да разчитате, че позициите ще бъдат в обсега на вектора)

б) remove 2 - премахва числото на позиция 2 във вектора (може да разчитате, че позициите ще бъдат в обсега на вектора)

в) shift_left - измествате циклично всички елементи с 1 позиция на ляво като използвате функция и подадете вектора по референция. Примерно, ако числата във вектора са "1, 2, 3", след операцията числата във вектора ще бъдат: "2, 3, 1"

г) shift_right - измествате циклично всички елементи с 1 позиция на дясно като използвате функция и подадете вектора по референция. Примерно, ако числата във вектора са "1, 2, 3", след операцията числата във вектора ще бъдат: "3, 1, 2"

д) print - изпечатва текущото състояние на елементите на вектора

е) exit - прекъсва изпълнението на програмата

Добре. Започнете с писането, покажете ни код, ние ще помагаме. Но никой няма да ви напише цялата програма!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добре. Започнете с писането, покажете ни код, ние ще помагаме. Но никой няма да ви напише цялата програма!

#include  <iostream>
#include <vector>
using  namespace  std;
 
 
 
void shift_right(vector<int> vec)
{
    int temp = vec[vec.size()];
    for (int i = vec.size();i > 0; i--)
    {
        vec = vec;
    }
    vec[0]= temp;
}
void print_vec(vector<int> vec)
{
     for (int i = 0; i < vec.size(); i++)
    {
        cout << vec << " ";
    }
}
int main()
{
 
    int n=0, i=0;
    cin >> n;
    vector<int>vec(n);
    for (int i = 0; i < n; i++)
    {
        cin >> vec;
    }
    string operation = 0;
    while (cin >>operation)
    {
    if (operation=="add")
        {
        add_vec(vec.size()) << endl;
        }
    else if (operation=="remove")
        {
            remove_vec(vec) << endl;
        }
    else if (operation=="reverse")
        {
        reverse_vec(vec) << endl;
        }
    else if (operation == "shift_right")
        {
        shift_rightvec(vec) << endl;
        }
 
    else (operation== "exit");
        {
        return 0;
        }
    }
 
 
 
cout <<" "<< vec[1];
shift_right(vec);
for (int i = 0; i < vec.size(); i++)
    {
        cout << vec << " ";
    }
    cout << endl;
 
return 0;
}
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

#include  <iostream>
#include <vector>
using  namespace  std;
...

 

Евала пич, ти си първият, на който му правят такава забележка и си сяда да се опита да направи нещо, а не да започне да се заяжда! :)

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма смисъл да се заяждам с никого, като не зная едно нещо питам и не се правя на интересен.


  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

vector<int> shift_left(const vector<int> & v)
{
	if (v.size() < 2)
		return v;

	vector<int> shifted(v.size());
	int end = v.size() - 1;

	int temp = v[0];
	shifted[0] = v[end];
	shifted[end] = temp;

	for (size_t i = 0; i < end; i++)
	{
		shifted[i] = v[i + 1];
	}

	return shifted;
}

vector<int> shift_right(const vector<int> & v)
{
	if (v.size() < 2)
		return v;

	vector<int> shifted(v.size());
	int end = v.size() - 1;

	int temp = v[end];
	shifted[end] = v[0];
	shifted[0] = temp;

	for (size_t i = 1; i <= end; i++)
	{
		shifted[i] = v[i - 1];
	}

	return shifted;
}

void removeAt(vector<int> & v, int pos)
{
	if (pos > v.size() - 1 || pos < 0)
		return;

	v.erase(v.begin() + pos);
}

void insertAt(vector<int> & v, int pos, int value)
{
	if (pos > v.size() - 1 || pos < 0)
		return;

	v.insert(v.begin() + pos, value);
}

void print(const vector<int> & v)
{
	for (auto & n : v)
		cout << n << " ";
	cout << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	vector<int> vect = { 1, 2, 3, 4, 5 };

	auto shifted_left = shift_left(vect);
	print(shifted_left);

	auto shifted_right = shift_right(vect);
	print(shifted_right);

	removeAt(vect, 4);
	insertAt(vect, 2, 666);
	print(vect);

	return 0;
}

Функциите shift_left и shift_right не променят оригиналния вектор, а връщат нов вектор с "изместени" позиции. Според мен това е по-добрият вариант, но ако задължително трябва да променяш вектора, алгоритъмът като идея е същият, но в цикъла също трябва да използваш буферна променлива, за да пазиш временните стойности. Другите две функции съм ги написал така, че да избираш на коя позиция да изтриваш или вмъкваш елемент (съответно с каква стойност ще е елемента).

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Задача 1. Напишете програма, която изчислява щастливо произведение на два вектора - A и B. Щастливо произведение е разликата от произведенията на всеки втори елемент: A[1]*B[1] - A[3]*B[3] - A[5]*B[5] - .... Програмата трябва да чете от стандартния вход едно число N - броя на елементите на векторите. Следват N на брой числа - тези на първия вектор, след което още N числа - тези на втория. Изведете на стандартния изход щастливото произведение на двата вектора. Реализирайте програмата с функция, която приема 2 вектора и връща double.  Хелп !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

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