# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
main(){
int **ms1,**ms2,**ms3,n,m,i,j,a,b;
clrscr();
puts("vvedite razmernost massiva");
scanf("%d%d",&n,&m);
ms1=(int**)calloc(n,sizeof(int*));
for (i=0;i<n;i++)
*(ms1+i)=(int*)calloc(m,sizeof(int));
clrscr();
puts("vvedite elementi massiva 1");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms1[j]);
ms2=(int**)calloc(n,sizeof(int*));
for (i=0;i<n;i++)
*(ms2+i)=(int*)calloc(m,sizeof(int));
puts("vvedite elementi massiva 2");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms2[j]);
puts("mssiv 1:");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",ms1[j]);
puts(" ");}
puts("mssiv 2:");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",ms2[j]);
puts(" ");}
puts("novii massiv");
ms3=(int**)calloc(n,sizeof(int*));
for (i=0;i<n;i++)
*(ms3+i)=(int*)calloc(m,sizeof(int));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(ms1[j]<0) {ms3[j]=ms1[j];}
if(ms1[j]>0&&ms2[j]>0) {ms2[j]++;}
if(ms1[j]>0&&ms2[j]<0) {ms3[j]=ms2[j];}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",ms3[j]);
puts(" ");}
getch();
}
(c)Замена эллементов массива
Заменить положительные эллементы массива А отридцательными эллементами массива Б.
Как я понимаю алгоритм такой:
Перебирать эллементы массива А до появления положительного эллемента(отридцатильные вписыватьь в новый массив).После нахождения положительного, начать перебор массива Б до появления первого отридцательного(вписать его в новый массив).И так до упора.Только не знаю как реализировать(
Цитата:
Заменить положительные эллементы массива А отридцательными эллементами массива Б.
1. Или должно быть условие, что полож. элементов в А не больше, чем отриц. элементов Б, или надо решить, что в таком случае делать. Можно, например, идти по массиву Б, а если он закончился опять идти с его начала.
2.Идешь по массиву А, встретил полож. Элемент, тогда начинаешь с текущего индекса (т.е. сохраняешь всегда начальное значение индекса массива Б так, чтобы не идти всегда с начала массива и не повторяться ....) идти по массиву Б(вложенный цикл), как встретил отриц. элемент - отправляй его в массив А вместо найденного положительного и останавливай поиск по массиву Б. Если дошел до конца Б, а элемент еще не нашел отриц., тогда обнуляешь его текущий индекс(ставишь в начало массива) и идешь опять с начала ...
надеюсь мысль ясна ))
Код:
tt;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(ms1[j]<0) ms3[j]=ms1[j];
if(ms1[j]>0){
for(a=0;a<n;a++)
for(b=0;b<n;b++)
if(ms2[a]<0) ms3[j]=ms2[a];
return tt}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(ms1[j]<0) ms3[j]=ms1[j];
if(ms1[j]>0){
for(a=0;a<n;a++)
for(b=0;b<n;b++)
if(ms2[a]<0) ms3[j]=ms2[a];
return tt}
Не получается..Вродеже все правильно.
Прощитываем массив 1,если отр. сохраняем, если полож. начинаем прощитывать массив 2, находим отр. сохраняем, возвращаемся в начало.Программа просто зависает...
Кстати я так понемаю значения i j a b сохраняются после операции return?
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main(){
int **ms1,**ms2,**ms3,n,m,i,j,a=0,b=0; bool t=false;
clrscr();
puts("vvedite razmernost massiva");
scanf("%d%d",&n,&m);
ms1=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms1+i)=(int*)calloc(m,sizeof(int));
ms2=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms2+i)=(int*)calloc(m,sizeof(int));
ms3=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms3+i)=(int*)calloc(m,sizeof(int));
puts("vvedite elementi massiva 1");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms1[j]);
puts("vvedite elementi massiva 2");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms2[j]);
puts("mssiv 1:");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms1[j]);
puts(" ");}
puts("mssiv 2:");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms2[j]);
puts(" ");}
[COLOR="Red"]здесь вставь прверку 2 масыва на наличия хотябы 1 отрицательного елемента (если нет то сообщение об ошибке и ретурн), иначе изменятся 3 масив не будет и выведет на стадии обьявления[/COLOR]
puts("novii massiv");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(ms1[j]<0) {ms3[j]=ms1[j]; continue;}
if(ms1[j]>=0)
{
if (t==true) {
goto tru;
}
while (a < n){
b=0;
while (b < m){
if (ms2[a]<0) {
ms3[j]=ms2[a];
t=true;
goto perexod;
}
else t=false;
tru:
b++;
}
if (a==n-1) {
a=-1;
}
a++;
}
}
perexod:
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms3[j]);
puts(" ");}
getch();
}
#include <conio.h>
#include <stdlib.h>
main(){
int **ms1,**ms2,**ms3,n,m,i,j,a=0,b=0; bool t=false;
clrscr();
puts("vvedite razmernost massiva");
scanf("%d%d",&n,&m);
ms1=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms1+i)=(int*)calloc(m,sizeof(int));
ms2=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms2+i)=(int*)calloc(m,sizeof(int));
ms3=(int**)calloc(n,sizeof(int));
for (i=0;i<n;i++)
*(ms3+i)=(int*)calloc(m,sizeof(int));
puts("vvedite elementi massiva 1");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms1[j]);
puts("vvedite elementi massiva 2");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&ms2[j]);
puts("mssiv 1:");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms1[j]);
puts(" ");}
puts("mssiv 2:");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms2[j]);
puts(" ");}
[COLOR="Red"]здесь вставь прверку 2 масыва на наличия хотябы 1 отрицательного елемента (если нет то сообщение об ошибке и ретурн), иначе изменятся 3 масив не будет и выведет на стадии обьявления[/COLOR]
puts("novii massiv");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(ms1[j]<0) {ms3[j]=ms1[j]; continue;}
if(ms1[j]>=0)
{
if (t==true) {
goto tru;
}
while (a < n){
b=0;
while (b < m){
if (ms2[a]<0) {
ms3[j]=ms2[a];
t=true;
goto perexod;
}
else t=false;
tru:
b++;
}
if (a==n-1) {
a=-1;
}
a++;
}
}
perexod:
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",ms3[j]);
puts(" ");}
getch();
}