0 / 0 / 0 Регистрация: 22.12.2009 Сообщений: 7 |
|
1 |
|
Найти в одномерном масиве первое положительное число14.09.2010, 17:07. Показов 3824. Ответов 4
Здравствуйте! Помогите пожалуйста написать программу. Просто если я ее напишу, я сессию закрою. Огромное спасибо заранее! вот что нужно сделать: найти в одномерном масиве первое положительное число
0 |
Почетный модератор 7390 / 2636 / 281 Регистрация: 29.07.2006 Сообщений: 13,696 |
|
14.09.2010, 17:10 |
2 |
если я ее напишу пиши…
я сессию закрою закрывай… Цикл for/while и вперед к звездам.
0 |
ForEveR В астрале 8048 / 4805 / 655 Регистрация: 24.06.2010 Сообщений: 10,562 |
||||
14.09.2010, 17:27 |
3 |
|||
Как вариант.
1 |
Почетный модератор 7390 / 2636 / 281 Регистрация: 29.07.2006 Сообщений: 13,696 |
|
14.09.2010, 17:29 |
4 |
Lavroff, хм… А почему бы не выбрать элемент сразу при вводе? )
0 |
ForEveR В астрале 8048 / 4805 / 655 Регистрация: 24.06.2010 Сообщений: 10,562 |
||||||||
14.09.2010, 17:31 |
5 |
|||||||
Vourhey, Можно и при вводе. Можно и указателями оперировать. Да что угодно можно, но как удобно так и написал. При вводе несколько осложняется тем, что элемент положительный может быть не 1, а так же, что цикл ввода желательно бы довести до конца. С использованием счетчика или можно флага, все решается без проблем.
1 |
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if x[i] > 0:
print(x[i])
Не могу понять что не правильно и почему выводит результат:
Если x = [-3, -5, 3, 4, 2, -2, -6, 5].
Тогда выводит:
Как сделать чтобы в первом случае вывело только 4, а во втором 3
strawdog
23.5k4 золотых знака19 серебряных знаков34 бронзовых знака
задан 2 дек 2020 в 19:30
Варианты @Zhihar, @NykSu проходят весь список, а достаточно получить только один первый элемент из генератора:
print(next(filter(lambda i: i > 0, x)))
ответ дан 2 дек 2020 в 20:41
erieri
31.6k3 золотых знака26 серебряных знаков56 бронзовых знаков
а попробуйте так:
x = [-3, -5, 4, 2, -2, -6, 5]
print(list(filter(lambda i: i > 0, x))[0])
ответ дан 2 дек 2020 в 19:52
ZhiharZhihar
36.9k4 золотых знака25 серебряных знаков67 бронзовых знаков
2
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if i > 0:
print(i)
break # Прерывает цикл
i по сути и есть элемент x, а не его индекс. В первой итерации у Вас получается x[-3], во второй x[-5] и тд…
Дублирование из за того что x[-5] это 4, и x[2] тоже указывает на 4.
ответ дан 2 дек 2020 в 19:37
KersKers
3,1562 золотых знака7 серебряных знаков16 бронзовых знаков
1
if условие:
#ваш код
break
Тогда программа выйдет из цикла и не будет проверять другие елементы
cauf
2,50412 серебряных знаков24 бронзовых знака
ответ дан 2 дек 2020 в 19:38
RomanRoman
211 бронзовый знак
1
Можно и такой код, как вариант:
lst = [-3, -5, 4, 2, -2, -6, 5]
print([x for x in lst if x > 0][0])
Хоть выше с циклом быстрее выполнится.
ответ дан 2 дек 2020 в 20:10
NykSuNykSu
3092 серебряных знака8 бронзовых знаков
Добавлю функционального изврата, раз уж все пишут разные варианты. )
from operator import lt
from functools import partial
lst = [-3, -5, 4, 2, -2, -6, 5]
print(next(filter(partial(lt, 0), lst)))
ответ дан 2 дек 2020 в 20:32
CrazyElfCrazyElf
65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков
I have a one-dimensional array in the C language. I enter the number of elements (n) and then I enter the elements themselves. I want to find the position and the value of the first positive element and of the last negative element. How can I do it? I was thinking about something like this, but there’s a semantic error and I’m stuck. I am just a beginner and I would really appreciate your help. Thank you in advance!
#include <stdio.h>
int main()
{
int Array[100], i, n;
printf("Enter n: ");
scanf("%d", &n);
printf("Enter %d elementsn", n);
for (i = 0; i < n; i++)
{
printf("Enter number%d: ", i + 1);
scanf("%d", &Array[i]);
}
for (i = 0; i < n; i++)
{
if (Array[i] > 0)
{
printf("The first positive element is %dn", Array[i]);
}
}
for (i = 100; i < n; i--)
{
if (Array[i] < 0)
{
printf("The last negative element is %dn", Array[i]);
}
}
}
asked Oct 30, 2017 at 11:51
9
Test for first positive does not exit so you’ll get all of them.
Test for negative needs to start at n-1 not 100 and terminate after it has tested element 0. It, too, needs to break when it’s found one.
answered Oct 30, 2017 at 11:56
LoztInSpaceLoztInSpace
5,5641 gold badge15 silver badges27 bronze badges
1
In the line:
for (i=100; i<n; i--)
you should write
for (i=(n-1); i>=0; i--)
that way you start from the last inserted element until you reach 0, the beggining of your array.
Furthermore in your if’s you could use a break; command after your printf’s. That way when you meet an element with the required characteristics you exit your loop. If you don’t use break, you print every positive and negative element, not just the first you meet
answered Oct 30, 2017 at 11:58
ChatzChatz
564 bronze badges
2
Few problems:
- in your 2nd loop — you don’t
break
, meaning it will continue running (and printing!!) even after 1st positive was found - in your 3rd loop —
i = 100; i < n
. Wrong! it should have beeni = n-1; i >= 0
since the array is only 100 elements long. And also the same problem with nobreak
as before - INDENTATION!!!! (makes your code readable)
- What happens if
n > 100
? (hint: you will insert elements to memory you don’t own —> UB)
Here is a fixed version:
#include <stdio.h>
int main()
{
int Array[100], i, n;
printf("Enter n: ");
scanf("%d", &n);
if( n > 100)
{
printf("errorn");
return 1;
}
printf("Enter %d elementsn", n);
for(i=0; i<n; i++)
{
printf("Enter number%d: ",i+1);
scanf("%d", &Array[i]);
}
for(i=0; i<n; i++)
{
if (Array[i]>0)
{
printf("The first positive element is %dn", Array[i]);
break;
}
}
for (i=n-1; i>=0; i--)
{
if (Array[i]<0)
{
printf("The first negative element is %dn", Array[i]);
break;
}
}
return 0;
}
answered Oct 30, 2017 at 11:58
CIsForCookiesCIsForCookies
11.9k10 gold badges58 silver badges121 bronze badges
1
//--------------------------------------------------------------------------- #include <stdio.h> #include <conio.h> #include <math.h> #include<stdlib.h> //--------------------------------------------------------------------------- int main() { int n,i,a=0,b=0,c=1,f=0,k=0; int t[50]; printf("Vvedite kolicestvo elementovn"); scanf("%d",&n); randomize(); for (i = 0; i < n; i++) { t[i]=random(41)-20; printf("%4d",t[i]); } for (i = 0; i<n; i++) { if (t[i]>0){ c=i; break; } } printf("nnomer C=%d",c); getch(); return 0; } //---------------------------------------------------------------------------
Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
- Некоторые свойства элементов массива
- Задачи поиска
Основной вопрос задач поиска — где в массиве находится элемент, обладающий нужным свойством. При этом свойство должно быть абсолютным: для определения пригодности элемента достаточно знать только этот элемент. Большинство задач поиска сводится к задаче — найти в массиве элемент с заданным значением.
Некоторые свойства элементов массива
Свойство |
Запись свойства |
четные | a[i] mod 2 = 0 |
нечетные |
a[i] mod 2 <> 0 |
кратные k |
a[i] mod k = 0 |
некратные k |
a[i] mod k <> 0 |
на четных местах |
i mod 2 = 0 |
запись числа заканчивается на цифру k | a[i] mod 10=k |
на нечетных местах |
i mod 2 <> 0 |
положительные |
a[i] > 0 |
неотрицательные |
a[i] >= 0 |
меньше х1 или больше х2 | (a [i]<x1) or (a [i]>x2) |
в интервале (х1; х2) |
(a [i]>x1) and (a [i]<x2) |
Задача 1. Найти номер первого по счету положительного элемента массива.
Использование цикла с параметром (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. |
|
program z; const n=30; type mas= array [1..n] of real; var a: mas; i, k: integer; begin k:=0; for i:=1 to n do read (a[i]); for i:=n downto 1 do if a[i]>0 then k:=i; if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
|
Использование цикла с постусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k — номер первого положительного элемента массива . Метод решения: — просматриваем массив, начиная с первого элемента, если находим положительный элемент, то переменной k присваиваем номер данного положительного элемента; -работа цикла заканчивается, если значение k изменилось или если просмотрен весь массив; — если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=5; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=0; repeat i:=i+1; if a[i]>0 then k:=i; until (k>0) or (i=n); if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
|
Использование цикла с предусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k — номер первого положительного элемента массива . Метод решения: — просматриваем массив: если текущий элемент неположительный и i < n, то значение переменной i увеличиваем на 1, иначе если текущий элемент положительны, то переменной k присваиваем номер данного положительного элемента; — если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=7; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=1; while (a[i]<=0) and (i<n) do i:=i+1; if a[i]>0 then k:=i; if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
Вопросы:
К началу страницы
№ |
Фрагмент программы |
Блок — схема |
1 |
Вычисление суммы всех элементов массива |
|
2 |
Вычисление среднего арифметического чётных элементов массива |
|
3 |
Найти произведение всех элементов массива |
|
4 |
Количество четных элементов массива |
|
5 |
Удвоить все положительные элементы массива, и поменять знак у остальных |
|
6 |
Перестановка всех элементов массива в обратном порядке |
|
7 |
Перестановка соседних элементов массива |
|
8 |
Обмен половин массива |
|
9 |
Проверить, есть ли в массиве четные числа |
|
10 |
Проверить, что массив упорядочен строго по возрастанию |
|
11 |
Поиск максимального элемента массива (границы изменения значений элементов массива неизвестны) |
|
12 |
Значения элементов массива принадлежат промежутку от -500 до 500. Найти максимальный элемент массива. |
|
13 |
Поиск количества элементов произвольного массива равных максимальному |
|
14 |
Найти номер максимального элемента массива, если он единственный, или количество максимальных элементов, если их несколько. |
|
15 | Поиск второго по величине максимального элемента массива max:=a[1]; max2:=a[2]; if max<max2 then begin max:=a[2]; max2:=a[1]; end; for i:=3 to n do if a[i]>max then begin max2:=max; max:=a[i]; end else if a[i]>max2 then max2:=a[i]; |
|
16 |
Поиск номера максимального элемента |
|
17 |
Значения элементов массива принадлежат диапазону от – 500 до 500. найти максимальный отрицательный элемент массива. Гарантируется, что отрицательные элементы есть. |
|
18 |
Номера двух элементов массива наименее отличающихся друг от друга |
|
19 |
Номера двух последовательных элементов массива наименее отличающихся друг от друга |
Задача 1 (..pas) Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.
const N = 30;
var A: array[1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(A[i]);
…
end.
Задача 2 (..pas) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
…end.
Задача
3 (.pas) Дан массив, состоящий из 30 вещественных чисел. Вычислить сумму всех элементов. Массив вводится с клавиатуры.
а) Наберите программу или воспользуйтеть файлом .pas, заменив многоточие на необходимые команды:
Program z;
Const n=5;
type mas=array[1..n] of real;
var a: mas;
s: real;
i: integer;
begin
for i:=…….. to ……. do
begin
writeln (‘введите элемент массива’);
………………….;
S:=S+…….. ;
end;
writeln (‘ Сумма равна’,…….);
End.
б) запустите данную программу и посмотрите результат её работы.
Задача
4. Дан массив целых чисел.
а) каждый положительный элемент, заменить на его квадрат;
б) выяснить, верно ли, что максимальный элемент больше среднего арифметического на 5.
Задача
5 (.pas) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
const
N = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
……….
end.