Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 «  : 10-01-2011 08:02 »   | 
								
								 | 
							  
							 
							Помогите, пожалуйста... я написала программу, которая должна менять местами четные элементы в нечетных строках, но у меня какая то ошибка, которая дает непонятный цикл в ответе, я никак не могу понять что такое...посмотрите пожалуйста, очень нужно, мне ее завтра сдать надо(( Вот код: #include<iostream.h> #include<conio.h> #include<stdio.h> #include<stdlib.h>   void zamena(int A[20][20]){     int x,i,j,s,t;     for (i=0; i<s; i++){         if(i%2==1){             for (j=0; j<t; j=j+2){                 if (j%2==0){                     x=A[i][j];                     A[i][j]=A[i][j+2];                     A[i][j+2]=x;                 }             }         }     } };   void main(){     void zamena(int[20][20]);     int A[20][20];     int i,j,s,t;     clrscr();     printf("vvedite razmer matricy;\n");     scanf("%i%i",s,t);     randomize();     for (i=0; i<s; i++){         for(j=0; j<t; j++){             A[i][j]=random(10);         }     }       printf("Massiv:\n");     for (i=0; i<s; i++){         for(j=0; j<t; j++){             printf("%i",A[i][j]);         }     }       zamena(A);     for (i=0; i<s; i++){         for(j=0; j<t; j++){             printf("%i\t",A[i][j]);         }         printf("\n");     }     getch(); } 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 10:17 от Вад »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 10-01-2011 08:40 »   | 
								
								 | 
							  
							 
							Anya, поясни, что такое двумерный массив, и как с ним работать? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 10-01-2011 08:47 »   | 
								
								 | 
							  
							 
							Это объединение символов одного типа, это что то вроди матрицы размером M*N, где M колличество строк, а N колличество столбцов., а элементы этой матрицы находятся на пересечении номера строки и столбца, получаем, что элемент это у нас a[i][j],где i строка, j столбец. Работать можно либо в цикле, т.е практически со всей строкой, столбцом или с конкретными элементами Добавлено через 1 час, 31 минуту и 1 секунду:я там кстати описалась: x= A[i][j]; A[i][j]=A[i][j+2]; A[i][j+2]=x;  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 10:18 от Anya »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 10-01-2011 10:16 »   | 
								
								 | 
							  
							 
							Anya, в следующий раз вставляй код в теги [code][/code] и форматируй, пожалуйста, а то понять ничего невозможно.
  Я в исходном сообщении подстветил 22ю строку - это так и задумывалось, или копипаста неудачная?
  Кстати, в C++, строго говоря, нет никаких двумерных массивов - есть только разные ухищрения, чтобы обращаться по двойному индексу.
  Добавлено через 8 минут и 43 секунды: Посмотрел код. Anya, почему у тебя в функции zamena переменные s,t, которые должны представлять собой размерность массива, нигде не инициализируются? Там может происходить что угодно, в этой функции. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 10:28 от Вад »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 10-01-2011 10:52 »   | 
								
								 | 
							  
							 
							Вад, ну 22-ой строки в принципе может и не быть, а то что я не инициализировала s,t сильно влияет на ход роботы программы, ошибок же компилятор не выдает 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 10-01-2011 11:23 »   | 
								
								 | 
							  
							 
							Ну, компилятор же не обязан следить, где у тебя что инициализировано - может, оно так и задумывалось    Хотя предупреждение должно было быть.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 10-01-2011 11:29 »   | 
								
								 | 
							  
							 
							ну предупреждений нету...просто вечный цикл и все, вместо нормального ответа 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dale
							
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 10-01-2011 11:58 »   | 
								
								 | 
							  
							 
							Anya, в языке C параметры в подпрограмму всегда передаются только по значению. Если функция обладает побочным эффектом, т.е. меняет значение своих параметров, эти параметры явно должны передаваться как ссылки. Поэтому в строке scanf("%i%i",s,t); ничего (хорошего) не происходит. Замените ее на scanf("%i%i", &s, &t); Чтобы убедиться, что это именно так, поставьте контрольную печать значений s и t после ввода и проверьте, действительно ли в них содержится то, что ожидается.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
  Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
  Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 10-01-2011 12:01 »   | 
								
								 | 
							  
							 
							Anya, тогда или у тебя странный компилятор, или ты не читаешь сообщения во время сборки программы. Современные компиляторы для такого рода кода по умолчанию должны выдавать предупреждение о неинициализированных переменных. Программа от это собираться, конечно, не перестанет.
  В принципе, даже если предупреждений нет - стоит попробовать использовать отладчик. Поставить точки останова, запустить под отладчиком и внимательно изучить, что происходит на самом деле во время выполнения программы, по шагам. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dale
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 10-01-2011 12:03 »   | 
								
								 | 
							  
							 
							Ну, компилятор же не обязан следить, где у тебя что инициализировано - может, оно так и задумывалось    Хотя предупреждение должно было быть. Компилятор C к таким вещам относится с хладнокровным пофигизмом, по принципу: "вы же просили именно этого - так получайте". Нужно пользоваться вспомогательными инструментами, вроде lint'а. Я для C обычно использую splint.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
  Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
  Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 10-01-2011 12:03 »   | 
								
								 | 
							  
							 
							Ну, компилятор же не обязан следить, где у тебя что инициализировано - может, оно так и задумывалось    Хотя предупреждение должно было быть. Компилятор C к таким вещам относится с хладнокровным пофигизмом, по принципу: "вы же просили именно этого - так получайте". Нужно пользоваться вспомогательными инструментами, вроде lint'а. Я для C обычно использую splint. Судя по заголовку iostream.h, это не мог быть компилятор C. Если только он не отнёсся с пофигизмом и к инклуду.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 12:06 от Вад »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 10-01-2011 12:14 »   | 
								
								 | 
							  
							 
							а вообще сама функция замена правильно написана для задания? потому что я сейчас кое-что подправила и у меня теперь получается первоначальная матрица выводится, а вторичная, которая должна получится в результате функции нет, может я вызов не правильно осуществляю? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dale
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 10-01-2011 12:23 »   | 
								
								 | 
							  
							 
							Судя по заголовку iostream.h, это не мог быть компилятор C. Точно, проглядел. Хотя затесался он туда явно случайно. Добавлено через 3 минуты и 49 секунд:первоначальная матрица выводится, а вторичная, которая должна получится в результате функции нет Не выводится совсем ничего, или не то, что надо?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 12:27 от Dale »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
  Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
  Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 10-01-2011 12:32 »   | 
								
								 | 
							  
							 
							Вообще ничего, оно просто останавливается 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 10-01-2011 12:37 »   | 
								
								 | 
							  
							 
							Anya, показывай текущий вариант - мы ж не знаем, что там подправлено    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dale
							
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 10-01-2011 12:40 »   | 
								
								 | 
							  
							 
							И понаставьте контрольных печатей побольше. Чтобы знать, какие точки в программе пройдены, а до каких дело не дошло. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
  Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
  Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 10-01-2011 12:51 »   | 
								
								 | 
							  
							 
							#include<iostream.h> #include<conio.h> #include<stdio.h> #include<stdlib.h> void zamena(int A[5][5]){ int x,i,j,s,t; for (i=0; i<s; i++){ if(i%2==1){ for(j=0; j<t; j=j+2){ if (j%2==0){ x=A[i][j]; A[i][j]=A[i][j+2]; A[i][j+2]=x;}}}} }; void main(){ int A[5][5]; int i,j,s,t; clrscr(); printf("vvedite razmer matricy;\n"); scanf("%i%i",&s,&t); randomize(); for (i=0; i<s; i++){  for(j=0; j<t; j++){  A[i][j]=random(10);}} printf("Massiv:\n"); for (i=0; i<s; i++){  for(j=0; j<t; j++){  printf("%i\t",A[i][j]);}  printf("\n");}           \\получается проходит только до этой точки доходит, а к функции не обращается zamena(A);  for (i=0; i<s; i++){  for(j=0; j<t; j++){  printf("%i\t",A[i][j]);}  printf("\n");}  getch();  }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 10-01-2011 13:13 »   | 
								
								 | 
							  
							 
							Anya, ну так, как я в самом начале сказал, в функции zamena нигде не инициализируются s и t - и вообще, реальные размерности массива в неё никак не передаются.  То, что имена переменных в этой функции и в main совпадают - ровно ни о чём не говорит. В результате, цикл по замене работает некорректно. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 10-01-2011 13:18 »   | 
								
								 | 
							  
							 
							то есть, мне сам ввод размерности перенести в функцию замена? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 10-01-2011 13:40 »   | 
								
								 | 
							  
							 
							Нет, лучше передать эти значения в функцию в виде параметров. Так же, как ты передаёшь массив. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 10-01-2011 13:47 »   | 
								
								 | 
							  
							 
							хорошо, сейчас попробую
  Добавлено через 12 минут и 56 секунд: Вад, что то я запуталась, мы передаем s и t в виде параметров, как массив, массив я передаю как параметр функции замена, а s и t мне как параметр функции main передавать? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 10-01-2011 14:00 от Anya »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 10-01-2011 14:25 »   | 
								
								 | 
							  
							 
							Нет, тебе ведь и размерности тоже нужно передать параметром в функцию замена - ведь именно эта функция ничего не знает про введённые размеры. Так же, как она не знала бы и про значения, записанные в массив в теле функции main, если бы ты массив не передала через параметр. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #22 : 10-01-2011 14:35 »   | 
								
								 | 
							  
							 
							Anya, s и t - параметры функции zamena. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #23 : 10-01-2011 14:37 »   | 
								
								 | 
							  
							 
							я уже поняла, параметры я написала, программа практически работает, правда выводит не то что мне надо, выводит матрицу, а меняет не то 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #24 : 10-01-2011 14:39 »   | 
								
								 | 
							  
							 
							Anya, значит, в алгоритме замены ошибка   Опиши поточнее, как именно должна происходить замена. По какому принципу меняются чётные элементы в нечётных строках? Не совсем понятно.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #25 : 10-01-2011 14:43 »   | 
								
								 | 
							  
							 
							ну как я поняла эту задачу, необходимо менять четный по индексу элемент, в нечетной по индексу строке, т.е у меня есть строка и я в ней меняю 2-й и 4-й, 6-й и 8-й местами, как бы попарно, а если у нас нечетное колличество элементов, последнее отбрасывается 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #26 : 10-01-2011 17:17 »   | 
								
								 | 
							  
							 
							Если так, то внутренний цикл у тебя в функции замены неправильно выглядит. Попробуй по шагам на бумажке проследить, что будет происходит в этом цикле. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Anya
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #27 : 11-01-2011 08:28 »   | 
								
								 | 
							  
							 
							Спасибо всем за помощь    программа работает    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |