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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2008, 02:27   #1
Crookers
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 11
По умолчанию Задачка про массив - Из массива удалить четные элементы, стоящие после максимального

Помогите пожалуйста решить задачу:

Из массива удалить четные элементы, стоящие после максимального:
Например: 1 2 2 5 4 4 3 3
Должно получится: 1 2 2 5 3 3

Как найти максимальный и четный элементы я разобрался, а как это все соединить вместе и удалить нужное, чтото не пойму..
Crookers вне форума Ответить с цитированием
Старый 22.09.2008, 12:01   #2
Gaspar312
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 10
По умолчанию

алгоритм будет примерно таким:
начиная с н-ого максимального элемента и до конца массива проверяем, если 4етное, то сохраняем в переменной кол-во 4етных(это понадобитса позже) и делаем цикл типа S[i]=S[i+1] до конца массива(т.е. массив будет двигаться влево или к на4алу) и проверяем текущий элемент опять, если 4ет, то повторяется предыдущий цикл, если нет, тогда увеличиваем номер элемента.

в конце при выводе надо будет задать цикл толко до ("коли4ество элементов в массиве" - "кол-во 4етных")

1 2 2 5 4 4 3 3
1 2 2 5 4 3 3 3 <----здесь показаны шаги после каждой итерации
1 2 2 5 3 3 3 3 <----здесь показаны шаги после каждой итерации
1 2 2 5 3 3 <----вывод на печать

Последний раз редактировалось Gaspar312; 22.09.2008 в 12:05.
Gaspar312 вне форума Ответить с цитированием
Старый 22.09.2008, 19:05   #3
ivan89
Пользователь
 
Аватар для ivan89
 
Регистрация: 22.09.2008
Сообщений: 59
По умолчанию

Crookers попробуи так

Код:
#include <iostream>
int main()
{
	using namespace std;
	int A[20],n,max,k,t=0,m;
	int B[20];
	cout<<"vvedi n:=";
	  cin>>n;
	  for(int i=0; i<n; i++)
		  cin>>A[i];
	  max=A[0];
         for(i=0; i<n; i++)
			 if(A[i]>max)
			 {
				 k=i;
				 max=A[i];
			 }
          for(i=0; i<=k; i++)
                 B[i]=A[i];
		  m=k;
		  for(i=k; i<n; i++)
			  if(A[i]%2!=0)
			  {
				  B[m]=A[i];
                   m++;
			  }
              else t++;
			  n=n-t;
			  for(int j=0; j<n; j++)
				  cout<<B[j];
               cout<<endl;
			  return 0;
}
ivan89 вне форума Ответить с цитированием
Старый 23.09.2008, 03:00   #4
Crookers
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 11
По умолчанию

Большое спасибо!! но хотелось бы еще попросить чтобы оформить в виде функций, а то чтото не получается.. Вот в таком виде должно быть, я пытался делать, но чтото не пойму..

Код:
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

char mainmenu(){
    char sel;
    clrscr();
    while (1){
    printf ("Vibirite variant:\n1. Generatia\n2. Vvod s klavi\n3. Zagruzka iz failaа\n\n0. Vixod\n");
    sel = getch();
    if ((sel=='1')||(sel=='2')||(sel=='3')||(sel=='0'))
	return sel;
	clrscr();
    printf ("Neverniy nomer!\n");
    }
}

int generateA(int * a, int * n) {
    int i;
    srand(time(NULL));
    (*n)=5+rand()%10;
    for (i=0;i<*n;i++)
    a[i]=1+rand()%10;
    return 1;
}

int readA(int a[],int *n) {
    int i;
    printf("\Vvedite n:");
    scanf("%d",n);
    for (i=0;i<*n;i++)
    scanf("%d",&a[i]);
    return 1;
}

int loadA(int * a, int * n) {
    char str[1000];
    int i;
    
    FILE *f=fopen(str,"r");
    
    while (f==NULL) {
	printf("Введите путь до фала:\n");
	scanf ("%s",&str);
	f=fopen(str,"r");
    }
    fscanf(f,"%d",&n);
    for (i=0;i<*n;i++)
    fscanf(f,"%d",&a[i]);
    fclose(f);
    return 1;
}

int findmax(int * a, int n) {
    int i;
    int k;
    int max = a[0];
    for (i =0; i < n; i++)
	 if (a[i] > max)
	   k=i+1;
	   max=a[i];
    return max;
}


int delet(int * a, int n) {
    int i;
    int k;
    int t=0;
    int m;
    int b[5];
    findmax(a, n);
    for (i = 0; i < k; i++) {
	 b[i] = a[i];
	 m=k;
    }
    for (i = k; i < n; i++)
	 if (a[i]%2 != 0) {
	     b[m] = a[i];
	     m++;
	 } else t++;
	 n = n - t;
  return 1;
}


int printA(int a[5], int n) {
    int i;
    for (i=0;i<n;i++)
    printf("%d ", a[i]);
    printf("\n");
    return 1;
}

int fff(int * a, int n) {
   int i;
   int k;
   int m;
   int b[5];
  // findmax(a, n);
   delet(a, n);
  return 1;
}

int main() {
    int a[5];
    int n;

     switch(mainmenu()) {
 case '1':
     generateA(a,&n);
     break;
 case '2':
     readA(a,&n);
     break;
 case '3':
     loadA(a,&n) ;
     break;
 default:
     return 0;
    }

    printf("\Massiv posle zapolnenia\n");
    printA(a,n);
    if (fff(a, n)) {
     printf("\Massiv posle udalenia\n");
    printA(a,n);
    }
  return 0;
Crookers вне форума Ответить с цитированием
Старый 23.09.2008, 19:35   #5
ivan89
Пользователь
 
Аватар для ivan89
 
Регистрация: 22.09.2008
Сообщений: 59
По умолчанию

что смог
#include <iostream>
#include <ctime>
using namespace std;
int a[20];
int n;
int b[30];
char mainmenu(){
char sel;
while (1){
cout<<"Vibirite variant:\n1. Generatia\n2. Vvod s klavi\n3. Zagruzka iz failaa\n\n0. Vixod\n";
cin>>sel;
if ((sel=='1')||(sel=='2')||(sel=='3') ||(sel=='0'))
return sel;
else cout<<"Neverniy nomer!\n";
}
}

void generateA() {

srand(time(NULL));
n=5+rand()%10;
for (int i=0;i<n;i++)
a[i]=1+rand()%10;
}

void readA() {
int i;
cout<<"Vvedite n:";
cin>>n;
for (i=0;i<n;i++)
cin>>a[i];
}

void loadA(int * a, int * n) {
char str[1000];
int i;

FILE *f=fopen(str,"r");

while (f==NULL) {
cout<<"Aaaaeoa ioou ai oaea:\n";
scanf ("%s",&str);
f=fopen(str,"r");
}
fscanf(f,"%d",&n);
for (i=0;i<*n;i++)
fscanf(f,"%d",&a[i]);
fclose(f);

}

int findmax(int * a, int n) {
int i;
int k;
int max = a[0];
for (i =0; i < n; i++)
if (a[i] > max)
{
k=i;
max=a[i];
}
return k;
}


void delet() {
int i;
int k;
int t=0;
int m;
k=findmax(a, n);
for (i = 0; i < k; i++)
b[i] = a[i];
m=k;

for (i = k; i < n; i++)
if (a[i]%2 != 0) {
b[m] = a[i];
m++;
} else t++;
n = n - t;
}


void printA(int c[], int n) {
int i;
for (i=0;i<n;i++)
cout<<c[i];
cout<<"\n";
}

int fff(int * a, int n) {

// findmax(a, n);
delet();
return 1;
}

int main() {


char k=mainmenu();
switch(k) {
case '1':
generateA();
break;
case '2':
readA();
break;
case '3':
loadA(a,&n);
break;
default:
exit(0);
}
fff(a,n);
cout<<"Massiv posle zapolnenia\n";
printA(a,n);

cout<<"Massiv posle udalenia\n";
printA(b,n);

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31
Если все элементы матрицы четные, вычислить их произведение. Misho0k Паскаль, Turbo Pascal, PascalABC.NET 7 20.05.2008 22:51
Элементы массива и старшие цифры logistics Помощь студентам 4 22.04.2008 00:12
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01