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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2023, 17:54   #1
ruivit
Пользователь
 
Регистрация: 14.09.2022
Сообщений: 24
По умолчанию Поиск количества отрицательных чисел кратно семи

По заданной последовательности целых чисел построить односвязный динамический список. Каждое новое число добавлять в начало списка. Затем пройти по построенному списку
и посчитать количество отрицательных чисел, входящих в список, кратных 7. После этого
память освободить... Функцию написал и она работает, но вот при поиске в массиве возникли проблемы. Сома функция как то странно проверяет значения полученные с массива. То есть программ просто прекращает после того как задаешь диапазон массива.
Код:
   #include <iostream>



// Эта функция работает нормуль

int vol(int as){ 
	int a;
	if(as < 0){
		if(as % 7 == 0){
		a = 1;	
			
		}	
		else{
			
		 a = 0;
		}
		
	} else
	{
		a = 0;
	}
	
	return a;
}



int main(int argc, char** argv) {
	
	
	int n, j, t;
	
	// ru = 0; // какаята ерунда....
	int ru;
	
	int *a;
		
	std :: cin >> n;
		
	// создаём список
	for(int i =0; n > i; i++){
		
	std :: cin >> a[i];		
	
	}

	// ищем в списке числа кратные семи
	for(int i =0; n > i; i++){
		
	t = a[i];
		
	ru = ru + vol(t); // тут тоже какая та ерунда получается. 
	}
	
	std :: cout << ru;	
	return 0;
}
Вообще как то странно с переменой типа int всё происходит я с таким в первой сталкиваюсь. Вроде как создал переменную потом тут же ей присваевываешь значения и воля всё перестаёт работать.

Код:
int a = 0;
ruivit вне форума Ответить с цитированием
Старый 06.03.2023, 18:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от ruivit Посмотреть сообщение
но вот при поиске в массиве возникли проблемы
У вас нет поиска в массиве по заданию

Код:
int *a;
Память выделять кто будет?

Код:
// создаём список
Серьезно? Вы книжку/лекции открывали?

Код:
std :: cin >> a[i];
Куда вы пишите?

Цитата:
Сообщение от ruivit Посмотреть сообщение
Вообще как то странно с переменой типа int всё происходит я с таким в первой сталкиваюсь.
И ни такое увидите, если не будете выделять память и будет писать куда попало.

Цитата:
Сообщение от ruivit Посмотреть сообщение
После этого
память освободить...
Где?
p51x вне форума Ответить с цитированием
Старый 06.03.2023, 18:57   #3
ruivit
Пользователь
 
Регистрация: 14.09.2022
Сообщений: 24
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У вас нет поиска в массиве по заданию

Код:
int *a;
Память выделять кто будет?

Код:
// создаём список
Короче исправил, в общим ерунду сморозил. Всё за работало, сейчас буду пробовать отправлять на сайт.
Код:
#include <iostream>



// Эта функция работает нормуль

int vo(int as){ 
	int a;
	if(as < 0){
		if(as % 7 == 0){
		a = 1;	
			
		}	
		else{
			
		 a = 0;
		}
		
	} else
	{
		a = 0;
	}
	
	return a;
}



int main(int argc, char** argv) {
	
	
	int a[1000];
	int n, r =0;
	
	std :: cin >> n;
	
	for(int i = 0; n > i; i++){
		
	std :: cin >> a[i];		
		
	}

	for(int i = 0; n > i; i++){
		
	if(vo(a[i]) == 1){
		r++;
		
	}
					
	}
	
	std :: cout << r;
	
	delete a;
	
	return 0;
}
Серьезно? Вы книжку/лекции открывали?

Код:
std :: cin >> a[i];
Куда вы пишите?


И ни такое увидите, если не будете выделять память и будет писать куда попало.


Где?
Короче за ново переписал код, всё за работало. Буду пробовать отправлять на сайт.
Код:
 #include <iostream>



// Эта функция работает нормуль

int vo(int as){ 
	int a;
	if(as < 0){
		if(as % 7 == 0){
		a = 1;	
			
		}	
		else{
			
		 a = 0;
		}
		
	} else
	{
		a = 0;
	}
	
	return a;
}



int main(int argc, char** argv) {
	
	
	int a[1000];
	int n, r =0;
	
	std :: cin >> n;
	
	for(int i = 0; n > i; i++){
		
	std :: cin >> a[i];		
		
	}

	for(int i = 0; n > i; i++){
		
	if(vo(a[i]) == 1){
		r++;
		
	}
					
	}
	
	std :: cout << r;
	
	delete a;
	
	return 0;
}
ruivit вне форума Ответить с цитированием
Старый 06.03.2023, 19:28   #4
ruivit
Пользователь
 
Регистрация: 14.09.2022
Сообщений: 24
По умолчанию

Прога работает. Теперь новая напасть нейросеть сайта https://olympic.nsu.ru/ не хотит принимать программу вроде как она не проходит третий этап. Вот код ее
Код:
#include <iostream>



// Эта функция работает нормуль

int vo(int as){ 
	int a;
	if(as < 0){
		if(as % 7 == 0){
		a = 1;	
			
		}	
		else{
			
		 a = 0;
		}
		
	} else
	{
		a = 0;
	}
	
	return a;
}



int main(int argc, char** argv) {
	
	// объявить массив указателей
	int *a;	
	a = new int[1000]; // выделить память для 1000 элементов
	
	int n, r =0;
	
		
	std :: cin >> n;
		
	for(int i = 0; n > i; i++){		
	std :: cin >> a[i];	// заполняю массив	
	if(vo(a[i]) == 1){ // ищу отрицательное кратное семи 
		r++; // если оно есть добовляю еденицу		
	}					
	}

	
	std :: cout << r; // вывожу на экран количество отрицательных кратных семи чисел 
	
	delete[] a; // освобождаю память.


	
	return 0;
}
ruivit вне форума Ответить с цитированием
Старый 06.03.2023, 19:50   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Раз запрашиваете n, то и выделяйте n:
Код:
std :: cin >> n;
a = new int[n];
Только массив это не односвязный список. Пример - первая картинка в статье https://neerc.ifmo.ru/wiki/index.php...81%D0%BE%D0%BA.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.03.2023, 18:40   #6
ruivit
Пользователь
 
Регистрация: 14.09.2022
Сообщений: 24
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Раз запрашиваете n, то и выделяйте n:
Код:
std :: cin >> n;
a = new int[n];
Только массив это не односвязный список. Пример - первая картинка в статье https://neerc.ifmo.ru/wiki/index.php...81%D0%BE%D0%BA.
Вот своял новую программку с односвязный списком снова не прошёл
Код:
 #include <iostream>
#include <forward_list>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */


// Эта функция работает нормуль

int vo(int as){ 
	int a;
	if(as < 0){
		if(as % 7 == 0){
		a = 1;	
			
		}	
		else{
			
		 a = 0;
		}
		
	} else
	{
		a = 0;
	}
	
	return a;
}



int main(int argc, char** argv) {
	


int r,s, ro;

std :: cin >> r; // длина списка
	
std::forward_list<int> arr(r);
// Заполняем список значениями
int n = 1;
for (int &el : arr) {
	
std :: cin >> s;	
   el = s; // заносим значения в список
}


// Выводим значения
for (int &el : arr) {
 
 	if(vo(el) == 1){  // ищем отрицательные числа

	// ищу отрицательное кратное семи 
		ro++; // если оно есть добовляю еденицу		
	}					
 
}



std::cout << ro; // 1 2 3	
	
	return 0;
}
ruivit вне форума Ответить с цитированием
Старый 07.03.2023, 19:10   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от ruivit Посмотреть сообщение
снова не прошёл
Потому что, скорее всего, задачка для тренировки работы с динамической памятью, а не для использования готовых классов. Нужно объявить примерно такую структуру:
Код:
struct list {
    int val;
    struct list *next;
};
Выделять динамически память под каждый элемент и собирать всё в список.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.03.2023, 03:52   #8
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

ruivit, если не заморачиваться на exception safety, можно так:
Код:
#include <iostream>

using namespace std;

int main() {
  // односвязный список
  struct item_t {
    item_t* next;
    int value;
  };
  item_t* items_first = nullptr;

  int count;
  cin >> count;
  for (int k = 0; k < count; k++) {
    item_t* i = new item_t;
    cin >> i->value;
    // добавляем *i в начало списка
    i->next = items_first;
    items_first = i;
  }

  int biz_count = 0;
  // перебираем все элементы списка
  for (const item_t* i = items_first; i != nullptr; i = i->next) {
    if ((i->value < 0) && (i->value % 7 == 0)) {
      biz_count++;
    }
  }
  cout << biz_count << endl;

  // освобождаем список
  while (items_first != nullptr) {
    item_t* i = items_first;
    items_first = i->next;
    delete i;
  }
  return 0;
}
Цитата:
Сообщение от ruivit Посмотреть сообщение
Теперь новая напасть нейросеть сайта https://olympic.nsu.ru/ не хотит принимать программу вроде как она не проходит третий этап.
Зачем вам эта хрень?
Пётр Седов вне форума Ответить с цитированием
Старый 08.03.2023, 21:13   #9
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Код:
#include <iostream>

int vol(int as) {
    int a;
    if (as < 0) {
        if (as % 7 == 0) {
            a = 1;
        }
        else {
            a = 0;
        }
    }
    else {
        a = 0;
    }

    return a;
}

int main(int argc, char** argv) {
    int n, j, t;
    int ru = 0;
    int* a;

    std::cin >> n;

    // Выделяем память для массива
    a = new int[n];

    // Создаем список
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }

    // Итерация по списку и подсчет количества отрицательных целых чисел, кратных 7
    for (int i = 0; i < n; i++) {
        t = a[i];
        ru += vol(t);
    }

    std::cout << ru << std::endl;

    // Освободить выделенную память
    delete[] a;

    return 0;
}
Lapita12 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напишите программу, которая в последовательности целых чисел определяет их сумму и подсчитывает разность количества положительных и отрицательных чисел последовательности. roma1808 C# (си шарп) 0 08.05.2018 23:33
Поиск минимального количества повторов чисел Дима85 C# (си шарп) 7 24.07.2016 18:55
есть у кого нибудь программа с функцией подсчета количества отрицательных элементов в массиве случайных чисел?? Alexxx_screen Помощь студентам 20 12.09.2011 04:12
Поиск случайных отрицательных чисел AdmS Общие вопросы C/C++ 9 27.05.2011 20:15
Вводится последовательность из семи чисел или букв Dj_DeVaIs Помощь студентам 2 15.04.2010 18:09