C/C++ - Помогите с 3-мя программами

Ответить
Аватара пользователя
VokaMut

C/C++ - Помогите с 3-мя программами

Сообщение VokaMut »

Помогите написать программы:

1.Которая считывает линейный массив натуральных чисел из файла, имя которого вводится с клавиатуры, и выводит на экран те элементы, которые являются простыми числами.

2.Которая создает стек целых чисел, считываемых из файла и удаляет из него повторяющиеся. Всё это вывести на экран.

3.Которая заполняет квадратную матрицу случайными числами из заданного диапазона. Из полученной матрицы все положительные числа занести во второй массив, а все отрицательные - в третий. Каждый из полученных массивов упорядочить по возрастанию. Определить во втором массиве количество элементов являющихся простыми числами. Второй и третий массивы записать каждый в отдельный файл.



Первую и вторую пытался сделать, но ничего хорошего у меня не вышло.(В первой до проверки на простые числа)

Третью программу сделал почти до конца, осталось сделать в цикле проверку на простые числа.



Третья программа:



Код:

Код: Выделить всё

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>
#include <math.h>
void main()
{
	do
	{
		int i=0;
		int j=0;
		int min,max;
		int matrix[10][10];
		cout<<"\nVvedite diapazon:"<<endl<<"min - ";
		cin>>min;
		cout<<endl<<"max - ";
		cin>>max;
		int mass1[100];
		int mass2[100];
		int mass3[100];
		int z=0;
		cout<<endl<<endl;
		cout<<endl<<"Matrix:"<<endl;
		for(i=0; i<10;i++) \\Создаем матрицу 10х10 из чисел заданного диапазона
		{
			for(j=0; j<10;j++)
			{
				matrix[i][j]=min+rand()%(max-min+1);
				cout<<setw(3)<<matrix[i][j]<<" ";
			}
			cout<<endl;
		}
		j=0;
		cout<<endl<<endl;
		cout<<"Massiv pologitelinix 4isel:\n";
		for(i=0;i<10;i++) \\Создаем из полученной матрицы матрицы массив положительных чисел
		{
			for(j=0;j<10;j++)
			{
				if(matrix[i][j]>0)
				{
					mass1[z]=matrix[i][j];
					cout<<mass1[z]<<" ";
					z++;
				}
			}
		}
		int q,w;
		z--;
		q=z;
		j=0;
		cout<<endl<<endl;
		cout<<endl<<"Massiv otricatelinix 4isel:\n";
		for(i=0;i<10;i++) \\Создаем массив отрицательных чисел
		{
			for(j=0;j<10;j++)
			{
				if(matrix[i][j]<0)
				{
					mass2[z]=matrix[i][j];
					cout<<mass2[z]<<" ";
					z++;
				}
			}
		}
		j=0;
		z--;
		w=z;
		for (i=0;i<q;i++) \\сортируем методом пузырька 1 массив
		 {
			 for (j=0;j<q;j++)
			 {
			  if (mass1[i]>mass1[j])
			  {
			    z=mass1[i];
		      mass1[i]=mass1[j];
		      mass1[j]=z;
		     }
		    }
		  }
		for(i=0;i<w;i++) \\сортируем второй массив
			mass2[i]*=-1;
		for (i=0;i<w;i++)
		 {
			 for (j=0;j<w;j++)
			 {
			  if (mass2[i]<mass2[j])
			  {
			    z=mass2[i];
		      mass2[i]=mass2[j];
		      mass2[j]=z;
		     }
		    }
		  }
		for(i=0;i<w;i++)
			mass2[i]*=-1;
		cout<<endl<<endl; \\выводим на экран полученное 
		cout<<endl<<endl<<"Massis 1 : ";
		for(i=0;i<q;i++)
		cout<<mass1[i]<<" ";
		cout<<endl<<endl;
		cout<<endl<<endl<<"Massis 2 : ";
		for(i=0;i<98-q;i++)
		cout<<mass2[i]<<" \n";
		int ch=0;
		char flag=1;
		for(int qq=1;qq<=mass1[i];qq++)
		{
		for(long pr=0;pr<sqrt(mass1[i]);pr++)  \\Проверка на простые числа
		{
			if(mass1[i]%pr==0)
				{
					flag=0;
					break;
				}
			}
		}
		cout<<endl<<endl;
		cout<<"kol-vo 4usel 9vl sten 3    "<<ch;
		fstream outf("mass1.txt", ios::out); \\записываем в файлы полученные массивы
		for(i=0;i<w;i++)
		outf<<mass1[i]<<" ";
		outf.close();
		getch();
		outf.open("mass2.txt",ios::out);
		for(i=0;i<98-q;i++)
		outf<<mass2[i]<<" ";
		outf.close();
	}while(getch()!=27);
}

Выделил проверку на простые.

Это проверка одного числа, в цикле сделать не получается...



p.s. хотя бы третью помогите доделать,а то уже неделю с бубном и учебниками парюсь
Аватара пользователя
lxa85

Re: C/C++ - Помогите с 3-мя программами

Сообщение lxa85 »

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

Проверку на простоту тоже желательно вынести отдельной функцией.
Аватара пользователя
VokaMut

Re: C/C++ - Помогите с 3-мя программами

Сообщение VokaMut »

lxa85, Комментарии написал в программе, мне бы только создать проверку на простые числа в массиве
Аватара пользователя
lxa85

Re: C/C++ - Помогите с 3-мя программами

Сообщение lxa85 »

VokaMut, самый банальный способ исходит из определения простого числа.

Простые числа - это целое положительное число больше единицы, которое не делится без остатка ни на одно другое целое положительное число, кроме единицы и самого себя.

Цикл от 2 до n + проверка остатка от деления (mod).
Аватара пользователя
VokaMut

Re: C/C++ - Помогите с 3-мя программами

Сообщение VokaMut »

lxa85, У меня есть такая проверка:



Код:

Код: Выделить всё

char flag=1;
for(long pr=0;pr<sqrt(n);pr++)
{
	if(n%pr==0)
		{
			flag=0;
			break;
		}
	}
}
if(flag) cout<<n<<" - простое число";

Как вместо n вставить проверку по всему массиву n(к примеру) ?
Аватара пользователя
VokaMut

Re: C/C++ - Помогите с 3-мя программами

Сообщение VokaMut »

Третью и вторую написал.



Со второй помогите.



На счет того как нас учат.нам дают примеры и делайте по их подобию. Не удобно,хоть и комментарии написаны к коду.
Аватара пользователя
lxa85

Re: C/C++ - Помогите с 3-мя программами

Сообщение lxa85 »

VokaMut, у тебя правильная проверка на простое число. Меня % смущал, но сейчас разобрался.

Вводи дополнительный цикл. Собственно что тебя смутило?

Код: Выделить всё

for (int i=0;i<n;i++) 
{
char flag=1;
for(long pr=0;pr<sqrt(n[i]);pr++)
{if(n[i]%pr==0){
flag=0;break;}}
}
if(flag) cout<<n[i]<<" - простое число";
}
Аватара пользователя
Drongo

Re: C/C++ - Помогите с 3-мя программами

Сообщение Drongo »

Цитата lxa85:



char flag=1;
C/C++ - Помогите с 3-мя программами




Я бы только вместо char использовал булевый тип bool





Код:

Код: Выделить всё

for (int i = 0; i < n; i++){
      bool flag = true;
      for(long pr = 0; pr < sqrt(n[i]); pr++){
         if(n[i] % pr == 0){
            flag=false;
            break;
           }
       }
   }
   if(flag)
      cout<<n[i]<<" - простое число";

И ставьте отступы пробелы в коде, вы что, жалеете кнопку пробел или пытаетесь за счёт отсутствия пробелов уменьшить размер программы? Изображение
Аватара пользователя
VokaMut

Re: C/C++ - Помогите с 3-мя программами

Сообщение VokaMut »

Всем спасибо,лабы сделал,вот третья(Может пригодитсяИзображение ):



Код:

Код: Выделить всё

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>
#include <math.h>
void main()
{
	do
	{
		int i,j,min,max,matrix[4][8],z=0,mass1[100],mass2[100],mass3[100],q,w,ch=0,qq;
		cout<<"Vvedite diapazon:\nmin: ";
		cin>>min;
		cout<<"\nmax: ";
		cin>>max;
		cout<<"\n\nMatrix:\n";
		for(i=0; i<4;i++)
		{
			for(j=0; j<8;j++)
			{
				matrix[i][j]=min+rand()%(max-min+1);
				cout<<setw(3)<<matrix[i][j]<<" ";
			}
			cout<<endl;
		}
		j=0;
		cout<<"\n\nMassiv pologitelinix 4isel:\n";
		for(i=0;i<4;i++)
		{
			for(j=0;j<8;j++)
			{
				if(matrix[i][j]>0)
				{
					mass1[z]=matrix[i][j];
					cout<<mass1[z]<<" ";
					z++;
				}
			}
		}
		q=z;
		cout<<"\n\nMassiv otricatelinix 4isel:\n";
		for(i=0;i<4;i++)
		{
			for(j=0;j<8;j++)
			{
				if(matrix[i][j]<0)
				{
					mass2[z]=matrix[i][j];
					cout<<mass2[z]<<" ";
					z++;
				}
			}
		}
		j=0;
		w=z;
		for (i=0;i<q-1;i++)
		 {
			 for (j=i+1;j<q;j++)
			 {
			  if (mass1[i]>mass1[j])
			  {
			    z=mass1[i];
				mass1[i]=mass1[j];
				mass1[j]=z;
		     }
		    }
		  }
		for (i=0;i<w-1;i++)
		 {
			 for (j=i+1;j<w;j++)
			 {
			  if (mass2[i]<mass2[j])
			  {
			    z=mass2[i];
				mass2[i]=mass2[j];
				mass2[j]=z;
		     }
		    }
		  }
		cout<<"\n\nMassiv 1: ";
		for(i=0;i<q;i++)
		cout<<mass1[i]<<" ";
		cout<<"\n\nMassiv 2: ";
		for(i=0;i<w;i++)
		cout<<mass2[i]<<" ";
		char flag=1;
		cout<<"\n\nProst chisla: ";
		for(qq=0;qq<q;qq++)
		{
			flag=1;
			for(long pr=2;pr<=mass1[qq]/2;pr++)
			{
				if(mass1[qq]%pr==0)
				{
					flag=0;
					break;
				}
			}
			if(flag)
			{
				cout<<mass1[qq]<<"  ";
				ch++;
			}
		}
		cout<<"\n\nkol-vo number "<<ch;
		fstream outf("mass1.txt",ios::out);
		for(i=0;i<q;i++)
		outf<<mass1[i]<<" ";
		outf.close();
		getch();
		outf.open("mass2.txt",ios::out);
		for(i=0;i<w;i++)
		outf<<mass2[i]<<" ";
		outf.close();
	}while(getch()!=27);
}

Осталась одна:

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



Пример со стеком в методичке плохой,он слишком большой,разобраться не могу(
Ответить

Вернуться в «Программирование и базы данных»