Консультация № 180524
31.10.2010, 19:19
55.00 руб.
0 16 1
Здравствуйте!Помогите пожалуйста написать программу. Задача: максимальное расстояние между локальными минимумами.
Через массивы.
Только на C.
1 курс.
Операционная система linux, компилятор терминал....
Заранее спасибо.

Обсуждение

Неизвестный
31.10.2010, 23:03
общий
Функция задана массивом (эээ... дискретная функция таблицей или непрерывная набором значений в точках???), найти максимальное расстояние между локальными минимумами.
linux,консоль, gcc
Я правильно понял вопрос?
Неизвестный
01.11.2010, 19:34
общий
Набор значений в точках
Выполнить через 1 массив (без использования дополнительных)
linux, terminal
Неизвестный
01.11.2010, 20:55
общий
Киселева Мария Александровна:
Компилятор терминал не бывает. Бывает компилятор gcc, например.
Неизвестный
01.11.2010, 21:19
общий
а программа вроде терминал, там я ввожу gcc имя файла.c
значит компилятор gcc наверн
давно
Мастер-Эксперт
325460
1469
02.11.2010, 16:18
общий
достаточно написать только функцию поиска расстояния между минимумами? или нужна программа полностью?
Об авторе:
to live is to die
Неизвестный
02.11.2010, 19:05
общий
желательна программа полностью
давно
Мастер-Эксперт
325460
1469
03.11.2010, 10:19
общий
Дело в том что на visual studio написать не проблема. вот только как оно под линуксом, проверить негде.
Об авторе:
to live is to die
Неизвестный
04.11.2010, 13:11
общий
напишите программу я думаю там немного откомпилировать на линуксе
под линукс программа geany есть кажеться
давно
Мастер-Эксперт
325460
1469
04.11.2010, 13:45
общий
функция поиска локального минимума

//a - указатель на массив значений
//len - длина массива
int FindLocalMin(int *a, int len)
{

double Disc=0;
int i=0, k=0, l=0 /*mincalc=0*/;

// проверка на локальный минимум границы
if((*a)<*(a+1))
k=1;
// поиск минимума по значениям
for(i=1; i<len; i++)
{
if((*(a+i)<*(a+i+1))&(*(a+i)<*(a+i-1)))
{
if(k==0)
k=i+1;
l=i+1;
}
}
// проверка на локальный минимум окончания
// проверка на локальный минимум границы
if((*a+len)<*(a+len-1))
l=len+1;

// расстояние между минимумами
return l-k;

}

поясните откуда брать массив данных его нужно генерировать или вводить с клавиатуры и есть ли ограничение на длину?


Об авторе:
to live is to die
давно
Мастер-Эксперт
325460
1469
04.11.2010, 14:16
общий
таким может быть main


void main(void)
{
int t1,len,i,datb[0x200];
cout << "Введите размер массива и нажмите Enter: ";
cin>>len;
if(len<0)
cout << "Введенный размер не может быть отрицательным числом ";
else
{
cout << "Введите размер массива и нажмите Enter: ";
for(i=0;i<len;i++)
{
cin>>datb[i];
}
t1=FindLocalMin(datb, 10);

cout << "Расстояние между локальными минимумами " << t1 << endl;
if(t1==0)
cout << "Локальных минимумов < 2 ";
}
}
Об авторе:
to live is to die
Неизвестный
04.11.2010, 18:05
общий
решение задач должно содержать функцию, которая получает в качестве параметров имя масива и его длину и без использования до массивов исполняет необходимые действия.
функция main должна заполнить массив числами из файла. длина массива определяется по знач первого числа в файле или непосредственным подсчетом кол-ва чисел в файле.
давно
Мастер-Эксперт
325460
1469
04.11.2010, 18:14
общий
значит функция остается такой же, реализовано правильно , нужно переписать main под Вашу задачу, сделаю это чуть позже.
Об авторе:
to live is to die
Неизвестный
04.11.2010, 19:39
общий
Буду ждать. очень необходимо.
давно
Мастер-Эксперт
325460
1469
05.11.2010, 10:40
общий
#include <iostream.h>
#include <io.h>
#include <stdio.h>
// может не все файлы включены

void main (void)
{
FILE *fr; // указатель для работы с файлом
int len,t1,datb[0x200];
if ((fr=fopen("testf.bin","rb"))==NULL)
{// открываем файл
puts("OSHIBKA otkr fil");
return;
}
//определяем длину файлов
// fseek(fr,0,SEEK_END);
// len=ftell(fr);
// fseek(fr,0,SEEK_SET);
len=getc(fr);// первый символ файла - длина
// проверяем корректность длины
if(len<0)
{
cout << "Введенный размер не может быть отрицательным числом ";
return;
}
if(len>0x200)
{
cout << "Введенный размер не может быть оболе 0x200 ";
return;
}
for(i=0;i<len;i++)
{
datb[i]=getc(fr);
}
// получить результат расстояния минимумов
t1=FindLocalMin(datb, 10);

cout << "Расстояние между локальными минимумами " << t1 << endl;
if(t1==0)
cout << "Локальных минимумов < 2 ";

}


если все работает то я оформлю ответом две функции.
Об авторе:
to live is to die
давно
Мастер-Эксперт
325460
1469
05.11.2010, 19:12
общий
это ответ
Здравствуйте, Киселева Мария Александровна!
решение задач должно содержать функцию, которая получает в качестве параметров имя масива и его длину и без использования до массивов исполняет необходимые действия.
функция main должна заполнить массив числами из файла. длина массива определяется по знач первого числа в файле или непосредственным подсчетом кол-ва чисел в файле.

текст программы в приложении


Приложение:
#include <iostream.h>
#include <io.h>
#include <stdio.h>




//функция поиска локального минимума

//a - указатель на массив значений
//len - длина массива
int FindLocalMin(int *a, int len)
{

double Disc=0;
int i=0, k=0, l=0 /*mincalc=0*/;

// проверка на локальный минимум границы
if((*a)<*(a+1))
k=1;
// поиск минимума по значениям
for(i=1; i<len; i++)
{
if((*(a+i)<*(a+i+1))&(*(a+i)<*(a+i-1)))
{
if(k==0)
k=i+1;
l=i+1;
}
}
// проверка на локальный минимум окончания
// проверка на локальный минимум границы
if((*a+len)<*(a+len-1))
l=len+1;

// расстояние между минимумами
return l-k;

}





void main (void)
{
FILE *fr; // указатель для работы с файлом
int len,t1,datb[0x200];
if ((fr=fopen("testf.bin","rb"))==NULL)
{// открываем файл
puts("OSHIBKA otkr fil");
return;
}
//определяем длину файлов
// fseek(fr,0,SEEK_END);
// len=ftell(fr);
// fseek(fr,0,SEEK_SET);
len=getc(fr);// первый символ файла - длина
// проверяем корректность длины
if(len<0)
{
cout << "Введенный размер не может быть отрицательным числом ";
return;
}
if(len>0x200)
{
cout << "Введенный размер не может быть оболе 0x200 ";
return;
}
for(i=0;i<len;i++)
{
datb[i]=getc(fr);
}
// получить результат расстояния минимумов
t1=FindLocalMin(datb, 10);

cout << "Расстояние между локальными минимумами " << t1 << endl;
if(t1==0)
cout << "Локальных минимумов < 2 ";

}
5
большое спасибо
Об авторе:
to live is to die
давно
Академик
320937
2216
05.11.2010, 20:49
общий
Цитата: 249232
Только на C.

Цитата: CradleA
#include <iostream.h>

Цитата: CradleA
if((*(a+i)<*(a+i+1))&(*(a+i)<*(a+i-1)))
Что логическое И, что битовое - все одно.
Форма ответа