Инструменты пользователя

Инструменты сайта


reshenie_zadachi_7

Задача 7. Дан динамический массив целых чисел. Определить есть ли в массиве серии из подряд стоящих простых чисел. Если да посчитать количество таких серий и удалить последнюю серию.

/* C++ 
 * File:   arrsimpleseries.cpp
 * Author: darkfire
 *
 * Created on November 7, 2010, 7:19 PM
 */

#include <stdlib.h>
#include <iostream>

using std::cout;
using std::endl;

void EnterArrRand(int *, int);
void ViewArr(int *, int);
bool simplenumber(int);
int *deletesimple(int *,int &, int, int);

int main(int argc, char** argv) {
    //если не передано ни одного аргумента значит применяем размер маcсива по умолчанию
    int SIZE = 300, first=0, last=0;
    int count=0, counts=0;

    if (argc>1)SIZE=atoi(argv[1]);

    int *parr = new int [SIZE];

    EnterArrRand(parr,SIZE);//заполняем массив
    ViewArr(parr,SIZE);//выводим на экран массив
    cout<<"\n";
    for(int i=0;i<SIZE;i++){
        if (parr[i]==parr[i+1]){
            if (!simplenumber(parr[i])){//если не простое продолжить выполнять цикл далее
                continue;
            }
            count++;
        }else{
            if(count>0){
                //запоминаем координаты серии
                last=i;
                first=last-count;
                count=0;
                counts++;
            }
        }
    }
    cout<<"first: "<<first<<"\n";
    cout<<"last: "<<last<<"\n";
    cout<<"counts: "<<counts<<"\n";
    //функция для удаления последней последовательности
    if(counts>0){
    parr = deletesimple(parr,SIZE,first,last);
    ViewArr(parr,SIZE);//выводим на экран новый массив
    }

    delete [] parr;
    
    cout<<"\n";
    return (EXIT_SUCCESS);
}
int *deletesimple(int *parrold,int &SIZE, int first, int last){
    int SIZENew = SIZE - (last -first)-1;
    int *parrnew = new int [SIZENew];
    for(int i=0,j=0;i<SIZE;i++){
        if((i>=first)&&(i<=last))continue;
        else{
            parrnew[j]=parrold[i];
            j++;
        }
    }
    delete [] parrold;//удалем старый массив
    SIZE=SIZENew;//если нужно использовать в других функциях
    return parrnew;
}
bool simplenumber(int number){
    //true если число простое
    for(int i=2;i<number-1;i++){
        if(number%i==0)return false;
    }
    return true;
}

void ViewArr(int *parr1, int SIZEA){
    for(int i=0;i<SIZEA;i++)cout<<parr1[i]<<" ";
}

void EnterArrRand(int *parr1, int sizearr){
    for(int i=0;i<sizearr;i++)
        parr1[i]=rand()%12+1;//for SIZE=30
}
reshenie_zadachi_7.txt · Последние изменения: 2010/11/11 21:14 (внешнее изменение)

Яндекс.Метрика