Решение лабораторных, контрольных и т.д. на С++

  • Автор темы Автор темы European
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
вот моё решение
С клавиатуры вводится некоторое число. Суть задачи состоит в перестановке элементов числа таким образом, чтобы сформировать максимальное число. К примеру, из 109 получить тока 910 а не 901.

Код:
#include "stdafx.h"
#include "string.h"
#include <stdio.h>
#include <stdlib.h>
#include "conio.h"
#include <locale.h>
#include <ctype.h>
int main()
{
setlocale(LC_CTYPE, ".1251");
char number[20];
int flag=0;
int i,j;
int length;
int mas[20];
char dopl[2];
printf("Введите число: ");
gets(number);//Взятие строки
length=strlen(number);//strlen определяет длину строки
for(i=0;number[i];i++)
{
if(isalpha(number[i]))//Проверка является хотя бы 1 символ буквой 
flag=1;
}
if(flag==1)//если да то вывод сообщения
{
printf("Вводить надо число!");
getch();
return 0;
}
for(i=0;i<length;i++)
{
dopl[0]=number[i];//переписывет 1 символ строки в 1 ячейку дополнительного массива
nomer=atoi(dopl);//Преобразуем дополнительный массив в число
mas[i]=nomer;//Записывает в ячейку массива эту цифру
}
for(i=0;i<length-1;i++)//Сортировка
for(j=i+1;j<length;j++)
if(mas[i]<mas[j])
{
flag=mas[i];
mas[i]=mas[j];
mas[j]=flag;
}
printf("Результат: ");
for(i=0;i<length;i++)
printf("%d", mas[i]);
getch();
return 0;
}

Прогеры напишите пример сортировки букв в алфавитном порядке(желательно русских букв)
Входные данные:Строка(набор букв какой то)
Выходные данные:Строка,буквы которой расположены в алфавитном порядке....
 
Люди, ниче не пойму. Уже третий час сижу и ниче в голову не лезет :blink: Я учусь на первом курсе, и тут у нас такая задачка: "Найти сумму каждой строки в матрице и наименьшую из них" Сам алгоритм я понял, но как это все записать?... У меня такое начало:
Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int main()
{
const int n=5;
const int m=5;
int mas[n][m];
int S(0);
for (int i=0;i<n;++i)
for (int j=0;j<m;j++)
{
mas[j]=rand()%11-5;
}
int masghost[n]={0,0,0,0,0};
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
{
masghost+=mas[j];
}
Код:
А че дальше то?..
 
Ну как-то так
Код:
#include <iostream>
#include <math.h>
#include <stdlib.h>

using namespace std;
int main()
{
const int n = 5;
const int m = 5;

int mas[n][m];

int S(0);

for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
mas[i][j] = rand()%11;
}
}

int masghost[n] = {0, 0, 0, 0, 0};

for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
masghost[i] += mas[i][j];
}
}

// Выводим cуммы элеметнов в строке
for (int i = 0; i < n; ++i)
{
std::cout<<"Сумма в строке "<<i<<": "<<masghost[i]<<std::endl;
}

// Определяем минимальное значение
int minstr = 0;
int min = masghost[minstr];

for (int i = 1; i < n; ++i)
{
if (min < masghost[i]) continue;

min = masghost[i];
minstr = i;

}

// Ещё можно пробежать по суммам, и определить,
// может быть есть строки с одинаковой суммой.

std::cout<<"Минимальная сумма в строке: "<<minstr<<std::endl;

return (0);
}//main
 
Guardian только вот непонятно тебе именно с такими данными количество строк и столбцов надо?или ты просто так для примера написал 5 на 5?
 
Помогите пожалуйста. Надо найти интеглал методом правых прямоугольников. Кто знает формулу этих блин прямоугольников правых. Искала в инете- -нашла три и все разные и написано, что для првых. :wacko: Вобщем подскажите как правильно расписать формулу, ну если не лень - можно еще и програмку ( в идеале как функцию) :)
P.S.
Что в эту функцию запихнуть надо, чтобы она еще и n выводила (количество точек деления прямой, при котором достигнута точность). Если тупо в return приписать, то при использовании функции выводит одно значение как значение инегала, причем уже неправильное. Вобщем идей у меня толковых нет. Может своими поделитесь? :)
 
Плохо вы искали. доступно написано. Нашли три формулы, потому что методы есть правых, средних и левых. В этом реферате даже пример программ есть на Паскале.
 
Ну в принципе функцию я написала, она даже работает. :D Вот только зачем так извращаться и делить ихна средние, правые и левые, я так и не поняла, ведь в сущности одно и то же, или я неправильно разницу поняла. ;) Ну в любом случае сделала. А вот что туда еще добавить надо, тобы она при использовании выдавала еще и количество точек деления выдовало? Подскажите пожалуйста! Желательно побыстрее, а то мне завтра сдавать. :(
 
Помогите разобраться, у меня не работают функции fwrite и fread. Например, создать файл и написать пару строк, состоящая из номера, имени и баланса. затем одну строку удалить.
#include <stdio.h>
#include <stdlib.h>

struct clientData{
int acctNum;
char lastName[15];
int balance;
};

int main()
{
struct clientData client, blanc={0,"",0};
FILE *ofPtr;
int a;
if ((ofPtr=fopen("hardware.dat","r+"))==0) //открываем файл
printf("File no open");
else
{
printf ("Enter acctNum, lastName, balance: ");

scanf ("%d%s%d", &client.acctNum, client.lastName, &client.balance);
fseek (ofPtr, (client.acctNum-1)*sizeof(struct clientData),SEEK_SET);
//fwrite (&client, sizeof(struct clientData),1,ofPtr); //!!!!!!!!!!!!!!! здесь функция fwrite не записывает в файл ofPtr, вернее иероглифы записывает, приходится пользоваться fprintf
fprintf (ofPtr, "%-10d%-10s%-10d%\n", client.acctNum, client.lastName, client.balance);

//записываем 2 строку
scanf ("%d%s%d", &client.acctNum, client.lastName, &client.balance);
fseek (ofPtr, (client.acctNum-1)*sizeof(struct clientData),SEEK_SET);
fprintf (ofPtr, "%-10d%-10s%-10d%\n", client.acctNum, client.lastName, client.balance);

//затем проверяем функцию fseek, выведем любую строку на печать,
printf ("Enter stroky: ");
scanf ("%d",&a);

fseek (ofPtr, (a-1)*sizeof(struct clientData),SEEK_SET);
fscanf (ofPtr,"%d%s%d", &client.acctNum, client.lastName, &client.balance);
printf ("%-10d%-10s%-10d%\n", client.acctNum, client.lastName, client.balance); //работает

//теперь надо удалить любую строку
printf ("Enter stroky: ");
scanf ("%d",&a);

fseek (ofPtr, (a-1)*sizeof(struct clientData),SEEK_SET);
и здесь начинаеться реальный тупняк :)
Как записать нули или пробелы в строку. если функция fwrite не работает......
 
Не, ну правильно, а что вы хотите. в fwrite вы отдаёте структуру, вы там не увидите трёх полей, как вы может ожидаете. Вы записали структуру, вот и считывайте её и потом выводите.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct clientData{
int acctNum;
char lastName[15];
int balance;
clientData(): acctNum(0),
balance(0){}
};

int main()
{
struct clientData client;//t, blanc={0,"",0};

FILE *ofPtr;
int a;

if ((ofPtr=fopen("hardware.dat","r+")) ==0) //открываем файл
{
printf("File no open");
return (-1);
}

printf ("Enter acctNum, lastName, balance: ");

scanf ("%d %s %d", &client.acctNum, client.lastName, &client.balance);
fseek (ofPtr, (client.acctNum - 1)*sizeof(struct clientData), SEEK_SET);

fwrite(&client, sizeof(struct clientData), 1, ofPtr);

////записываем 2 строку
scanf ("%d %s %d", &client.acctNum, client.lastName, &client.balance);
fseek (ofPtr, (client.acctNum-1)*sizeof(struct clientData),SEEK_SET);
fwrite(&client, sizeof(struct clientData), 1, ofPtr);

////затем проверяем функцию fseek, выведем любую строку на печать,
printf ("Enter stroky: ");
scanf ("%d",&a);

fseek (ofPtr, (a-1)*sizeof(struct clientData),SEEK_SET);
fread(&client, sizeof(struct clientData), 1, ofPtr);
printf ("%10d-%10s-%10d\n", client.acctNum, client.lastName, client.balance); //работает

///теперь надо удалить любую строку
printf ("Enter stroky: ");
scanf ("%d",&a);
struct clientData data;
memset(&data, 0, sizeof(clientData));

fseek (ofPtr, (a-1)*sizeof(struct clientData), SEEK_SET);
fwrite(&data, sizeof(struct clientData), 1, ofPtr);
//
fclose(ofPtr);
return 0;
}
 
помогите пожалуйста решить задачи!!!! Никак не получается!!!! Заранее спасибо!!!!!

1.. Среди диагоналей квадратной матрицы, параллельных главной диагонали и расположенных выше нее, найти такую, сумма модулей элементов которой минимальна по сравнению с другими диагоналями.

2.Найти наибольшую последовательность в массиве, и вывести ее произведение.
 
Привет,люди добрые)
помогите вот с такой лабой
Дана непустая последовательность литер, оканчивающаяся точкой. Определить,удовлетворяет ли она следующему условию : Последовательность начинается с некоторой ненулевой цифры,за которой следуют только буквы и их кол-во равно значению этой цифры ( массивы использовать нельзя... проходили только ветвления и циклы... использовать можно тока их :) ) пишите в асю 378233222 ,на мыло jokdevil@mail.ru , или на крайняк сюда...
 
Здравствуйте! Помогите пожалуйста написать программу в DOS C++.
Напечатать заданный текст, удалив из него лишние пробелы, т. е. из нескольких подряд иду¬щих пробелов оставить только один
 
Напечатать заданный текст, удалив из него лишние пробелы, т. е. из нескольких подряд иду¬щих пробелов оставить только один
Код:
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
if (argc < 2) return -1;
const char *str = argv[1];
int len = strlen(str);
for (int i = 0; i < len; ++i)
{
if (len <= i + 1) continue;
if (str[i] == ' ' && str[i + 1] == ' ')
{
continue;
}
printf("%c", str[i]);
}
}// main
Классика, правда этот алгоритм не обращает на начало строки. Алгоритм то очень прост. А под DOS C++ сами переведите.
 
Помогите, кто может....

задание:
Сформировать бинарное дерево.
Тип информационного поля char. Найти высоту дерева.

знаю что нужно сделать через
Код:
struct Tree{
char Item;
Tree* left;
Tree* right;
}

а дальше уже ступор....
 
Помогите пожалуйста.
Строка состоит из слов, разделенных одним или несколькими пробелами. Среди слов, состоящих только из цифр, найти слово, содержащее максимальное число нулей. Если таких слов больше одного, найти предпоследнее из них.
Я написала программу в Visual Studio
# include <iostream>
# include <string.h>
# include <stdio.h>
using namespace std;
int prover (char *c)// проверяем, является ли числом
{
if ((*c==0)||(*c==1)||(*c==2)||(*c==3)||(*c==4)||(*c==5)||(*c==6)||(*c==7)||(*c==8)
||(*c==9))
return 1;
else return 0;
}
int main()
{
int k,i,xmax=0,x=0,nmax,kmax;
char str[]="ы1 11 ок2 ввв\0";
for (i=0;i!='\0';i++)
{
if ((str!=' ')&&((i==0)||(str[i-1]==' ')))// находим начало нового слова
{
for(k=i;k!=' ';k++)// проверяем до следующего пробела
{
if (prover(&str[k]))// ищем кол-во цифр в слове
x++;
}
}
if ((x>xmax)&&(x==(k-i)))// если кол-во цифр больше, чем в плошлом случае и слово состоит только из цифр
{
nmax=i;// запоминае конец и начало слова
kmax=k;
}
}
for (i=nmax;i<=kmax;i++)// распечатываем найденое слово
cout<<str;
cout<<endl;
return 0;
}
При компиляции ни ошибок, ни предупреждений не выдает, но при запуске компьютер выдает ошибку, предлагает послать отчет и т.д. вобщем.
Вопрос знатокам: что в ней неправильно?!
 
Спосибо большое. Вот если бы я еще поняла, что там происходит в процессе. :) Мягко выражаясь, мой уровень немного ниже и врядли я смогу обьяснить преподу принцип работы этой программы. Кстати я так подозреваю, что строку необходимо вводить (т.е она может быть любой) , вот только комп отказвыается выполнять такую функцию, поэтому я ее и задала так.
А моя программа совсем безнадежна? Может ее всетаки можно исправить? Мне ее в понидельник сдавать- если можно, то ответте побыстрее, пожалуйста.
P.S. Кстати, string мы не изучали.
 
Спасибо огромное! Вобщем, единственноое , что я поняла - делала не то, что надо по условию. Сейчас буду разбираться в большом списке моих ошибок. :)
Кстати, зачем вот это?
И еще, вы там написали, что надо первую строчку изменить. Так вот: первую с какого конца и как считать?
Я бы наверное просто добавила переменную и к проверке на цифру добаваила бы проверку на ноль , апотом сравнивала. Вобщем попробую, но может можно проще? :)
 
Предыдущий вариант мне как-то больше нравился, хотя бы слова все закомые были :)
Что это такое вообще?


Я вообще только на 1 курсе, так что чем примитивние - тем мне понятнее :)


Кстати, ни первый ни второй вариант у меня не идут. Ввожу строку, нажимаю enter и появляется милое сообщеньице от Microsoft Visual C++ Debug Library.
Его ставит в тупик выражение (unsigned)(c+1)<=256( ну покрайней мере так он пишет в сообщении). После того, как несколько раз нажимаю пропустить, он выдает результат, только в половине случаев неправильный! Подскажите пожалуйста,что мне с этой ерундой делать.
 
Ну например в первый вариант ввожу 00 050 а5550, выскакивает ошибка, нажимаю несколько раз пропустить, и он выдает 00.
Вот переделала ее немного, чтобы она с нулями искала
# include <iostream>
# include <stdio.h>
#include <ctype.h>
using namespace std;
void main()
{
int k,i,xmax=0,x=0,nmax=-1,kmax=-1,n,omax=0,o=0;
char str[]="2220 00 56 g7 9 ";
n=strlen(str);
for (i=0;i!=n;i++)
{
if ((i==0)||(str[i-1]==' '))// находим начало нового слова
{
x=0; o=0;
for(k=i;str[k]!=' '&&k!=n;k++)// проверяем до следующего пробела
if (isdigit(str[k]))// ищем кол-во цифр в слове
{
x++;
if (str[k]==0)
o++;
}
}

if ((x>xmax)&&(x==(k-i))&&(o>omax))// если кол-во цифр больше, чем в плошлом случае и слово состоит только из цифр
{
nmax=i;// запоминае конец и начало слова
kmax=k;
omax=o;
}
i+=k-i;
}
if(nmax!=-1)

for (i=nmax;i<=kmax;i++)// распечатываем найденое слово
cout<<str;
cout<<endl;



}
только она тоже неработает. Если пошагово делать, то видно, что нн стоку
if (str[k]==0)
o++;
}
просто игнорирует почему- то, вот она ине работакт. А почему - непонятно.
P.S. Данные ввода и вывода привела из вашей не измененной программы, какая была, такую и сковирывала и проверяла.
 
Спасибо большое, но можно в исправленом виде первый вариантик :rolleyes: , он мне как-то ближе и понятней, без всяких там isspace-ов. Если нет- пойму, и так загрузила, прямо неудобно. :)
А моя программа, которую я переделала, почему не работает? Если не сложно и есть уйма свободного времени, может вдруг решите посмотреть? Буду очень презнательна.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!