Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: где ошибка?  (Прочитано 66468 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #30 : 10-11-2005 11:14 » 

пришлось пока сделать одномерный массив...
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #31 : 10-11-2005 12:57 » 

У меня скомпилировалось так
Код:
const int arr[][3]={{1,2,3}, {5,6,7}};

int *p=(int *)&arr[0][0];
Но я  считаю, это неправельный подход.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 10-11-2005 16:07 » 

Я тоже с этим возился как-то. Кажется я делал что-то наподобие этого
Код:
int *p=arr[0];
Или около того, если это вдруг не сработает. Другого выхода не нашел. Я так понимаю, это не совсем то, что нужно.
Записан

ещё один вопрос ...
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #33 : 10-11-2005 16:55 » 

Если не ошибаюсь, то int[][] p = arr тебе поможет.
Записан

Сила ночи, сила дня - одинакого фигня....
Finch
Спокойный
Администратор

il
Offline 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++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #38 : 16-11-2005 13:47 » 

А что это значит:
Цитата
Найти максимальный элемент чисел массива, расположенный за элементом, равным нулю.
Варианты
1. Найти максимум положительных числел массива
2. Найти максимум после элемента массива равного нулю

В любом случае задача по нахождению максимума. Такая задача намного легче, чем твои предыдушие.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #39 : 16-11-2005 13:53 » 

1ое: среди элементов, расположенных после нулевых, найти максимальный и вывести его на экран
2ой: согласна. легче. просто что-то теряюсь, как условие "элемент после 0" простроить правильно...
Записан
nikedeforest
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 16-11-2005 14:02 » 

Вопрос такой, ищем после первого попавшегося 0, или как только минуем последний ноль начинаем поиск?
Записан

ещё один вопрос ...
Carrie Bradshaw
Гость
« Ответ #41 : 16-11-2005 14:05 » 

Вопрос такой, ищем после первого попавшегося 0, или как только минуем последний ноль начинаем поиск?
скорее, как только минуем. хотя и 1ое подойдет. т.е. сначала найти все элементы, расположенные после нулевых и уже потом начать среди них поиск максимального.
Записан
Finch
Спокойный
Администратор

il
Offline 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
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #46 : 28-11-2005 13:00 » 

Если это латинские буквы. То проблем не должно возникать. Так как буквы расположенны в таблице символов в алфавитном порядке. Единственное что. Нужно учитывать регистр буквы. Определяеш в каком регистре введенный символ. И от него отнимаеш или "a" или "A". К результату добавляеш 1. Получаеш порядковый номер буквы в алфавите.
С кирилицей будут проблемы. Всё зависит, в какой кодировке ты работаеш. Так как расположение символов в таблице очень сушественно отличается.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #47 : 15-12-2005 12:41 » 

Здрасьте! давненько туточки не появлялась. а почему? да потому что до этого момента собственных мозгов хватало. а теперь вот опять понадобился коллективный ум:

ввести 10 строчных букв латинского алфавита. Упорядочить их по алфавиту с помощью алгоритма замещения: при просмотре массива происходит последовательная перестановка пар элементов, если порядок пары неправильный. Алгоритм завершается, если при очередном просмотре массива не было поизведено ни одной перестановки. Результат работы программы остается на экране до нажатия клавиши "пробел".

P.S. метод замещения это случайно не одно и то же, что и "метод пузырька"?
Записан
Finch
Спокойный
Администратор

il
Offline 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
Гость
« Ответ #49 : 16-12-2005 16:57 » 

так-так-так...  Круто!
со внешними и внутренними циклами все понятненько, а вот до while еще какие-нить операции в теле программы нужны, ну там помимо, стандартных, типа printfа, scanfа?.. и ещё: в самом конце на экран программа должна вывести ch или же что-то другое (просто в этом случае она не работает)... и знаю: обнаглела вообще: можно ну где-то так через пару строчечек комментарии?  Молчу
P.S. простите, если надоела уже со своими вопросами: туплю сегодня ужасно... а программу надо завтра. срочно.   Жаль
Записан
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
Спокойный
Администратор

il
Offline 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
Помогающий

ru
Offline 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
Помогающий

ru
Offline 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]);

}
}
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #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
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #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
Глобальный модератор

ru
Offline 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=-
Страниц: 1 [2] 3 4   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines