Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #30 : 10-11-2005 11:14 » |
|
пришлось пока сделать одномерный массив...
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #31 : 10-11-2005 12:57 » |
|
У меня скомпилировалось так const int arr[][3]={{1,2,3}, {5,6,7}};
int *p=(int *)&arr[0][0];
Но я считаю, это неправельный подход.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
nikedeforest
|
|
« Ответ #32 : 10-11-2005 16:07 » |
|
Я тоже с этим возился как-то. Кажется я делал что-то наподобие этого int *p=arr[0];
Или около того, если это вдруг не сработает. Другого выхода не нашел. Я так понимаю, это не совсем то, что нужно.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
ChaoticCube
ChaoticCube
Помогающий
Offline
Пол:
ChaoticCube
|
|
« Ответ #33 : 10-11-2005 16:55 » |
|
Если не ошибаюсь, то int[][] p = arr тебе поможет.
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #34 : 10-11-2005 20:18 » |
|
Для статических массивов компилятор не даст иницилизировать массив без размерности. Размерность компилятор может получить либо согласно чисел стояших в скобках, либо по количеству элементов стояших в блоке иницилизации массива.
на int[][] p = arr компилятор выдал ошибку warning C4091: '' : ignored on left of 'int' when no variable is declared error C2143: syntax error : missing ';' before '['
|
|
« Последнее редактирование: 04-12-2007 19:14 от Алексей1153++ »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #35 : 11-11-2005 05:36 » |
|
спасибо всем, но мы тут по асе с Финчем уже разобрались я решил перейти на 1-мерный, так мне, кстати, более удобно оказалось
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #36 : 14-11-2005 13:26 » |
|
последнее время у меня появилось ощущение будто и не на языке C++ вы программки мне пишите: мне не надо потокового ввода-ввыдоа (cin/cout). и предыдущие 2 лабы я тоже совсем иначе решила, а над этой что-то бьюсь уже больно долго: ввести массив из 10 чисел. Найти максимальный элемент чисел массива, расположенный за элементом, равным нулю. Представить схему алгоритма.
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #37 : 16-11-2005 13:43 » |
|
так мне никто не поможет?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #38 : 16-11-2005 13:47 » |
|
А что это значит: Найти максимальный элемент чисел массива, расположенный за элементом, равным нулю.
Варианты 1. Найти максимум положительных числел массива 2. Найти максимум после элемента массива равного нулю В любом случае задача по нахождению максимума. Такая задача намного легче, чем твои предыдушие.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #39 : 16-11-2005 13:53 » |
|
1ое: среди элементов, расположенных после нулевых, найти максимальный и вывести его на экран 2ой: согласна. легче. просто что-то теряюсь, как условие "элемент после 0" простроить правильно...
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #40 : 16-11-2005 14:02 » |
|
Вопрос такой, ищем после первого попавшегося 0, или как только минуем последний ноль начинаем поиск?
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #41 : 16-11-2005 14:05 » |
|
Вопрос такой, ищем после первого попавшегося 0, или как только минуем последний ноль начинаем поиск?
скорее, как только минуем. хотя и 1ое подойдет. т.е. сначала найти все элементы, расположенные после нулевых и уже потом начать среди них поиск максимального.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #42 : 16-11-2005 14:09 » |
|
Не буду делать оформление, также не проверял, пишу вживую. Возможны ошибки. int mas[10]; int sost=0; //Sostoyanie int i=0; int max; while (i<10) { if (mas[i] == 0) { if (sost != 0) { printf("%d", max); sost=0; } } else { if (sost != 0) { if (mas[i]>max) max=mas[i]; } else { sost=1; max=mas[i]; } } i++; } if (sost != 0) printf("%d", max);
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
nikedeforest
|
|
« Ответ #43 : 16-11-2005 14:11 » |
|
Ну ты реши что хочешь , решения то разные. Если до первого нуля, то решение такое: беги циклом по массиву пока не встретишь ноль, как встретила, уже беги по массиву, заодно сравнивай элементы, запоминая борльший. Если после последнего ноля, то решение почти такое же, только циклом лучше бежать с конца массива, пока не встретишь первый ноль, а потом бежишь в обратную сторону массива (т.е. опять к концу) и ищешь наиб. значение. Понятно?ф
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #44 : 16-11-2005 14:28 » |
|
спасибки Вам всем огромное. побежала проверять. Вы такие добрые, Люди! хорошо, что такие еще не вымерли. но и Вы не забывайте: может и я Вам для чего сгожусь?
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #45 : 28-11-2005 06:02 » |
|
новая задачка: ввести символ. программа должна распознать, что это - цифра, знак или буква. Для букв программа должна выдать № буквы по алфавиту. Результат работы программы остается на экране до нажатия клавиши "Q". :vzhik:
так половинку уже сделала, а вот с кодом знаков и выдачи номера буквы по алфавиту загвоздочка выходит... ктстати, я предыдущую сама совершенно другим способом решила...
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #46 : 28-11-2005 13:00 » |
|
Если это латинские буквы. То проблем не должно возникать. Так как буквы расположенны в таблице символов в алфавитном порядке. Единственное что. Нужно учитывать регистр буквы. Определяеш в каком регистре введенный символ. И от него отнимаеш или "a" или "A". К результату добавляеш 1. Получаеш порядковый номер буквы в алфавите. С кирилицей будут проблемы. Всё зависит, в какой кодировке ты работаеш. Так как расположение символов в таблице очень сушественно отличается.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #47 : 15-12-2005 12:41 » |
|
Здрасьте! давненько туточки не появлялась. а почему? да потому что до этого момента собственных мозгов хватало. а теперь вот опять понадобился коллективный ум:
ввести 10 строчных букв латинского алфавита. Упорядочить их по алфавиту с помощью алгоритма замещения: при просмотре массива происходит последовательная перестановка пар элементов, если порядок пары неправильный. Алгоритм завершается, если при очередном просмотре массива не было поизведено ни одной перестановки. Результат работы программы остается на экране до нажатия клавиши "пробел".
P.S. метод замещения это случайно не одно и то же, что и "метод пузырька"?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #48 : 15-12-2005 12:57 » |
|
Если следовать логики, того что ты описала. То почти схожи. Только у пузырька граници двух циклов заданы жестко. У этого метода граница внутреннего цикла задана жестко. Но внешний цикл работает до того момента, пока происходят перестановки эллементов массива. Приблизительная схема такая: int flag=1; int i; char ch[10]; char temp; while (flag) { flag=0; for (i=0; i<9; i++) { if (ch[i] > ch[i+1]) { flag=1; temp=ch[i]; ch[i]=ch[i+1]; ch[i+1]=temp; } } }
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #50 : 24-12-2005 11:33 » |
|
задание: дана действительная матрица [5][5] с отрицательным элементом на главной диагонали. найти максимальный элемент в каждой строке и сумму элементов (в них же).
сама пробовала:#include <stdio.h> #include <conio.h> #include <math.h> #include <limits.h> void main () { clrscr (); int mtrx[5][5], SUM[5], MAX[5], i, j;
printf ("Enter the matrix:\n\n"); for (i=1; i<6; i++) for (j=1; j<6; j++) scanf ("%d",&mtrx[i][j]);
for (i=1; i<6; i++) { SUM[i]=0; MAX[i]=INT_MIN;
for (j=1; j<6; j++) { SUM[i]+=mtrx[i][j]; if (MAX[i]<mtrx[i][j]) MAX[i]=mtrx[i][j]; }
printf ("%d) summary = %d\t maximum = %d\n", i, SUM[i], MAX[i]);
} } 1-4 строки правильно выдает (и сумму элементов, и максимальный из них), но вот последнюю 5ую - непрвильно. где ошибка, спрашивается?
|
|
« Последнее редактирование: 24-12-2005 11:35 от Carrie Bradshaw »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #51 : 24-12-2005 11:38 » |
|
Вторым номером в топе граблей значится:. Индексация массивов начинается с 0, а не с 1.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #52 : 24-12-2005 11:49 » |
|
уточните: оба цикла (и i, и j) с 0 (i/j=0) по 6 не включая (i/j<6)? но тогда и строк, и столбцов получится по 6...
|
|
|
Записан
|
|
|
|
LP
Помогающий
Offline
|
|
« Ответ #53 : 24-12-2005 12:20 » |
|
туплю с утра над простой вещью: имеется статический массив arr, нужно объявить указатель p, с помощью которого можно было бы обращаться к элементам массива так же, как и через имя массива: код: const int arr[][3]={{1,2,3}, {5,6,7}, ...};
??? p=arr;
p[i][j]==arr[i][j];
что поставить вместо вопросов? int** не катит! Алексей1153, там надо было ставить const int (*p)[3] Логика такая: имя массива возвращает указатель на свой первый элемент. Двумерный массив int arr[2][3] это одномерный массив массивов. Т.е. одномерный массив размером в 2 элемента, а элементами являются одномерные массивы размером 3 элемента типа int. Поэтому arr возвращает указатель на масси
|
|
« Последнее редактирование: 04-12-2007 19:21 от Алексей1153++ »
|
Записан
|
Если эта надпись уменьшается, значит ваш монитор уносят
|
|
|
LP
Помогающий
Offline
|
|
« Ответ #54 : 24-12-2005 12:28 » |
|
Carrie Bradshaw, #include <stdio.h> #include <conio.h> #include <math.h> #include <limits.h> int main () { clrscr (); const int N = 5; int mtrx[N][N], SUM[N], MAX[N], i, j;
printf ("Enter the matrix:\n\n"); for (i=0; i<N; i++) for (j=0; j<N; j++) scanf ("%d", &mtrx[i][j]);
for (i=0; i<N; i++) { SUM[i]=0; MAX[i]=INT_MIN;
for (j=0; j<N; j++) { SUM[i]+=mtrx[i][j]; if (MAX[i]<mtrx[i][j]) MAX[i]=mtrx[i][j]; }
printf ("%d) summary = %d\t maximum = %d\n", i, SUM[i], MAX[i]);
} }
|
|
|
Записан
|
Если эта надпись уменьшается, значит ваш монитор уносят
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #55 : 26-12-2005 05:54 » |
|
Алексей1153, там надо было ставить const int (*p)[3] Логика такая: имя массива возвращает указатель на свой первый элемент. Двумерный массив int arr[2][3] это одномерный массив массивов. Т.е. одномерный массив размером в 2 элемента, а элементами являются одномерные массивы размером 3 элемента типа int. Поэтому arr возвращает указатель на масси ты неправ , статический arr[2][3] это массив arr[6] . Да с этим уже разобрались
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #56 : 28-12-2005 09:34 » |
|
опять не могу найти ошибку. надо вычислить функцию для введенного n. функция: 1/1*3 + 1/3*5 +...+ 1/(2n-1)(2n+1)#include<stdio.h> #include<conio.h> #include<math.h>
float function (int n) { int i; float q=0; for (i=1; i<=n; i++) q=q+1/((2*i-1)*(2*i+1)); return q; } void main () { clrscr (); int m; float f; printf("Vvedite n\n"); scanf("%d", &m); f=function(m); printf("Dlya dannogo n funkziya prinimaet znachenie:\n%f\n", f); getch(); }
|
|
|
Записан
|
|
|
|
Hooter
|
|
« Ответ #57 : 28-12-2005 09:51 » |
|
В цикле вычисления суммы результат выражения ((2*i-1)*(2*i+1)) имеет тип int из-за того, что переменная i имеет тип int. Поэтому результат деления единицы на int равен 0. Надо так: for (i=1; i<=n; i++) q=q+1/(float)((2*i-1)*(2*i+1));
В этом была проблема?
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #58 : 07-02-2006 03:40 » |
|
что-то никак не могу разобраться с достаточно легкой функцией strtok, особенно когда она второй раз упоминается... помогите... пускай на примере. вот:#include <stdio.h> #include <conio.h> #include <string.h>
void main () { clrscr (); char str[20],str2[20]; char *string; int i,j,k; gets(str); stpcpy(str2,str); string= strtok(str, ","); while (string != NULL){ string = strtok(NULL, ",");}
for (i=0;i<19;i++) for (j=i+1;j<20;j++) if (str[j]>str[i]) { k=str[j]; str[j]=str[i]; str[i]=k; }
printf ("\n"); j=0; for (i=0;i<20;i=i+2){ str2[i]=str[j]; j++;}
puts(str2);
}
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #59 : 07-02-2006 06:33 » |
|
ну так правильно: char * strtok ( const char * string, const char * delimiters ); Первым параметром должна передаваться строка из которой выбираются значения... только не понятно зачем тебе этот цикл: while (string != NULL){ string = strtok(NULL, ",");} после него string всегда будет NULL (так как это условие выхода из цикла)
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
|