Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите с 3-мя программами (http://forum.oszone.net/showthread.php?t=194167)

VokaMut 16-12-2010 16:49 1567354

Помогите с 3-мя программами
 
Помогите написать программы:
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 1567444

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

VokaMut 16-12-2010 20:17 1567488

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

lxa85 16-12-2010 21:24 1567522

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

VokaMut 16-12-2010 22:42 1567593

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 1568441

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

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

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

lxa85 18-12-2010 02:16 1568570

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 1569224

Цитата:

Цитата lxa85
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 1569523

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

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

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

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


Время: 15:01.

Время: 15:01.
© OSzone.net 2001-