Students Опубликовано 25 марта, 2009 Жалоба Поделиться Опубликовано 25 марта, 2009 Вот помню что где-то видел код для этого задания, но так и не смог найти. Так что прошу прощение если повторюсь. Вот что надо написать на СИ. "Подсчитать количество сдвоенных символов "сс" "нн" "лл" во введенном тексте." Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 марта, 2009 Жалоба Поделиться Опубликовано 25 марта, 2009 (изменено) Students: Как я понял, любых сдвоенных символов? И, хм, а если символов три одинаковых подряд? Для простоты буду считать за пару символов каждое совпадение символа с предыдущим. #include<stdio.h>main(){char s[255];int i,n=0;gets(s);for(i=1;s[i];i++)n+=s[i]==s[i-1];printf("%d\n",n);getchar();} Изменено 25 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 25 марта, 2009 Жалоба Поделиться Опубликовано 25 марта, 2009 http://www.softboard.ru/index.php?s=&s...st&p=440485 есть идеи? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 (изменено) core: Вероятно, надо переписывать функции symbol и nextchar, чтобы они работали и с числами. Впрочем, чужую программу переписывать с изменением функций - обычно легче заново написать, хотя и поглядывая в чужую программу. Тем более, что, например, у меня Borland C++ не установлен, а эта программа использует бибилиотеки, которых в моем компиляторе нет, соответственно не компилируется. А алгоритм преобразования в ОПН подробно описан, например, в Википедии. Можно также придумать обходный путь, например, сначала все числа в строке заменить буквами (калькулятору вроде бы буквы не нужны, а если он должен работать и с алгебраическими выражениями, то в буквы, не встречающиеся в алгебре, например, кириллицу), преобразовать строку имеющейся программой, а потом заменить обратно буквы на числа. Если эта программа работает, то это самый простой путь. Изменено 26 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 Нет, проблем с числами или буквами нет. Но програма не работаетс числами у которых разряд больше 1. или ты имееш ввиду делать что-то вроде: 343+234+123+12+32=a+b+c+d+f+g. Потом строку переводим в ОПН и подставляем обратно числа? Хм...а ето хорошая идея. Спасибо. Поше пробовать Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 Здравствуйте! Помогите с программой на делфи или на паскале: нужно упорядочить одномерный массив из 25 вещественных чисел по убыванию Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 (изменено) provirt: const n=25;var i,j:integer; t:real; a:array[1..n]of real;begin writeln('Vvedite 25 chisel');for i:=1 to n do begin write(i:2,'-chislo? '); readln(a[i]) end;writeln('Ishodnij massiv'); for i:=1 to n do write(a[i]:10:3); writeln;for i:=1 to n-1 do for j:=1 to n-i do if a[j]<a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;writeln('Otsortirovannij massiv'); for i:=1 to n do write(a[i]:10:3); readlnend. Изменено 26 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 Задача 1 Сформировать массив Y из элементов массива Х(n); Y(i) определить, как сумму всех элементов Х(j), j<= i. Вывести оба массива.[/size][/size] Задача 2 Дана матрица X(n, m) целых чисел. Получить новую матрицу, элементы столбцов которой меньше элементов исходной матрицы на величину минимального элемента соответствующего столбца исходной матрицы. Вывести исходную и полученную матрицы. Очень нужно ...... от всей души буду благодарен :bye1: Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 (изменено) dimka-xd: 1. var x,y:array[1..100]of integer; i,n:integer;beginwrite('length of array? '); readln(n);for i:=1 to n do begin write(i:2,'-chislo? '); readln(x[i]) end;writeln('Ishodnij massiv'); for i:=1 to n do write(x[i]:8); writeln;y[1]:=x[1]; for i:=2 to n do y[i]:=x[i]+y[i-1];writeln('Massiv summ'); for i:=1 to n do write(y[i]:8); readlnend. 2. var x,y:array[1..16,1..16]of integer; i,j,n,m,t:integer;beginwrite(' n m? '); readln(n,m);for i:=1 to n do for j:=1 to m do begin write('x[',i:2,',',j:2,'] ? '); readln(x[i,j]) end;writeln('Ishodnij massiv'); for i:=1 to n do begin for j:=1 to m do write(x[i,j]:8); writeln end;for j:=1 to m do begin t:=x[1,j]; for i:=2 to n do if x[i,j]<t then t:=x[i,j]; for i:=1 to n do y[i,j]:=x[i,j]-t end;writeln('Novij massiv'); for i:=1 to n do begin for j:=1 to m do write(y[i,j]:8); writeln end;readlnend. Вообще-то такие вещи можно сначала и самому попробовать сделать, если не получится - другое дело. Изменено 26 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 Извиняюсь, что опять кидаю долгий код, но может так посмотрев кто поймет в чем ошибка //---------------------------------------------------------------------------#include <iostream.h>#include <stdio.h>#include <vcl.h>class TStr2PPN {AnsiString instr, outstr; //input & output stringschar curc; //the current characterint iin; //the index of the input stringchar nextChar(); //get the next charactervoid begin(); //handle plus & minusvoid mult_div(); //handle multiplication & divisionvoid symbol(); //handle characters public:TStr2PPN() { //constructor iin = 1;}void convert(char *str); //convert to PPNvoid digittostr (char *str); //перевід виразу на буквиvoid strtodigit (char *str); // перевід з буков на числаAnsiString get_outstr(); //get the output string};//get the next characterinline char TStr2PPN::nextChar() { if(iin <= instr.Length()) return curc = instr[iin++]; return curc = '\0';}//get the output stringinline AnsiString TStr2PPN::get_outstr(){return outstr;}/*Перевід рядка з багаторозрядними числами в масив стрічок */void TStr2PPN::digittostr (char *str){Char AllNumbers[15][15];int i=0,j=0,k=0,StrLen=0;instr = str;while (StrLen<instr.Length()){if(instr[strLen]>='0'&&instr[strLen]<='9') {AllNumbers[i][j]=instr[strLen]; outstr[k]=instr[strLen]; j++;} else{k++; outstr[k]=instr[strLen]; k++; i++;j=0;}StrLen++;}}//convert to PPNvoid TStr2PPN::convert(char *str) { try { instr = str; outstr.SetLength(0); iin = 1; nextChar(); //begin the convertation begin(); if(iin != (instr.Length()+1) || curc != '\0') { throw Exception("Syntax error"); } if(isalpha(instr[instr.Length()]) && instr[instr.Length()]!=')') { throw Exception("Syntax error"); } } catch(...) {throw;}}//handle plus & minusvoid TStr2PPN::begin() { try { mult_div(); while(curc=='+' || curc=='-') { char temp = curc; nextChar(); mult_div(); outstr += temp; } } catch(...) {throw;}}//handle multiplication & divisionvoid TStr2PPN::mult_div() { try { symbol(); while(curc=='*' || curc=='/') { char temp = curc; nextChar(); symbol(); outstr += temp; } } catch(...) {throw;}}//handle charactersvoid TStr2PPN::symbol() { try { if(curc=='(') { nextChar(); begin(); if(curc!=')') { throw Exception("Error: wrong number of brackets"); } else nextChar(); } else if(!isalpha(curc)) { outstr += curc; nextChar(); } else {throw Exception("Syntax error");} } catch(...) {throw;}}#pragma argsusedint main(int argc, char* argv[]){ char expr[80]; TStr2PPN str; while (1) { try { cout << "Introduce the expression (use only letters, arithmetical" << endl; cout << "operations and brackets. Introduce 0 to exit the program)" << endl; scanf ("%s",expr); if(expr[0] == '0') break; str.digittostr(expr); /* str.convert(expr); */ cout << '\n' << "Result: " << str.get_outstr() << '\n' << endl; } catch(const Exception& exc) { cout << '\n' << exc.Message << '\n' << endl; } } return 0;}//--------------------------------------------------------------------------- Здесь дописал функцию digittostr которая записывает многоразрядные числа в масив строк и переводит строку в вид с одноразрядными числами. Пока не идет речь об обратной замене на многорозрядные числа. Функцию проверил в Turbo C. Работает. тоисть при вводе строки примером: 234+123+345 програма выдаст результат 4+3+5, при етом сохранив 234, 123 и 345 в масиве соответственно AllNumbers[0],AllNumbers[1],AllNumbers[2]. Но на билдере выдает ошибку access violation при вызове функции. В чем проблема может быть? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 (изменено) core: Это надо бы пошагово отлаживать и смотреть, где возникает ошибка... Вот мой вариант перевода строки a в строку b, в которой каждое число (считая числа состоящими только из цифр)заменяется заглавной латинской буквой (A..Z, числа в виде строк хранятся в массиве f с индексами строк, соответствующими кодам этих заглавных букв), а потом строка-результат b с заглавными буквами вместо чисел преобразуется обратно к исходной строке #include<stdio.h>unsigned char a[255],b[255],f[255][10],i,j,k,l;main(){gets(a); l='A';for(i=j=0;a[i];i++,j++) {b[j]=a[i]; for(k=0;a[i]>='0'&&a[i]<='9';i++,k++)f[l][k]=a[i]; if(k){i--;f[l][k]=0;b[j]=l++;}}b[j]=0; puts(b); l='A';for(i=j=0;b[j];i++,j++) {if(b[j]<'A'||b[j]>'Z')a[i]=b[j]; else{k=0;while(f[l][k])a[i++]=f[l][k++];l++;i--;}}a[i]=0; puts(a); getchar();} P.S. Можно и, как сделано у тебя, заменять числа не на заглавные латинские буквы, а на однозначные числа, тогда надо 'A' заменить на '0', а 'Z' на '9'. Изменено 27 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 27 марта, 2009 Жалоба Поделиться Опубликовано 27 марта, 2009 Дана таблица названий и цен на N видов товаров по M магазинам. Вывести список магазинов, имеющих минимальные цены по заданному виду товара в формате: номер магазина, название и цену соответствующего товара. Магазины в списке расположить в порядке возрастания цены товара. Ссылка на комментарий Поделиться на другие сайты Поделиться
DeaD_MoroZ Опубликовано 27 марта, 2009 Жалоба Поделиться Опубликовано 27 марта, 2009 Задали в универе задание по языку командного интерпретатора Shell (в Линуксе): "Вывести на экран таблицу пользователей с обозначением запрещённых процессов (Process Id) и рассчитать время нахождения в системе для каждого пользователя" Так вот, вопрос заключается в том, что мне не понять, что такое 'запрещённые процессы'. Должен быть какой-то список этих процессов для каждого пользователя? Какой командой вывести этот список? А ещё не помню какой командой смотреть время начала работы какого либо юзера в системе.. зы. я нуб в Линуксе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 27 марта, 2009 Жалоба Поделиться Опубликовано 27 марта, 2009 DeaD_MoroZ: Насчет юзеров - лучше всего подойдет, наверно, команда who. Нужные параметры посмотри в ее помощи (who -h). А насчет запрещенных процессов лучше спросить в разделе о Linux - я такого термина вообще не помню. Ссылка на комментарий Поделиться на другие сайты Поделиться
Mike497 Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 Тролль, здрасте)) поможете?! : "Дана целочисленная матрица размера m на n. Найти элемент, являющийся максимальным в своей строке и минимальным в своём столбце. Если таких элементов нет, то вывести 0." вот что у меня получилось наданный момент: program _;var a:array[1..100,1..100] of integer;m,n,i,j,maxi,minj:integer;beginwriteln('vvedite m i n:');readln(m,n);writeln('zadaite matricu:');for i:=1 to m dofor j:=1 to n doreadln(a[i,j]);writeln('matrica:');for i:=1 to m do beginfor j:=1 to n dowrite(a[i,j]:4);writeln;end;minj:=1;maxi:=1;writeln('iskomii element:');for i:=1 to m do beginfor j:=1 to n doif a[i,j]>a[i,j+1] then begin if maxi>i then maxi:=i;end;end;for i:=1 to m do beginfor j:=1 to n doif a[i,j]<a[i+1,j] then begin if minj<j then minj:=j; end;end;writeln(maxi:4,minj:4);if (maxi>0) and (minj>0) then writeln(a[maxi,minj])else writeln('0');end. но почему то не всегда правильно работает...( Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 (изменено) Mike497: program Minimax;var a:array[1..100,1..100]of integer; i,j,k,m,n,maxel,minel,p:integer;beginwrite('Введите размеры матрицы, разделив их пробелом: '); readln(m,n); writeln('Введите значения элементов по строкам, разделяя элементы строки');writeln(' пробелами и заканчивая ввод каждой строки нажатием Enter'); writeln;for i:=1 to m do begin write('Строка ',i:2,': '); for j:=1 to n do read(a[i,j]); readln end; {ввели данные}writeln;for i:=1 to m do begin for j:=1 to n do write(a[i,j]:8); writeln end; writeln;{вывели исходную матрицу}p:=0; {счетчик найденных элементов}for i:=1 to m do beginmaxel:=a[i,1]; for j:=2 to n do if a[i,j]>maxel then maxel:=a[i,j];{нашли максимальное значение в строке}for j:=1 to n do if a[i,j]=maxel then {a[i,j] является одним из максимумов строки} begin minel:=a[1,j]; for k:=2 to m do if a[k,j]<minel then minel:=a[k,j]; {нашли минимальное значение в столбце} if a[i,j]=minel then {этот максимум в строке равен минимуму в столбце} begin p:=p+1; writeln('a[',i:2,',',j:2,']=',a[i,j]:6) end; end; end;writeln; writeln('Всего минимаксов: ',p);readlnend. Несколько замечаний и пояснений. Сначала общего характера, как составлять программу. Программа - это перевод решения задачи с уровня русского языка на уровень языка программирования. Поэтому сначала надо составить четкий план решения на русском языке. Если как решить задачу не вполне ясно уже на уровне описания условия или решения на русском языке, дальше будет только хуже. Хотя, конечно, и при правильном описании решения на русском языке перевод может быть неправильным :). Теперь к нашим баранам. Во-первых, соображаем, что такое максимум и минимум. Они бывают разные - бывают локальные и глобальные, строгие и нестрогие... Обычно под максимумом понимается глобальный нестрогий максимум (см. Википедию). Теперь, когда мы знаем, что ищем, полдела сделано. Теперь легко описать решение на человеческом языке: для каждой строки ищем ее максимальные элементы (их может быть несколько :doh: ) и для каждого из них проверяем, не является ли его значение минимальным в своем столбце. Если нашли такой элемент - ура! Если всю матрицу просмотрели, а такого не нашли - тоже ура, только другое :) Как найти максимальные элементы в строке? Пробежаться сначала по всей строке и найти максимальное значение элементов в ней. Потом снова идем по строке и сравниваем значение каждого элемента с найденным максимумом. Если совпало - наш элемент максимальный. А как найти это самое максимальное значение элементов в строке? Примем сначала за максимальное значение значение первого элемента. Потом проходим по строке и если какой-то элемент имеет значение больше прежнего максимума, поднимаем значение максимума до уровня этого элемента. С нахождением минимального значения в столбце - аналогично, только проверяем не на "больше", а на "меньше". Вот и все: теперь можно кодировать (ну, вообще-то надо еще решить, как вводить данные, что и как выводить... но это дело наживное, оформление всегда можно откорректировать, оно бросается в глаза, в отличие от ошибок в алгоритме). Да, в программе можно было прервать выполнение программы после первого найденного подходящего элемента - этого достаточно для ответа, а я заставил программу всегда просматривать всю матрицу до конца и выводить список всех подходящих элементов. Это при желании легко изменить. Изменено 28 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Mike497 Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 спасибо, Тролль!) вам бы монографии писать...)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 Mike497: Ну, я подробно прокомментировал в ответ на то, что у тебя написано, что твоя программа "почему то не всегда правильно работает...(". Я и постарался показать, как написать так, чтобы работала - не только готовый результат без комментариев, а и немного "кухни"... :) Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 Дана таблица названий и цен на N видов товаров по M магазинам. Вывести список магазинов, имеющих минимальные цены по заданному виду товара в формате: номер магазина, название и цену соответствующего товара. Магазины в списке расположить в порядке возрастания цены товара. Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 http://www.softboard.ru/index.php?showtopi...st&p=441047 по поводу етого сообщения. В общем там нет разницы во что переводить - нужно всего то образовать выражение с односимвольными операндами. Потом и так обратно подставлять значения будет одинаково - по порядку из масива вытаскивать из масива числа. В моем варианте просто оставляется последняя цыфра числа. Возможно ошибка из-за несоответствия между текстовыми типами даных - там и char и ansistring... хотя врятли Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 Потом и так обратно подставлять значения будет одинаково - по порядку из масива вытаскивать из масива числа. Да, если числа вытаскиваются просто в обратном порядке, то можно обойтись даже одним любым неиспользуемым символом, который будет означать просто подставить очередное число. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 (изменено) dimka-xd: var name:array[1..50]of string[30]; price:array[1..50,1..50]of real; {[n,m]} b:array[1..50]of boolean; n,m,i,j,k,l,p:word; r:real; beginwrite('number of articles? '); readln(n); write('number of shops? '); readln(m);for i:=1 to n do begin write('name of article number ',i:2,': '); readln(name[i]); for j:=1 to m do begin write(' price in the shop ',j:3,' ? '); readln(price[i,j]); end end;repeatwrite('number of the article (or 0 for exit)? '); readln(p); if p=0 then break;write('how many shops to show? '); readln(k);for i:=1 to m do b[i]:=true;for i:=1 to k do begin r:=1e6; for j:=1 to m do if b[j]and(price[p,j]<=r) then begin r:=price[p,j];l:=j end; writeln(l:4,name[p]:30,price[p,l]:8:2); b[l]:=false end;until false;end. В задаваемых вам программах практически ничего нет, кроме ввода-вывода. Тут не надо почти ничего, кроме продумывания, как должен выглядеть ввод-вывод. Если бы что-то не получалось с алгоритмом решения, другое дело. А то тупо писать - введем то... введем это... можно и самому. Изменено 29 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 Большое спасибо....... Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 и вот если не сложно посмотрите....... :) Дан список N рабочих цеха и количество изготовленных каждым из них деталей по K дням. Вывести по дням число рабочих, которые изготовили деталей больше, чем на данный день в среднем по цеху, фамилии рабочих, изготовивших по дням наибольшее число деталей (с указанием этого числа) и рабочего, изготовившего в целом наибольшее число деталей. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 29 марта, 2009 Жалоба Поделиться Опубликовано 29 марта, 2009 (изменено) dimka-xd: Посмотрел... Практически то же самое, вместо товара детали. Суммируем матрицу вдоль и поперек. Находим среднее. Находим максимум. И пишем: хорошие рабочие... лучшие рабочие... лучшие из лучших... Скучно... Ты мог бы это и сам сделать, ориентируясь на решение предыдущей задачи. var name:array[1..50]of string[20]; det:array[1..50,1..50]of word; n,m,i,j,k,s:word; r:real; beginwrite('number of workers? '); readln(n); write('number of days? '); readln(k);for i:=1 to n do begin write('name of worker with the number ',i:2,': '); readln(name[i]); for j:=1 to k do begin write(' number of details in the day ',j:3,' ? '); readln(det[i,j]); end end;for j:=1 to k dobegin s:=0; m:=0; for i:=1 to n do begin s:=s+det[i,j]; if det[i,j]>m then m:=det[i,j] end; r:=s/n; s:=0; for i:=1 to n do if det[i,j]>r then s:=s+1; writeln(' day ',j:3,' the number of the good workers: ',s:3); writeln(' the best: '); for i:=1 to n do if det[i,j]=m then writeln(' ',name[i]:-20,' produced ',m:3,' details'); end;s:=0; for i:=1 to n do begin m:=0; for j:=1 to k do m:=m+det[i,j]; if m>s then s:=m end;writeln('the best of the bests: ');for i:=1 to n do begin m:=0; for j:=1 to k do m:=m+det[i,j]; if m=s then writeln(' ',name[i]:20,' - ',m:4,' details') end;readlnend. P.S. Немного подправил - сначала забыл для лучшего рабочего вывести и количество сделанных им деталей. Изменено 29 марта, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти