Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] написать функцию, номер макс. отриц. элемента массива 
:(
    Опции темы
TOREN
Дата 25.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



требуется написать функцию, которая находит номер максимального отрицательного элемента одномерного массива. прошу помощи.

Это сообщение отредактировал(а) TOREN - 25.2.2008, 22:16
PM MAIL   Вверх
susanin
Дата 25.2.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



небольшое уточнение... максимальным отрицательным считать то, кторое больше? т.е. например -3 и -5, максимальное будет -3?
PM MAIL   Вверх
TOREN
Дата 25.2.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Цитата

небольшое уточнение... максимальным отрицательным считать то, кторое больше? т.е. например -3 и -5, максимальное будет -3?

да, именно так
PM MAIL   Вверх
susanin
Дата 25.2.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



Код

#include <iostream>
using namespace std;

int maxIndex(int[],int);

int main()
{
    setlocale(LC_ALL,"rus");
    const int size=10;
    int Array[size] = {2,2,1,5,-5,-6,7,-1,9,1};
    /*for(int i=0;i<size;i++)
        cin>>Array[i];*/
    cout<<"Номер максимального отрицательного элемента: "<<maxIndex(Array, size)<<endl;
    return 0;
}
int maxIndex(int myArray[],int size)
{
    int index=0;
    for(int i=0;i<size;i++)
    {
        if(myArray[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(int j=index;j<size;j++)
        {
            if(myArray[j]>myArray[index-1]&&myArray[j]<0)
                index=j+1;
        }
    return index;
}

немного подправил еще....теперь вроде правильно...

Это сообщение отредактировал(а) susanin - 25.2.2008, 23:32
PM MAIL   Вверх
TOREN
Дата 25.2.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



это C++, мне нужно на Си, этот код в quickC не компилируется.
PM MAIL   Вверх
susanin
Дата 25.2.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



TOREN, ну изменить то cout<< на printf() и cin>> на scanf() сам сможешь?? ведь алгоритм то такой же будет!
PM MAIL   Вверх
TOREN
Дата 26.2.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



спасибо! просто изначально C++ вызвал панику, отбросив лишнее и добавив нужное получаем код на Си:
Код

#include<stdio.h>
int maxIndex(int[],int);
int i, n, j, A[];
int main()
{
    printf("Vvedite kolichestvo elementov:");
    scanf("%i", &n);
    for(i=0; i<n; i++)
    {

    printf("Vvedite elementi massiva A[%i]:", i);
    scanf("%i", &A[i]);

    }
    if(maxIndex(A, n))
    {
    printf("Nomer max otricatelnogo elementa: %i", maxIndex(A, n));
    return 0;
    } else
    {
    printf("Etot massiv ne sodezhit otricatelnih elementov!");
    }
}
int maxIndex(int A[],int n)
{
    int index=0;
    for(i=0;i<n;i++)
    {
    if(A[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(j=index;j<n;j++)
        {
        if(A[j]>A[index-1]&&A[j]<0)
                index=j+1;
        }
    return index;

}





Это сообщение отредактировал(а) TOREN - 26.2.2008, 19:53
PM MAIL   Вверх
TOREN
Дата 26.2.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



требуется доработать программу таким образом, чтобы в головной программе вычислялось в каком из трех одномерных массивов максимальный отрицательный элемент ближе к началу. кто-нибудь подскажет как реализовать?
PM MAIL   Вверх
Robin
Дата 26.2.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Код


#include<stdio.h>
int maxIndex(int[],int);
int i, n, j, A[], first, second, third, temp;
int main()
{
    for(int c = 0; c < 3; ++c)
    {
    printf("Vvedite kolichestvo elementov:");
    scanf("%i", &n);
    
    for(i=0; i<n; i++)
    {
    printf("Vvedite elementi massiva A[%i]: ", i);
    scanf("%i", &A[i]);
    }
    
    if(maxIndex(A, n))
    {
    printf("Nomer max otricatelnogo elementa: %i \n", maxIndex(A, n));
    return 0;
    } else
    {
    printf("Etot massiv ne sodezhit otricatelnih elementov!\n");
    }
    if(c == 0)first = temp;
    if(c == 1)second = temp;
    if(c == 2)third = temp;
    }
    if(first > second && first > third)printf("Pervoje znachenie blize\n");
    if(second > first && second > third)printf("Vtoroje znachenie blize");
    if(third > first && third > second)printf("Tretije znachenie blize");
}

int maxIndex(int A[],int n)
{
    int index=0;
    for(i=0;i<n;i++)
    {
    if(A[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(j=index;j<n;j++)
        {
        if(A[j]>A[index-1]&&A[j]<0)
                index=j+1;
        }
    temp = j;
    return index;
}



но чесно говоря у меня компилятор 
int i, n, j, A[], first, second, third, temp;
такое отказался принимать, однако если у тебя старый сишный то должно прокатить
PM MAIL   Вверх
TOREN
Дата 26.2.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Robin, программа компилируется, но вовсе не работает. даже в коде невозможно понять каким образом она работает. она выводит лиш номер максимального отрицательного элемента одномерного массива. и ввод элементов идет только в один массив.

Добавлено через 3 минуты и 22 секунды
логика
Код

    if(first > second && first > third)printf("Pervoje znachenie blize\n");
    if(second > first && second > third)printf("Vtoroje znachenie blize");
    if(third > first && third > second)printf("Tretije znachenie blize");

сходна с тем что я химичил на эту тему:
Код

#include<stdio.h>
int maxIndex(int[],int);
int maxIndex2(int[],int);
int maxIndex3(int[],int);
int i, n=2, j, k, m, A[], A2[], A3[];
int main()
{
    printf("________\n");
    for(i=0; i<2; i++)
    {
    printf("Vvedite elementi massiva A1[%i]:", i);
    scanf("%i", &A[i]);
    }
    printf("________\n");
    for(i=0; i<2; i++)
    {
    printf("Vvedite elementi massiva A2[%i]:", i);
    scanf("%i", &A2[i]);
    }
    printf("________\n");
    for(i=0; i<2; i++)
    {
    printf("Vvedite elementi massiva A3[%i]:", i);
    scanf("%i", &A3[i]);
    }

    if((maxIndex(A, n)) && (maxIndex2(A2, n)) && (maxIndex3(A3,n)))
    {
    printf("Nomer max otricatelnogo elementa massiva A1: %i\n", maxIndex(A, n));
    printf("Nomer max otricatelnogo elementa massiva A2: %i\n", maxIndex2(A2, n));
    printf("Nomer max otricatelnogo elementa massiva A3: %i\n", maxIndex3(A3, n));

    if( (maxIndex(A,n))>(maxIndex(A2, n)) && (maxIndex(A,n))>(maxIndex3(A3, n)) )
printf("Blizhe k nachalu element massiva A1 pod nomerom: %i", maxIndex(A, n));
    if( (maxIndex2(A2, n))>(maxIndex(A, n)) && (maxIndex2(A2, n))>(maxIndex3(A3, n)) )
printf("Blizhe k nachalu element massiva A2 pod nomerom: %i", maxIndex(A2, n));
    if( (maxIndex3(A3, n))>(maxIndex(A, n)) && (maxIndex3(A3, n))>(maxIndex2(A2, n)) )
printf("Blizhe k nachalu element massiva A3: %i pod nomerom", maxIndex(A3, n));
    return 0;
    } else
    {
    printf("Etot massiv ne sodezhit otricatelnih elementov!");
    }
}

int maxIndex3(int A3[],int n)
{
    int index3=0;
    for(i=0;i<n;i++)
    {
    if(A3[i]<0)
        {
            index3=i+1;
            break;
        }
    }
    for(j=index3;j<n;j++)
        {
        if(A3[j]>A3[index3-1]&&A3[j]<0)
                index3=j+1;
        }
    return index3;
   }

int maxIndex2(int A2[],int n)
{
    int index2=0;
    for(i=0;i<n;i++)
    {
    if(A2[i]<0)
        {
            index2=i+1;
            break;
        }
    }
    for(j=index2;j<n;j++)
        {
        if(A2[j]>A2[index2-1]&&A2[j]<0)
                index2=j+1;
    }


    return index2;

}
int maxIndex(int A[],int n)
{
    int index=0;
    for(i=0;i<n;i++)
    {
    if(A[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(j=index;j<n;j++)
        {
        if(A[j]>A[index-1]&&A[j]<0)
                index=j+1;
        }
    return index;


}


однако моя тоже не работает, возможно потому что условия неправильно формулируются
PM MAIL   Вверх
Robin
Дата 26.2.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Код

#include "stdafx.h"
#include<stdio.h>
int maxIndex(int A[]);
int i, n, j, A[10], first, second, third, temp;
int index = 0;
int main()
{
    for(int c = 0; c < 3; ++c)
    {
      
    for(i=0; i<10; i++)
    {
    printf("Vvedite elementi massiva A[%i]: ", i);
    scanf("%i", &A[i]);
    }
    
    if( maxIndex(A) ) printf("Maximalniy otricatelniy element: %i \n", index);
    
    else printf("Etot massiv ne sodezhit otricatelnih elementov!\n");
    
    if(c == 0)first = temp;
    if(c == 1)second = temp;
    if(c == 2)third = temp;
    }
    
    if(first < second && first < third)printf("Pervoje znachenie blize\n");
    else
    if (second < first && second < third)printf("Vtoroje znachenie blize");
    else printf("Tretije znachenie blize");
}
int maxIndex(int A[])
{
    for(i=0;A[i];i++)
    {
    if(A[i]<0 && A[i > index])
        {
            index=A[i];
            temp = i;
            break;
        }
    }
  
    return temp;
}


отредактировал, прошу прощения

Это сообщение отредактировал(а) Robin - 26.2.2008, 22:21
PM MAIL   Вверх
TOREN
Дата 26.2.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Robin, к сожалению она неправильно опять работает. поясняю.
на изображении видно:
user posted image
программа отображает ни только неправильный максимальный отрицательный элемент (а таковым является -2, потмоу что -2>-11), но она должна в функции вычислять номер максимального отрицательного элемента, а не сам элемент.
PM MAIL   Вверх
susanin
Дата 26.2.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



так...что то я не очень понял что надо сделать? можно поподробней?
Цитата(TOREN @  26.2.2008,  20:47 Найти цитируемый пост)
 каком из трех одномерных массивов максимальный отрицательный элемент ближе к началу.

т.е. должно вводиться 3 массива...в каждом массиве находиться максимальный отрицательный элемент и потом писать в каком массиве этот элемент ближе к нчалу? так?
PM MAIL   Вверх
susanin
Дата 26.2.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



TOREN
 
Цитата(TOREN @  26.2.2008,  21:39 Найти цитируемый пост)
сходна с тем что я химичил на эту тему:

ну вот я попробовал что то похожее сделать...
Код

#include <iostream>
#include <cmath>
using namespace std;

int maxIndex(int[],int);
int main()
{
    setlocale(LC_ALL,"rus");
    const int size=10;
    int Array1[size] = {2,2,1,5,-5,-6,7,-1,9,1};
    int Array2[size]= {3,6,-5,7,1,9,-4,8,9,10};
    int Array3[size]= {1,2,3,4,-5,6,7,-8,9,-10};
    /*for(int i=0;i<size;i++)
        cin>>Array[i];*/
    cout<<"Номер максимального отрицательного элемента массива1: "<<maxIndex(Array1, size)<<endl;
    cout<<"Номер максимального отрицательного элемента массива2: "<<maxIndex(Array2, size)<<endl;
    cout<<"Номер максимального отрицательного элемента массива3: "<<maxIndex(Array3, size)<<endl;
    int minA=maxIndex(Array1, size);
    int minB=maxIndex(Array2, size);
    int minC=maxIndex(Array3, size);
    if(minA<minB&&minA<minC)
    cout<<"Ближе расположен элемент по номеру "<<maxIndex(Array1, size)<<" в массиве 1"<<endl;
    else
        if(minB<minA&&minB<minC)
            cout<<"Ближе расположен элемент по номеру "<<maxIndex(Array2, size)<<" в массиве 2"<<endl;
        else
            if (minC<minA&&minC<minB)
                cout<<"Ближе расположен элемент по номеру "<<maxIndex(Array3, size)<<" в массиве 3"<<endl;
    return 0;
}
int maxIndex(int myArray[],int size)
{
    int index=0;
    for(int i=0;i<size;i++)
    {
        if(myArray[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(int j=index;j<size;j++)
        {
            if(myArray[j]>myArray[index-1]&&myArray[j]<0)
                index=j+1;
        }
    return index;
}



Это сообщение отредактировал(а) susanin - 26.2.2008, 23:53
PM MAIL   Вверх
TOREN
Дата 27.2.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Всем большое спасибо, задача решена. Окончательно помог код susanin.
Откомпилировал под quickC, и вот итог:
Код

#include<stdio.h>
int i, minA, minB, minC,j, n, A[], size=10;
int maxIndex(int[], int);
int main()
{

    int Array1[10] = {2,2,1,5,-5,-6,7,-1,9,1};
    int Array2[10]= {3,6,-5,7,1,9,-4,8,9,10};
    int Array3[10]= {1,2,3,4,-5,6,7,-8,9,-10};
    printf("Nomer max otricatelnogo elementa massiva A1: %i\n", maxIndex(Array1, size));
    printf("Nomer max otricatelnogo elementa massiva A2: %i\n", maxIndex(Array2, size));
    printf("Nomer max otricatelnogo elementa massiva A3: %i\n", maxIndex(Array3, size));
    minA=maxIndex(Array1, size);
    minB=maxIndex(Array2, size);
    minC=maxIndex(Array3, size);
    if(minA<minB&&minA<minC)
   
    printf("Blizhe raspolozhen element v massive 1 po nomeru %i", maxIndex(Array1, size));
    else
        if(minB<minA&&minB<minC)
            printf("Blizhe raspolozhen element v massive 2 po nomeru %i", maxIndex(Array2, size));
        else
            if (minC<minA&&minC<minB)
                printf("Blizhe raspolozhen element v massive 3 po nomeru %i", maxIndex(Array3, size));
    return 0;
}
int maxIndex(int A[], int size)
{
    int index=0;
    for(i=0;i<size;i++)
    {
        if(A[i]<0)
        {
            index=i+1;
            break;
        }
    }
    for(j=index;j<size;j++)
        {
            if(A[j]>A[index-1]&&A[j]<0)
                index=j+1;
        }
    return index;

}


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.