PDA

Показать полную графическую версию : Помогите с 3-мя программами


VokaMut
16-12-2010, 16:49
Помогите написать программы:
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
16-12-2010, 18:45
VokaMut, процедуры и функции вещь пройденная? Если да, то переписывай программу с их использованием. Это структурирует задачу и делает проще в понимании, отладке. Соотв. разбивай задачу на этапы и функциональный шаги, и милости просим с комментариями к коду, наработками сделанными ранее.
Проверку на простоту тоже желательно вынести отдельной функцией.

VokaMut
16-12-2010, 20:17
lxa85, Комментарии написал в программе, мне бы только создать проверку на простые числа в массиве

lxa85
16-12-2010, 21:24
VokaMut, самый банальный способ исходит из определения простого числа.
Простые числа - это целое положительное число больше единицы, которое не делится без остатка ни на одно другое целое положительное число, кроме единицы и самого себя.
Цикл от 2 до n + проверка остатка от деления (mod).

VokaMut
16-12-2010, 22:42
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[i](к примеру) ?

VokaMut
17-12-2010, 21:47
Третью и вторую написал.

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

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

lxa85
18-12-2010, 02:16
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
18-12-2010, 23:54
char flag=1; »Я бы только вместо 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
19-12-2010, 14:02
Всем спасибо,лабы сделал,вот третья(Может пригодится:) ):

#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);
}


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

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




© OSzone.net 2001-2012