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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 23:28   #1
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию не сравниваются элементы массива

Добрый вечер! Программа в общих чертах выглядит так:


Код:
int mas[200];//объявляем массив;

loop:
совершаем какое-то действие,значение которого возвращаем в х
i=0;
mas[i]=x;//
i=i++;
goto loop;

void Sravnenie(); /*чтобы сравнить все элементы массива между собой в   отдельной функции*/


void Sravnenie()
{
for(int k=0;k<1000;++k)
{
for(int j=0;j<1000;++j)
   {

	if (mas[j]==mas[k])
	{
		cout<<"bla-bla"<<endl;
	}
     }
  }
}
но никакого сравнения между элементами не происходит. Скажите пожалуйста, в чем принципиальная ошибка?
Faton 11 вне форума Ответить с цитированием
Старый 05.11.2012, 23:35   #2
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

не понял задания немного.. но например так можно решить:

Код:
const int SIZE=5;
int mas[SIZE]={8,8,8,8,8};
int f=1,i=0;
for(i=1;i<SIZE;i++)
    if(mas[i]==mas[i-1]) f++;
if(SIZE==f) printf("Элементы одинаковы");
о господи что это?
Код:
i=i++;
ни разу такого не видел)))

Последний раз редактировалось Murashov; 05.11.2012 в 23:37.
Murashov вне форума Ответить с цитированием
Старый 05.11.2012, 23:39   #3
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

аа кажется понял, Вы хотите каждый элемент сравнить с каждым?

Код:
const int SIZE=5;
int mas[SIZE]={8,8,8,8,8};
for(int i=0;i<SIZE;i++)
    for(int j=0;j<SIZE;j++)
        if((mas[i]==mas[j])&&(i!=j)) printf("mas[%d]=mas[%d]",i,j);
а так ничего не понял из кода что вообще делает эта часть? вернее должна делать?
int mas[200];//объявляем массив;
Код:
loop:
совершаем какое-то действие,значение которого возвращаем в х
i=0;
mas[i]=x;//
i=i++;
goto loop;
чему равен x? зачем прибавлять i и записывать его в i? и потом что за гоуту? зачем оно?) комментарий не соотвествует коду вообще... ничего мы тут в x не возвращаем, а зацикливаем loop, где каждый раз прибавляем и тут же обнуляем i. и что за метод инкремента?) почему i=i++?
и почему внешний и внутренние циклы идут до 100, а не до 200? у нас же размер массива 200


Последний раз редактировалось Murashov; 05.11.2012 в 23:46.
Murashov вне форума Ответить с цитированием
Старый 05.11.2012, 23:46   #4
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

массив задается не вручную, а представляет из себя все значения некоторой переменной. И сравнить между собой нужно все элементы, а не два последних.
Faton 11 вне форума Ответить с цитированием
Старый 05.11.2012, 23:48   #5
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

я же выше написал прогу, какой вопрос-то?) почему два последних? где я сравниваю два последних?) ввод с клавы - в чём проблема?

Murashov вне форума Ответить с цитированием
Старый 05.11.2012, 23:56   #6
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

Код:
int mas[200];//объявляем массив;

int i=0;
int x;

loop:
  mas[i]=x;
  i=i++; 
  x=x++;// например пусть такое действие
goto loop;

void Sravnenie(); /*чтобы сравнить все элементы массива между собой в   отдельной функции*/


void Sravnenie()
{
for(int k=0;k<200;++k)/*тут ,кстати, даже не сто было, а 1000, но это не  принципиально*/
{
for(int j=0;j<200;++j)
   {
	if (mas[j]==mas[k])
	{
		cout<<"bla-bla"<<endl;
	}
     }
  }
}

Само сравнение делается правильно, но на практике не сравнивает ничего. Почему?
Faton 11 вне форума Ответить с цитированием
Старый 06.11.2012, 00:03   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да уж, странный код.
Ваш loop зацикливается, скорее всего.
Да и принято передавать указатель на массив и размер массива в функцию, а не объявлять глобальные переменные.

Еще проверьте, что функция Sravnenie() вообще вызывается (сделайте вывод какой-либо надписи в начале функции).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.11.2012, 00:16   #8
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
Печаль

Хотелось написать покороче и попонятнее, т.к. сама программа длинная, бестолковая и достала меня. Вот она:

Код:
//"Метод Серединных Квадратов"

#include <stdafx.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string>
#include <sstream>
#include <new>

using namespace std;
void Period();

string podstr(string x);//прототип

int sub_intArray[1000];
 int main ()
 {
	int x = 2152;
	int sqr;
	int i=0;
	int j=i+1;
	//int sub_int;
	string sub;
    sqr = x*x;
	

loop1:
    //число-->строка
    ostringstream buffer;
    buffer << sqr;
    string subc = buffer.str();

    //"вырезаем" подстроку 
    sub=podstr(subc);

    //строка-->число
    std::istringstream ss(sub);
    int sub_int;
    ss >> sub_int;

	sub_intArray[i]=sub_int;

		i=i++;
        sqr = sub_int*sub_int;
		if (sub_intArray[200])
		{
		}
		else
        goto loop1;

		for(int k=0;k<1000;++k)
{
   for(int j=0;j<1000;++j)
   {

	if (sub_intArray[j]==sub_intArray[k])
	{
		cout<<"virojdenie"<<endl;
		system ("pause");
	}
   }
  }	
 } 

string podstr(string x)
	 {
		string sub = x.substr(2,4);
        cout << "stroka " << x << endl;
        cout << "podstroka " << sub << endl;
	    return sub;
	 }
та часть, где сравниваются элементы ничего не сравнивает, а сразу переходит к команде
Код:
cout<<"virojdenie"<<endl;
. Почему?
Faton 11 вне форума Ответить с цитированием
Старый 06.11.2012, 00:24   #9
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

наверное это индус с промта пишет.. уже 2 готовые проги кинули и ответили на 10 вопросов вперёд, а он всё зациклился на своём коде, который без ста грамм не разберёшь
Murashov вне форума Ответить с цитированием
Старый 06.11.2012, 00:28   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Murashov, Вы не правы.
Faton 11, программа выводит cout<<"virojdenie"<<endl;, потому что 0-й элемент массива равен 0-му элементу массива, как это ни странно

Update
Murashov, а может и правы
Faton 11, добавьте в проверку сравнение i и k, как в коде Murashovа.

Update2
Вывел для интереса массив на экран, там половина заполнена нулями
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.11.2012 в 00:35.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
По массивам, SOS! из целочисленного массива удалить из массива элементы, встречающиеся менее 3-х раз prelest' Паскаль, Turbo Pascal, PascalABC.NET 1 23.05.2011 22:37
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
1.Найти в матрице первую строку, все элементы которой отрицательны 2.отсортировать элементы массива по в w0lf16 Помощь студентам 2 22.11.2009 15:47
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44