
13.12.2009, 13:43
|
|
Участник форума
Регистрация: 03.07.2009
Сообщений: 151
С нами:
8871700
Репутация:
41
|
|
Сообщение от Alexey2
Помогите плз решить вот такую вот хреньку... Долго думал, но нифига не понял, даже условие задачи...
Составить функцию, которая возвращает значение 0, если в последовательности целых чисел а1,а2,...аn отсутствуют три соседних нечетных числа, или номер первого числа встретившейся тройки таких чисел...
Ну или подскажите хотя бы в какую сторону копать)
Спасибо))
Не знаю даже, в какую сторону отсылать, ибо это основы, поэтому сразу код:
Код:
function proverk (a:array[1..n] of integer):integer;
var
i,j:integer;
begin
for i:=1 to n-2 do
if a[i] mod 2 <> 0 then
if a[i+1] mod 2 <> 0 then
if a[i+2] mod 2 <> 0 then
begin
proverk:=i;
exit;
end;
proverk:=0;
end;
|
|
|

13.12.2009, 13:49
|
Регистрация: 29.05.2002
Сообщений: 1,793
С нами:
12604706
Репутация:
0
|
|
Сообщение от Thenno
Не знаю даже, в какую сторону отсылать, ибо это основы, поэтому сразу код:
Код:
function proverk (a:array[1..n] of integer):integer;
var
i,j:integer;
begin
for i:=1 to n-2 do
if a[i] mod 2 <> 0 then
if a[i+1] mod 2 <> 0 then
if a[i+2] mod 2 <> 0 then
begin
proverk:=i;
exit;
end;
proverk:=0;
end;
А если бы нужно было проверить последовательности из 23 элементов, ты бы делал 23 IFа ? 
|
|
|

13.12.2009, 14:12
|
|
Участник форума
Регистрация: 03.07.2009
Сообщений: 151
С нами:
8871700
Репутация:
41
|
|
Сообщение от Algol
А если бы нужно было проверить последовательности из 23 элементов, ты бы делал 23 IFа ? 
Нет конечно. Просто если надо из трех, то мне проще написать три IFа подряд и не парится.
|
|
|

13.12.2009, 20:32
|
|
Новичок
Регистрация: 30.05.2009
Сообщений: 12
С нами:
8921125
Репутация:
0
|
|
Thenno, биг спс, хоть что то)
Сообщение от Algol
А если бы нужно было проверить последовательности из 23 элементов, ты бы делал 23 IFа ? 
А как бы ты реализовал по - другому...?
|
|
|

13.12.2009, 21:08
|
|
Участник форума
Регистрация: 03.07.2009
Сообщений: 151
С нами:
8871700
Репутация:
41
|
|
Сообщение от Alexey2
Thenno, биг спс, хоть что то)
А как бы ты реализовал по - другому...?
Отвечу я: можно IF'ы в цикл засунуть просто, но там мороки побольши чуть-чуть. Есть тебе точно дано 3, то проще написать без них.
|
|
|

13.12.2009, 23:54
|
Регистрация: 29.05.2002
Сообщений: 1,793
С нами:
12604706
Репутация:
0
|
|
Сообщение от Alexey2
А как бы ты реализовал по - другому...?
Ну например так
Код:
function proverk (a:array of integer):integer;
const seqLength = 3;
var
i:integer;
counter: integer;
begin
counter := 0;
for i:=0 to length(a) do
if a[i] mod 2 <> 0 then
begin
counter := counter + 1;
if(counter=seqLength) then
begin
proverk := i- seqLength + 1;
exit;
end
end
else
counter := 0;
proverk:=0;
end;
Последний раз редактировалось Algol; 14.12.2009 в 00:06..
|
|
|

13.12.2009, 13:05
|
Регистрация: 29.05.2002
Сообщений: 1,793
С нами:
12604706
Репутация:
0
|
|
Сообщение от winflip
Можно конечно решать тонной уравнений прямых, но хотелось бы более простое решение.
Таки придется решать тонной уравнений
См алгоритмы поиска пересечений отрезков
http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D 0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D1%80%D0%B5%D0%B7%D0 %BA%D0%BE%D0%B2
Последний раз редактировалось Algol; 13.12.2009 в 13:09..
|
|
|

13.12.2009, 13:39
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 50
С нами:
9643491
Репутация:
105
|
|
помогите с программой плиз.
Дана целочисленная квадратная матрица n*n
1) Найти номера столбцов элементы которых образают убываюшую последовательность. Номера вывести на печать.
2) Номера выделенных столбцов возвести в квадрат и вывести на печатать, расположив по возрастанию.
|
|
|

13.12.2009, 16:36
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами:
9185589
Репутация:
128
|
|
Сообщение от BitHack
помогите с программой плиз.
Дана целочисленная квадратная матрица n*n
1) Найти номера столбцов элементы которых образают убываюшую последовательность. Номера вывести на печать.
2) Номера выделенных столбцов возвести в квадрат и вывести на печатать, расположив по возрастанию.
Вот тебе на С. Дополнительная сортировка номеров столбцов не нужна, т.к. они и так в массиве по-порядку
Код:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct {
int* col_nums;
int col_count;
} matrix_info_t;
#define N 3
matrix_info_t* scan_matrix(int* M, int n);
int main(int argc, char** argv)
{
int M[N*N] = {
5,2,3,
4,3,2,
3,4,1
};
matrix_info_t * m_info = scan_matrix(M, N);
(void)printf("Номера столбцов:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]);
}
(void)printf("\nНомера столбцов в квадрате:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]*m_info->col_nums[i]);
}
(void)printf("\n");
return 0;
}
matrix_info_t* scan_matrix(int* M, int n){
matrix_info_t * ret = malloc(sizeof(matrix_info_t));
ret->col_count = 0;
for(int j = 0; j < n; j++){
bool correct_column = true;
for(int i = 1; i < n; i++){
if(M[N*(i - 1) + j] < M[N*i + j]){
correct_column = false;
break;
}
}
if(correct_column){
ret->col_nums = realloc(ret->col_nums, sizeof(int) * ret->col_count++);
ret->col_nums[ret->col_count - 1] = j;
}
}
return ret;
}
Последний раз редактировалось ss88; 13.12.2009 в 17:03..
|
|
|

13.12.2009, 22:43
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 50
С нами:
9643491
Репутация:
105
|
|
Сообщение от ss88
Вот тебе на С. Дополнительная сортировка номеров столбцов не нужна, т.к. они и так в массиве по-порядку
Код:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct {
int* col_nums;
int col_count;
} matrix_info_t;
#define N 3
matrix_info_t* scan_matrix(int* M, int n);
int main(int argc, char** argv)
{
int M[N*N] = {
5,2,3,
4,3,2,
3,4,1
};
matrix_info_t * m_info = scan_matrix(M, N);
(void)printf("Номера столбцов:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]);
}
(void)printf("\nНомера столбцов в квадрате:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]*m_info->col_nums[i]);
}
(void)printf("\n");
return 0;
}
matrix_info_t* scan_matrix(int* M, int n){
matrix_info_t * ret = malloc(sizeof(matrix_info_t));
ret->col_count = 0;
for(int j = 0; j < n; j++){
bool correct_column = true;
for(int i = 1; i < n; i++){
if(M[N*(i - 1) + j] < M[N*i + j]){
correct_column = false;
break;
}
}
if(correct_column){
ret->col_nums = realloc(ret->col_nums, sizeof(int) * ret->col_count++);
ret->col_nums[ret->col_count - 1] = j;
}
}
return ret;
}
я забыл написать, что нужно написать на паскале)))
можешь переписать пожалуйста) 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|