Страница 1 из 1
Составить функцию определения суммы sq квадратов элемента массива
Добавлено: 04 июн 2014, 14:21
Sneg@
Составить функцию определения суммы sq квадратов элемента массива A.Используя функцию,написать программу нахождения отношения q суммы квадратов элементов двух массивов A и B.Ввести A,B;Вывести A,B,q.
Помогите сделать это задание,пожалуйста,написала программу,но она не работает,неправильно,значит написала,в чем проблема не пойму.Помогите!!!
Код: Выделить всё
#include <stdio.h>
int vvod mas(float mas[]);
float sq(float mas[],int n);
int na,nb;
float a[100],b[100];
void main(void)
{
float sqa,sqb;
na=vvod mas(a),
nb=vvod mas(b),
sqa=sq(a;na);
sqb=sq(b,nb);
q=sqa/sqb;
vivod mas(a,na);
vivod mas(b,nb);
printf("%f",q);
}
int vvod mas(float mas[])
{
int n,i;
printf("\n введите количество элементов: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%f",&mas[i]);
}
float q(float mas[],int n)
{
float n,i;
printf("\n введите количество элементов: ");
scanf("%f,&n);
for(i=1;i<=n;i++)
scanf("%f,&mas[i]);
}
printf("\n В массиве: \n");
for(i=1;i<=n;i++)
printf("%d %d",a,b,q);
printf("\n");
}
getch();
}
Re: Поиск элементов массива
Добавлено: 05 июн 2014, 10:26
Сионист
Нельзя сразу найти элемент, можно лишь постепенно увеличивать растущий подмассив и увеличивать его можно только на 1 элемент за 1 раз, так как одновременно можно обработать только 1 элемент. И начинать надо с единственного элемента. Но не надо формально оформлять деление массива на подмассивы, просто есть счётчик цикла, значение которого как раз и отмечает, какая часть массива уже обработана, а какая ещё нет, обработанная часть - и есть наш подмассив. Тогда счётчик цикла будет индексом первого не обработанного элемента, которому предстоит войти в подмассив по завершении текущего шага цикла. Или иттератором такого элемента. Или указателем на него. Теперь смотри: на предыдущем шаге у тебя был найден подходящий элемент для уже обработанного подмассива, информация о нём была где то сохранена. Где? Это может быть индекс искомого элемента, его иттератор, указатель на него, или значение элемента, в зависимости от того, что именно требуется найти, но в любом случае это переменная, назовём её буфер результата. Но это для уже обработанного подмассива, а теперь тебе надо обработать ещё один элемент. Как? Надо решить, будет ли он подходящим и если да, то записать это в буфер результата. Как записать? Просто присвоить буферу результата новое значение. Если ты ищешь значение элемента, то присвой буферу результата значение текущего элемента, иначе присвой буферу результата счётчик цикла. А как решить? После записи в буфер результата текущий элемент станет последним обработанным, если же он не подходит, то станет последним обработанным уже после того, как процессор решит, что он не подходит. Если ты ищешь последний подходящий, то у тебя два условия:
1. Элемент удовлетворяет условию (например, положителен).
2. Среди таких он последний.
А если ты ищешь первый подходящий, то у тебя тоже два условия:
1. Элемент удовлетворяет условию (например, положителен).
2. Среди таких он первый.
Если ты ищешь последний, то всё просто: надо учесть только первое условие, а последним элемент является заведомо. А если первый? Тогда ты условия такие:
1. Элемент удовлетворяет условию (например, положителен).
2. Другие такие элементы не найдены, то есть запись в буфер результата не производилась.
Как проверить второе условие? Только по значению буфера результата, для этого надо до цикла присвоить буферу результата специальное значение, такое, каким ответ быть не может. Для указателей это NULL, или null_ptr. Для иттераторов, видимо, ::end. Для индексов индекс за пределами массива. А для значений? Не удовлетворяющее условию. Для действительных чисел также nan (не число), или какая либо из бесконечностей. Проще будет в буфере результата найти индекс, или указатель, а потом уже по нему выполнить доступ к элементу и присвоить значение второй переменой.
Re: Функции
Добавлено: 05 июн 2014, 10:26
Сионист
Но зачем? Ещё проще прервать цикл: если ты нашёл подходящий элемент, то он уже первый, остальные первыми не будут. Но ни тот, ни другой подход не пройдут, если в первое условие входит экстремальность (максимальность, или минимальность), так как минимум/максимум подмассива может быть средним значением во всём массиве. Тогда учти такой нюанс: первый элемент в каком либо порядке будет последним в обратном порядке, а последний - первым. То есть перебери массив при поиске первого экстремума задом наперёд, чтоб искомый элемент был последним. А при поиске последнего не экстремального, но подходящего по какому либо условию, перебери задом наперёд и прерви цикл, найдя один элемент. Как же решить, походит ли элемент по первому условию? Если он не экстремален, то простой альтернативой (условным оператором без else), в которую надо прописать условие. А если экстремален? Экстремумы бывают двух видов: минимумы и максимумы. Если ищешь минимум, то у тебя уже заведомо есть минимум уже обработанного подмассива, текущий элемент будет минимумом подмассива, на один элемент большего, если он не больше минимума уже обработанного подмассива. До запуска цикла надо поместить туда минимум из первого элемента (указатель на минимум, индекс минимума, иттератор минимума), а он сам является минимумом из себя. Если элемент меньше, то он уж точно не больше, но если проверять на "меньше", то при равенстве элементов последним останется минимум, найденный на предыдущем шаге и вот тебе ещё один способ найти первый минимум, перебирая массив от начала: первый минимум останется последим подходящим, так как ни один другой элемент не меньше. А если проверять на "не больше" (меньше, или равно), то при последним подходящим при равенстве окажется текущий и вот тебе способ при том же порядке перебора найти последний минимум. А если ищется максимум? Тогда до запуска цикла надо поместить в буфер результата максимум из первого элемента, а подходящим текущий элемент будет, если он не меньше максимума подмассива, на один элемент меньшего. Но если элемент больше, то он уж точно не меньше, а при сравнении на "больше" и равенстве элементов последним окажется предыдущий найденный, то есть первый максимум останется последним подходящим, так как ни один другой элемент не больше и вот тебе ещё один способ найти первый максимум при переборе от начала. А если проверять на "не меньше" (больше, или равно), то при равенстве последним станет текущий и вот тебе способ найти последний максимум при том же направлении перебора. Если условий сразу несколько, то первое условие будет составным, это будет логическое выражение, объединяющее с помощью соответствующих логически операторов все условия в задании, кроме условия, что искомый элемент должен быть первым, или последним.
Re: Составить функцию определения суммы sq квадратов элемента массива A
Добавлено: 09 июн 2014, 17:13
Romeo
Вынес сообщение и ответы на него в отдельную тему. Sneg@, не тули в одну тему несколько заданий. Темы с миллионом закладок теряют полезность, подобно свалке книг по сравнению с книжными рядами библиотеки.